Imported Upstream version 15.8a upstream upstream/15.8a
authorPatrick McCarty <patrick.mccarty@linux.intel.com>
Fri, 12 Apr 2013 17:36:08 +0000 (10:36 -0700)
committerPatrick McCarty <patrick.mccarty@linux.intel.com>
Fri, 12 Apr 2013 17:36:08 +0000 (10:36 -0700)
104 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
INSTALL.gnu [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
acinclude.m4 [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
compile [new file with mode: 0755]
config.guess [new file with mode: 0755]
config.h.in [new file with mode: 0644]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
contrib/Makefile.am [new file with mode: 0644]
contrib/Makefile.in [new file with mode: 0644]
contrib/README [new file with mode: 0644]
contrib/cctree.txt [new file with mode: 0644]
contrib/cctree.vim [new file with mode: 0644]
contrib/ocs [new file with mode: 0644]
contrib/webcscope/INSTALL [new file with mode: 0644]
contrib/webcscope/LICENSE [new file with mode: 0644]
contrib/webcscope/TODO [new file with mode: 0644]
contrib/webcscope/cgi-lib.pl [new file with mode: 0644]
contrib/webcscope/cscope [new file with mode: 0644]
contrib/webcscope/hilite.c [new file with mode: 0644]
contrib/webcscope/icons/back.gif [new file with mode: 0644]
contrib/webcscope/icons/bomb.gif [new file with mode: 0644]
contrib/webcscope/icons/c.gif [new file with mode: 0644]
contrib/webcscope/icons/down.gif [new file with mode: 0644]
contrib/webcscope/icons/folder.gif [new file with mode: 0644]
contrib/webcscope/icons/folder.open.gif [new file with mode: 0644]
contrib/webcscope/icons/left.gif [new file with mode: 0644]
contrib/webcscope/icons/up.gif [new file with mode: 0644]
contrib/webcscope/icons/world2.gif [new file with mode: 0644]
contrib/xcscope/cscope-indexer [new file with mode: 0644]
contrib/xcscope/xcscope.el [new file with mode: 0644]
depcomp [new file with mode: 0755]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/cscope.1 [new file with mode: 0644]
doc/xcscope.1 [new file with mode: 0644]
install-sh [new file with mode: 0755]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
packages/MSDOS/README [new file with mode: 0644]
packages/MSDOS/djmake.bat [new file with mode: 0644]
packages/MSDOS/ylwrap.pat [new file with mode: 0644]
packages/cscope.spec [new file with mode: 0644]
packages/uw7/Prototype [new file with mode: 0644]
packages/uw7/cscope_pkg.sh [new file with mode: 0644]
packages/uw7/pkginfo [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/alloc.c [new file with mode: 0644]
src/alloc.h [new file with mode: 0644]
src/basename.c [new file with mode: 0644]
src/build.c [new file with mode: 0644]
src/build.h [new file with mode: 0644]
src/command.c [new file with mode: 0644]
src/compath.c [new file with mode: 0644]
src/constants.h [new file with mode: 0644]
src/crossref.c [new file with mode: 0644]
src/dir.c [new file with mode: 0644]
src/display.c [new file with mode: 0644]
src/edit.c [new file with mode: 0644]
src/egrep.c [new file with mode: 0644]
src/egrep.y [new file with mode: 0644]
src/emacs.e [new file with mode: 0644]
src/exec.c [new file with mode: 0644]
src/find.c [new file with mode: 0644]
src/fscanner.c [new file with mode: 0644]
src/fscanner.l [new file with mode: 0644]
src/global.h [new file with mode: 0644]
src/gmacs.ml [new file with mode: 0644]
src/gscope.c [new file with mode: 0644]
src/help.c [new file with mode: 0644]
src/history.c [new file with mode: 0644]
src/input.c [new file with mode: 0644]
src/invlib.c [new file with mode: 0644]
src/invlib.h [new file with mode: 0644]
src/library.h [new file with mode: 0644]
src/logdir.c [new file with mode: 0644]
src/lookup.c [new file with mode: 0644]
src/lookup.h [new file with mode: 0644]
src/main.c [new file with mode: 0644]
src/mouse.c [new file with mode: 0644]
src/mygetenv.c [new file with mode: 0644]
src/mypopen.c [new file with mode: 0644]
src/scanner.c [new file with mode: 0644]
src/scanner.h [new file with mode: 0644]
src/scanner.l [new file with mode: 0644]
src/snprintf.c [new file with mode: 0644]
src/version.h [new file with mode: 0644]
src/vp.h [new file with mode: 0644]
src/vpaccess.c [new file with mode: 0644]
src/vpfopen.c [new file with mode: 0644]
src/vpinit.c [new file with mode: 0644]
src/vpopen.c [new file with mode: 0644]
ylwrap [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..56c134a
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,34 @@
+Joe Steffen - Creator of Cscope
+Hans-Bernhard Broeker <broeker@physik.rwth-aachen.de> - Maintainer
+Petr Sorfa <petr@users.sourceforge.net> - Initial OpenSource Maintainer
+Simon Cozens - autoconf setup
+garp@digi.com - .cc .hh support
+jens persson <cscope@persson.cx> - new man page
+Edgar Toernig - cscope stability
+Martin Kraemer - various improvments
+Joshua Uziel <uzi@linuxcare.com>  - code clean up, -h and -k options, and lots more (including autoconf)
+Mike Hopkirk <hops@sco.com> - osr5 build, ocs
+Darrylo Okahata <darrylo@users.sourceforge.net> - code quality improvements
+Brent Verner <brent@rcfile.org> - -R option to recurse sub directories
+Thomas Klausner - NetBSD support
+Andrew Sharpe - progress bar, tab between line selection and prompts and more
+Carl Mascott - FreeBSD support
+Rich Salz - Allow -i accept stdio as input as "-"
+Stephane Fritsch - BeOS support
+Andy Newman <atrn> - FreeBSD support patch
+Sascha Blank - FreeBSD support
+Bruce Frost - Stability
+Chuck Marco and Wilfredo Sanchez - Darwin support
+Jason Duell - CSCOPE_EDITOR and CSCOPE_LINEFLAG*, invname database
+Tom Hull - Similar work to CSCOPE_EDITOR and friends
+Donald Slutz - Various fixes
+OGAWA Hirofumi - line mode fixes
+Garret Hade - Various ocs fixes
+Nick Dixon - Improvement in key handling
+Triet H. Lai <thlai@mail.usyd.edu.au> - GNU Emacs fixes for xcscope.el
+Steven Elliott <selliott4@austin.rr.com> - Fuzzy pattern matching for xcscope.el
+Ragho Mahalingam <ragho@mahalingam.com> - webcscope
+Dmitry Obukhov - Hilight code in webcscope
+David Cohrs - LEX and SUNOS scanner fix
+Valentin Podlovchenko - Overflow prevention and link recursion fix patch
+Neil Horman <nhorman@tuxdriver.com>  - Various Bug Fixes
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..5411e84
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+Copyright (c) 1998-2000, The Santa Cruz Operation 
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+*Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+*Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+*Neither name of The Santa Cruz Operation nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE. 
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..11ed713
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,825 @@
+2012-08-04  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * configure.in: Update version to 15.8a
+
+       * src/version.h (FIXVERSION): Update to 8a.
+
+2012-08-02  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/version.h (FIXVERSION): Update missed.
+
+       * src/fscanner.l: # with nothing after it would throw off the line
+       count. (Bug #3553579)
+
+2012-07-10 Neil Horman <nhorman@tuxdriver.com>
+
+       * src/invlib.c: Corrected some sizing of amtused in invlib.c.
+       sizeof(long) is dead reckoned to be 4 bytes, which is wrong on
+       x86_64.  Reported by Paul Bolle
+
+2012-06-15  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/gscope.c: Added placeholder file, needed for distcheck.
+
+       * configure.in: Added AM_PROC_CC_C_O, needed for upgrade of
+       automake.
+
+       * compile, config.guess, config.sub, install-sh, missing, depcomp,
+       ylwrap, INSTALL.gnu, mkinstalldirs: Updated to automake 1.11.3,
+       autoconf 2.68.
+
+       * Makefile.in, aclocal.m4, src/Makefile.in, contrib/Makefile.in,
+       doc/Makefile.in: Regenerated by automake 1.11.1.
+
+       * configure, config.h.in: Regenerated by autoconf 2.68.
+
+2012-06-15  Neil Horman  <nhorman@tuxdriver.com>
+       * configure.in: Update version in configure.in in prep for new release
+
+2012-06-15  Neil Horman  <nhorman@tuxdriver.com>
+       * src/find.c: Add check to make sure that second '=' on assignment
+       search isn't part of a digraph
+
+2012-05-20  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/command.c (command): Allow usage of function keys ctrl-f and
+       ctrl-b even from result pane.
+
+       * src/display.c (display): More informative display of position in
+       a multi-screenful result set.
+
+2012-04-07  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/display.c (fields): Move "samuel" special function back to
+       end of list, where it won't show on display.  Fix incorrect
+       on-screen description of findassign function.
+
+       * src/constants.h (NUMLEN): Increase from 5 to 10 to be able to
+       handle source files with freaky large numbers of lines.
+       (FIELDS): Reduce by one to avoid showing "samuel" special mode,
+       which is quite unusable to the general public.
+
+       * src/command.c (countrefs): There was still one scanf not taking
+       into account limited buffer lengths.
+
+       * src/find.c (check_for_assignment): Search for assignment failed
+       to recognize >>= and <<=, incorrectly recognized ~=, and was
+       implemented somewhat clumsily.
+
+2012-03-12  Neil Horman        <nhorman@tuxdriver.com>
+
+       * src/invlib.c: Modified posting construction code to properly limit
+       the fileindex value to avoid overflow.
+
+2012-03-05  Neil Horman <nhorman@tuxdriver.com>
+
+       * global.h, constants.h, find.c, display.c: Add search for symbol
+       assignment feature.  Its been soaking in Fedora for years now, and I
+       think it gets enough use that its time we put it upstream.
+
+2011-07-04  Neil Horman <nhorman@tuxdriver.com>
+
+       * configure.in, config.h.in, configure, src/main.c: Modified autoconf
+       files to support checking for getopt_long function and changed
+       _GNU_SOURCE macro test to HAVE_GETOPT_LONG test.  This should support
+       using getopt_long on all platforms automatically rather than have the
+       admin define it at build time.
+
+2011-07-04  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Remove unneeded if statement that checked for proper
+       use of s, f, i and p options (sf bug 2912347).
+
+2011-06-29  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/fscanner.l, src/scanner.l: Add NULL check to strpbrk call to
+       avoid cscope crashes when reading garbage files.
+
+2011-06-12  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * Makefile.in, aclocal.m4, config.h.in, configure,
+       contrib/Makefile.in, doc/Makefile.in, src/Makefile.in: Regenerated
+       by newer autoconf.
+
+       * src/build.c (build): Remove pointless write.
+       (copydata, copyinverted): Avoid potential NULL pointer problem.
+
+       * src/find.c (findcalling): Remove pointless write.
+
+       * src/main.c (main): Remove pointless write.
+       (main): Documented default include directory $INCDIR wasn't
+       actually considered.
+
+       * src/invlib.c (invmake): Remove pointless code.
+       (invnewterm): Restrict variable to the only block it's used in.
+       (boolfile): Remove unused local.
+
+       * src/main.c (main): Handle Ctrl-Z manually, as curses raw mode
+       doesn't do that by itself.
+
+       * src/command.c (changestring): Likewise.
+
+2011-05-26 Neil Horman <nhorman@tuxdriver.com>
+
+       * contrib/cctree.vim: Added vi plugin to read cscope db's
+       * contrib/cctree.txt: Added docs for cctree.vim
+
+2010-09-30  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Ignore SIGPIPE in linemode as well to allow
+       for proper file cleanup
+
+2010-03-04  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/dir.c (includedir, incfile): Cast size_t value to integer
+       for use as a *printf() precision argument.
+
+       * src/fscanner.l, src/scanner.l: Tolerate C++ :: scope operator
+       inside argument lists, too.
+
+2009-12-21  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Added some more missing short options to parse_options
+
+2009-12-14  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Added missing line mode operation options to
+       parse_arguments
+
+2009-12-14  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Fixed adjustments to argc/argv in parse_option to account
+       for the possibility that someone might specify multiple options in
+       one argument (-ab vs. -a -b)
+
+2009-12-09  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Added a new parse_options implementation to make option
+       parsing more sane and safe for systems which support getopt_long.  Also
+       added a check to make sure that single character options didn't specify 
+       trailing data (sf bug 2911623)
+
+       * AUTHORS: Fixed my email address
+
+2009-08-28  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/scanner.h: Added a LEXERR token to be returned if a lexer error
+       occurs
+
+       * src/crossref.c: Check for LEXERR token, and abort processing file if
+       lexer error occurs
+
+       * src/fcanner.l: check the statue of my_yytext on = and : symbols.  If
+       its NULL consider that a lexer error.  This can occur if input files are
+       provided that contain only a '=' or ':' symbol.  Without the ability to
+       detect and return a lexer error, we get a segfault.
+
+2009-05-06  Neil Horman <nhorman@tuxdriver.com>
+
+       * src/main.c: Fixed string length checks to avoid overflow
+
+2009-04-30  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/version.h (FILEVERSION, FIXVERSION): Version number changed
+       to 15.7a.
+
+       * configure.in: Version number changed to 15.7a.
+
+       * configure (all): Regenerated.
+
+2009-04-10  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/snprintf.c: Replacement implementation for missing snprintf
+       and vsprintf, from www.jhweiss.de.
+       
+       * acinclude: New macros to optionally activate a replacement for
+       missing snprintf and vsprintf, from www.jhweiss.de.
+
+       * configure.in: Call new macros for snprintf and vsprintf.  Drop
+       AC_FUNC_LSTAT in turn, since it would have required a replacement
+       implementation for lstat().
+
+       * src/Makefile.am (cscope_LDADD): Added LIBOBJS to automatically
+       include snprintf.o in the build if and only if needed.
+
+       * configure, config.h.in, aclocal.m4, Makefile.in,
+       contrib/Makefile.in, doc/Makefile.in, src/Makefile.in:
+       Regenerated.
+
+       * src/global.h: Add prototypes for replacement snprintf and
+       vsnprintf.
+       
+       * src/*.c: Replace all calls of sprintf by snprintf to avoid
+       possible buffer overflows.
+
+2008-06-30  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * aclocal.m4, configure, config.h.in, Makefile.in,
+       src/Makefile.in, doc/Makefile.in, contrib/Makefile.in: Regenerated
+       by recent autotools.
+
+       * compile, config.guess, config.sub, depcomp, install-sh, missing,
+       mkinstalldirs, ylwrap: Updated to version provided by recent
+       autotools.
+
+       * INSTALL.gnu: GNU installation instructions.
+
+       * src/global.h (tempstring): Fix mismatch of declaration with
+       definition.
+
+2008-04-11  Neil Horman            <nhorman@tuxdriver.com>
+       * src/main.c, src/exec.c : configure ncurses to operate in raw
+       mode so that ctrl-c (toggle case sensitivity) isn't swallowed by
+       the terminal driver
+
+2008-03-12  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/build.c (samelist): Previous fix broke handling of blanks in
+       directory names.
+       (build): Apply the same fix to other occurence of the same code.
+
+2008-03-10  Neil Horman                   <nhorman@tuxdriver.com>
+
+       * src/build.c: Fix Samelist to properly absorb newlines so that
+       inverted indicies aren't always rebuilt
+
+2008-02-14  Neil Horman                   <nhorman@tuxdriver.com>
+
+       * src/dir.c: Fix up issrcfile to identify hpp/hxx files as
+       standard c++ source files
+
+       * src/main.c: Add myexit as a handler for SIGTERM, to clean up
+       temp files on TERM
+
+2007-12-03  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * doc/cscope.1: Grammar corrections [SF patch #1843711] and troff
+       syntax fixes [from ESR].
+
+2007-03-10  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/scanner.l (comment_input): Translate EOF to LEXEOF in this
+       case, too.
+       (input, noncommentinput): Spell out LEXEOF instead of a magic
+       number 0.
+
+2007-02-09  Neil Horman                   <nhorman@tuxdriver.com>
+
+       * doc/xcscope.1: Added man page for xcscope utility in contrib
+
+2007-01-07  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/fscanner.l: Avoid a -Wunused warning by disabling the
+       yy_topstate() function.
+
+       * README: Add a warning about the intended user audience not
+       including superusers or anonymous ones.
+
+       * contrib/webcscope/cscope: Find perl in /usr/bin, which should be
+       more likely as its installation position these days.  Put a big
+       red reminder to the top of the generated HTML page warning about
+       the security issues involved with webcscope.  Thanks to V-Li and
+       the Gentoo folks for the patch.
+       
+2006-10-23  Neil Horman                   <nhorman@tuxdriver.com>
+
+       * src/main.c: Update sigwinch_handler to only register if linemode
+       is not specified (SF bug 1574354)
+
+2006-10-15  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/dir.c (accessible_file): New function to test for file
+       readability more strictly than just access().
+       (inviewpath): Use it to avoid unreadable files (directories, in
+       particular) getting into the srcfilelist, and thus hopefully fix
+       SF bug #1173768.
+       
+2006-10-10  Neil Horman            <nhorman@tuxdriver.com>
+
+       * src/main.c: Updated sigwinch_handler to not run in the event
+       that curses is not running to avoid crash (SF bug 1574354)
+
+2006-09-30  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/fscanner.l (wsnl): Expand set of allowed characters to make
+       scanner more tolerant of non-Unix linebreaks (should fix SF Bug
+       #1563459)
+
+       * src/Makefile.am (CLEANFILES, dist-hook): Commented out, to
+       reduce number of user reports from people without lex.
+
+       * configure.in: Change from AC_PROG_LEX to AM_PROG_LEX.
+
+       * src/Makefile.am (cscope_SOURCES): Added alloc.h.  Reindented.
+
+       * src/invlib.c (invnewterm): Correct loop test to account for
+       maxback being unsigned (should fix SF bug #1559495).
+
+       * src/Makefile.am (AM_CPPFLAGS): Renamed from INCLUDES, to quench
+       an automake warning.
+
+       * configure.in: Modernized via autoupdate.  Fixed several
+       'underquoted' warnings from aclocal.  Use a more telling source
+       file name in AC_CONFIG_SRCDIR.
+
+       * configure, aclocal.m4, Makefile.in, contrib/Makefile.in,
+       doc/Makefile.in, src/Makefile.in: Regenerated.
+
+2006-08-20  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/find.c (findsymbol): Missed one place where s_len had to be
+       initialized.
+                                 
+       * src/main.c (tempstring): Parametrize length by new macro
+       TEMPSTRING_LEN.
+       (main): Check against too long -f file name.
+       (main): Put explicit %s field widths into fscanf() call.
+       (main): Replace some fscanf() calls by fgets().
+
+       * src/input.c (shellpath): Limit size of strings copied from
+       environment.
+
+       * src/edit.c (editref, editall): Put explicit %s field widths into
+       fscanf() calls.
+
+       * src/display.c (display): Put explicit %s field widths into
+       fscanf() call.
+
+       * src/dir.c (makefilelist): Put explicit %s field width into
+       sscanf() call.
+
+       * src/constants.h (TEMPSTRING_LEN): New macro, needed to
+       parametrize a fscanf() call.
+       (STRINGIZE): New macro used to build the following.
+       (PATLEN_STR, PATHLEN_STR, NUMLEN_STR, TEMPSTRING_LEN_STR): Buffer
+       lengths (minus 1) expressed as a string literal, to be used in as
+       field widths in {f,s}scanf() calls.
+
+       * src/command.c (changestring): Put explicit %s field widths into
+       fscanf() call.
+
+       * src/build.c (samelist, build): fgets() replaces fscanf().
+       (build): Put explicit %s field widths into fscanf() call.
+
+2006-07-23  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/global.h: Rename putstring() to fetch_string_from_dbase(),
+       add a parameter.
+
+       * src/find.c: Add #include <assert.h>
+       (fetch_string_from_dbase): Renamed from misleading name
+       putstring().  Add new parameter, and use it to avoid overflowing
+       the output buffer.
+       (findsymbol): New local: s_len.  Rename calls to putstring(). Add
+       new argument, some of them from s_len.
+       (finddef, findallfcns, findcalling, findinclude, match,
+       findcalledby, putpostingref): Rename calls to putstring(). Add new
+       argument.
+
+       * src/constants.h (MSGLEN): Add safety parentheses.
+
+       * src/library.h: Remove prototypes of alloc.c functions.
+
+       * src/alloc.h: New file.  Moved prototypes of alloc.c functions in
+       here, out of library.h.
+
+       * src/alloc.c: Include new header file from here.
+       (my_strdup): Changed name from misleading stralloc().  Remove
+       incorrect cast.
+
+       * src/build.c: Add #include "alloc.h".
+       (fetch_include_from_dbase): Renamed from misleading name
+       putinclude().  Add length of target string as an argument.
+       (setup_build_filenames): Rename calls of stralloc().
+       (getoldfile, copyinverted): Rename calls of putstring(). Add new
+       argument.
+       (copydata, coypinverted): Rename calls of putinclude().  Add new
+       argument.
+
+       * src/vpinit.c: Add #include "alloc.h"
+       (vpinit): Rename calls of stralloc().
+
+       * src/main.c: Add #include "alloc.h".
+       (main): Rename calls of stralloc().
+
+       * src/history.c: Add #include "alloc.h".
+       (addcmd): Rename call of stralloc().
+
+       * src/fscanner.l: Add #include "alloc.h".
+
+       * src/display.c: Add #include "alloc.h".
+
+       * src/dir.c: Add #include "alloc.h".  Move project includes above
+       system headers.
+       (sourcedir, addsrcdir, includedir, addincdir, addsrcfile): Rename
+       calls to stralloc().
+
+       * src/crossref.c: Add #include "alloc.h"
+
+       * src/command.c: Add #include "alloc.h".
+
+2006-05-06  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/fscanner.l: Accept numeric literals inside fcn definitions
+       and calls.
+
+2006-04-21  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       Make source clean under -Wsign-compare.
+       
+       * src/main.c (fileargc): Make counter unsigned.
+       (main): Make local counter unsigned.
+       (main): Fixed two sprintf() excess arguments.
+
+       * src/lookup.c (initsymtab): Make local counters unsigned.
+
+       * src/invlib.c (LINEMAX): Removed.
+       (invmake): Change length of local variable "line" to TERMMAX.
+       (numpost, numlogblk, amtused, nextpost, lastinblk, numinvitems):
+       Make counters unsigned.
+       (invnewterm): Make local counters unsigned.
+
+       * src/input.c (mygetline): Make local counters unsigned.
+
+       * src/find.c (findregexp, findfile): Make local counters unsigned.
+
+       * src/egrep.y (line, left, right, parent): Make unsigned.
+       (enter, cclenter): Return unsigned.
+       (follow): Make argument unsigned.
+       (cclenter, cfoll, cgotofn, member, add, follow): Make local
+       counters unsigned.
+       (cgotofn, member): Cast char to unsigned char, not unsigned int,
+       for use as an index.
+
+       * src/display.c (disprefs, mdisprefs, nextline, topline,
+       totallines): Make unsigned.
+       (search): Removed unused locals.
+       (seekline): Make argument unsigned.
+
+       * src/dir.c (nincdirs, nsrcdirs, nsrcfiles, msrcfiles, mincdirs,
+       msrcdirs, nvpsrcdirs): Make unsigned long.
+       (sourcedir, includedir, makefilelist, incfile, inviewpath): Make
+       local counters unsigned.
+
+       * src/crossref.c (symbols, msymbols): Make unsigned long.
+       (struct symbol): Make elements first, last, length and fcn_level
+       unsigned.
+       (crossref, putcrossref): Make local counters unsigned.
+
+       * src/command.c (curdispline): Make unsigned.
+       (mark): Make argument and local counter unsigned.
+       (command): Make KEY_LL conditional on KEY_LL, not KEY_HOME.
+       (changestring): Made local counter unsigned.
+
+       * src/build.c (build): Change several local ints to unsigned
+       longs.
+
+       * src/global.h: Updated lots of declarations to match the above.
+
+       * src/alloc.c (mymalloc, mycalloc, myrealloc): Make size arguments
+       size_t. Remove pointless casts in several of their callers.
+
+       * src/library.h (mymalloc, mycalloc, myrealloc): Updated
+       prototoypes.
+
+2006-04-20  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       * src/input.c (askforreturn): If curses is handling the display,
+       redraw the screen before returning, to keep error messages from
+       permanently scrambling the display.
+
+       * configure.in: Add test for <io.h>.
+
+       * configure, config.h.in: Regenerated.
+       
+       * src/mypopen.c [HAVE_IO_H]: #include <io.h> it, for the setmode()
+       declaration.
+
+2006-04-19  Hans-Bernhard Broeker  <broeker@physik.rwth-achen.de>
+
+       General change: indentation width of touched areas changed to 4
+       spaces, open braces not on lines of their own, single-line "else
+       if", get rid of (void) casts of unused function return values.
+
+       * src/global.h (select_large): Removed declaration.
+
+       * src/main.c (select_large, main): Removed long unused global.
+
+       * src/dir.c (scan_dir): Get rid of d_ino check --- this field is
+       not reliably present in struct dirent, and doesn't achieve enough
+       to be worth autoconf-ing around.  Works around problems compiling on
+       Cygwin release 1.5.19.
+
+       * Makefile.in, aclocal.m4, configure, contrib/Makefile.in,
+       doc/Makefile.in, src/Makefile.in: Regenerated with current auto
+       tools (autoconf-2.59, automake 1.9.6).
+
+2006-02-21  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/vpinit.c (vpinit): Fix handling of slightly malformed VPATH
+       environment variable contents.
+
+2005-11-22  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/dir.c (issrcfile): Finally added auto-searching for
+       three-letter C++ file extensions *.tcc, *.cpp, *.cxx.  Test all
+       matches to be regular files, not just those with two- and
+       three-character extensions.
+
+       * src/invlib.c: Some cleanup.  Replace 0 third argument to fseek
+       by proper SEEK_SET.  Got rid of (void) result casts and some
+       function argument casts.
+       (invmake): Fix one sizeof(long)==4 assumption.
+
+2005-08-16  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/main.c: Uncluttered by removing nitpicky (void) casts.
+       (longusage): Reworked for source legibility even on 80-column
+       displays.
+       (main): If in verbose linemode, print number of references found,
+       first off.  Patch from Elad Lahav, for Kscope
+
+2005-07-08  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/build.c (invname_buf, invpost_buf, reffile_buf): Make
+       modifiable copies of the default file names.
+       (invname, invpost, reffile): Initialize pointers to modifiable
+       copies, rather than to string literals.
+
+       * packages/MSDOS/djmake.bat: Adapt to modern position of ylwrap
+       script.
+
+       * src/command.c (command) [KEY_RESIZE]: Protect by
+       !defined(__DJGPP__).  That platform doesn't have sigaction() and
+       associated machinery, nor does it really support terminal size
+       changes to begin with.
+
+       * src/main.c (sigwinch_handler): Likewise.
+       (main): Likewise.
+
+2005-04-29  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/command.c (command): Additional hotkey mapping of Ctrl-A to
+       same function as Ctrl-Y, like AT&T cscope, to evade Ctrl-Y
+       occupied as the DSUSP signal key on BSD'ish platforms.
+
+       * src/help.c (help): Document additonal hotkey ^A.  Mention
+       possible unavailability of some Ctrl keys because of terminal
+       settings.
+
+2005-03-14  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/input.c (getline): Removed.  Was just a minimally simplified
+       copy of mygetline() anyway, and it threatened to collide with a
+       like-named routine in libc.
+       
+       * src/global.h (getline): Removed prototype.
+
+       * src/command.c (command): Changed all calls of getline() to
+       mygetline() with an empty string as the first argument.
+
+       * src/egrep.y (memset): Changed #if condition around fallback
+       implementation to match that of the prototype in global.h.  Should
+       fix SF bug #1163104 (build failure on FreeBSD).
+
+2005-02-16  Neil Horman  <nhorman@gmail.com>
+
+       * src/command.c (command): Added ifdef KEY_RESIZE around
+       KEY_RESIZE case in switch statement to allow curses
+       libraries which don't support resize events to build
+
+       * src/main.c (main): Added ifdef KEY_RESIZE around 
+       SIGWINCH handler and signal registration logic to
+       remove resize code from cscope when building with
+       curses libraries that don't support resize events
+
+2005-02-04  Neil Horman  <nhorman@gmail.com>
+
+       * src/command.c (command): Added KEY_RESIZE event case to 
+       command switch to handle window re-drawing when a resize 
+       event was received.
+
+       * src/input.c (mygetch): Added error checking of return code
+       to restart call to getch in the event it returned early due
+       to a signal being delivered.
+
+       * src/main.c (main): Registered a signal handler for the 
+       SIGWINCH handler which is delivered when a terminal is 
+       resized.  Handler pushes a KEY_RESIZE event onto the head 
+       of the command input queue.
+
+2005-02-01  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/build.c (build): Keep interactive mode on, even if on a
+       terminal, if verbose mode (-v) was turned on.
+
+2005-01-31  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/scanner.h: Declare yytext signed on AIX (without stating a
+       version number, for now).
+
+2005-01-30  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/mypopen.c (mypopen): Make closing argument to execlp() a
+       manifest null pointer, not just a zero.
+
+2004-12-08  Neil Horman  <nhorman@gmail.com>
+       
+       * src/dir.c: Fix to dissallow unreadable files from 
+       srcfiles list (sourceforge bug number 1040690)
+
+2004-12-06  Neil Horman  <nhorman@gmail.com>
+       
+       * src/main.c: Fix for temp file security bug (sourceforge 
+       bug number 1062807 / CAN-2004-0970)
+
+2004-11-22  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * doc/cscope.1: Make ESR happy: change man page summary section to
+       avoid [0-9] syntax.
+
+2004-10-27  Hans-Bernhard Broeker  <broeker@accip02.physik.rwth-aachen.de>
+
+       * src/display.c (search): Replace duplicated code by a call to
+       countrefs().  Duplicate lacked adjustment of column widths in case
+       of very long function/file names.  Thanks to Darlene Wong for
+       spotting this.
+
+       * src/global.h (countrefs): Prototype added.
+
+       * src/command.c (countrefs): Made globally available.
+
+2004-06-23  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/dir.c (makefilelist): Fix broken movement of point_in_line
+       when parsing quoted names.  Simplify structure by moving default
+       handling upward.
+
+2004-06-21  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * contrib/ocs (SYSDIR): Only set to /usr/local/lib/cs if not
+       already set in outside environment.  Check that $(SYSDIR) exists
+       before proceeding.  From SF patch #976788 by Neil Horman.
+
+2004-04-30  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/vpinit.c (vpinit): Renamed argument currentdir to
+       current_dir to avoid name clash with same-named global.
+
+       * src/command.c (Pattern): Renamed from "pattern", to avoid
+       multitute of compiler warnings about shadowing by locally defined
+       variables of the same name.  Changed all usages of this variable,
+       too.
+       (command): Test for individual KEY_* macros instead of TERMINFO
+       whenever one of the KEY_* macros is referenced.  This should
+       reduce the TERMINFO mess a little.
+
+       * src/find.c (read_block): Renamed from "readblock", to avoid name
+       clash with QNX system function of that name.  Calls changed
+       accordingly, all over the place.
+
+       * src/display.c: Fix fall-back definition of sigjmp_buf.
+
+       * src/constants.h: Activate TERMINFO for FreeBSD.
+
+       * src/input.c (mygetline): New function.  Poor-man's readline
+       imitation.  From SF Patch #937310.
+
+       * src/global.h (mygetline): Prototype added.
+
+       * src/command.c (command): Use mygetline() instead of letting
+       ncsurses doing it all.  Make Ctrl-B/F special hotkeys that are
+       handled here instead of in mygetline(), to preserve their meaning.
+
+       * packages/cscope.spec: Updated by SF patch #920586 to be more
+       compatible with current expectations.
+
+2004-02-24  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * configure.in (AC_CHECK_HEADERS): Added check for NSK-Tandem
+       special magic header file <floss.h>.
+
+       * src/global.h [HAVE_FLOSS_H]: Added #include <floss.h> if it
+       exists.
+
+2004-02-14  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/command.c (countrefs): Fix off-by-one length specification
+       of %s format.  Thanks to <anil@recoil.org> for spotting it.
+
+2004-02-12  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       Fix SF bug #892731: Ctrl-C interruption of search works only once
+       per session.
+       
+       * configure.in (sigsetjmp): Added test for presence of this
+       function.
+
+       * src/display.c (sigsetjmp) [!HAVE_SIGSETJMP]: Provide fallback
+       definitions for functions sigsetjmp, siglongjmp and type
+       sigjmp_buf.
+       (search): Move call to signal() above that to setjmp().  Call
+       sigsetjmp() instead of setjmp().
+
+       * configure, config.h.in: Regenerated.
+
+       * Makefile.in, src/Makefile.in, contrib/Makefile.in,
+       doc/Makefile.in, aclocal.m4: Rebuilt by automake-1.7.9.
+       
+       
+2004-02-11  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * configure.in (signal.h) Check added.
+       (sighandler_t): Check for this type.  Should be defined on POSIX
+       platforms, but is treated as a GNU extension sometimes.
+
+       * src/global.h (sighandler_t) [!HAVE_SIGHANDLER_T]: Provide
+       fallback definition of function pointer typedef for signal
+       handlers if <signal.h> doesn't provide it. Simplifies cscope's
+       work when working on its own source code --- function pointers
+       confuse it quite badly, so it's best to minimize their visibility.
+
+       * src/input.c (mygetch): Type of local variable savesig written
+       using sighandler_t.
+
+       * src/display.c (search): Type of local variable savesig written
+       using sighandler_t.
+
+       * src/exec.c (oldsigtstp): Renamed, from oldsigstp.
+       (oldsigtstp,oldsighup,oldsigquit): Changed from function pointer
+       type to new typedef name sighandler_t.
+
+2004-02-05  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/global.h (tolower) [BSD]: Fix stupid typo in overrides for
+       toupper and tolower.
+
+2004-01-08  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/display.c (clearmsg): New function.  Does essentially the
+       same thing previously achieved by a rather more cryptic
+       postmsg("").
+       (postfatal): New function to printout a fatal error message and
+       terminate the program. Works like posterr(), but exits curses
+       first, so the message should end up visible after the program
+       exits.  Using this instead of posterr()+myexit() fixes SF bug
+       #419510.
+       (dispinit): Use postfatal:().
+       (postmsg): Use clearmsg().
+       (postmsg2): Call curses refresh() after change.
+
+       * src/global.h: Add prototypes for new functions clearmsg() and
+       postfatal().
+
+       * src/find.c (putsource): Use postfatal().
+
+       * src/main.c (main, skiplist): Use postfatal() and clearmsg().
+
+       * src/command.c (command): Use clearmsg().
+
+       * src/build.c (build, seek_to_trailer, movefile): Use postfatal().
+
+       * src/alloc.c (alloctest): Use postfatal().
+
+       * src/display.c (jumpback): Re-instate signal handler, in an
+       attempt to fix problems reported with the general behaviour of
+       signal handlers in cscope.
+
+       * src/scanner.l (ws, wsnl): Two new predefined patterns to catch
+       not only blanks and tabs, but all generally allowed white-space
+       characters in source files: form feeds, vertical tabs, carriage
+       returns.  Replaced most occurence of [ \t] and [ \t\n] by these.
+       This is a back-port from fscanner.l.  Should fix SF bug #508060.
+
+Wed Oct 15 16:05:46 2003  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/dir.c (scan_dir): Don't reduce path to basename before
+       calling issrcfile.
+       (issrcfile): Use either basename or full path, as necessary for
+       the individual tests.  Reorganized to reduce nesting.
+
+Mon Sep 15 12:34:46 2003  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/egrep.y (yylex, member, egrep, cgotofn): Reindented.  Fixed
+       implicit int declarations and casts.
+
+       * src/global.h (tolower, tolower) [BSD]: Fix override definitions
+       for these so they don't mung non-alphabetic input.
+
+Fri Sep 12 09:33:19 2003  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       * src/vp.h: Add #include of <sys/types.h> to fix problem on
+       Solaris.
+
+Fri Sep 12 09:33:19 2003  Hans-Bernhard Broeker  <broeker@physik.rwth-aachen.de>
+
+       I'm finally starting a new, GNU-format ChangeLog file.  The format
+       of the previous was too terse to be really useful.  This begins
+       with the first changes after release 15.5.
+       
+       * ChangeLog.old: New file.  Renamed copy of old-format ChangeLog
+       file.
+
+       * ChangeLog: Started from scratch.
+
+       
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..b2854db
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,60 @@
+***** BUILDING:
+
+This program's build procedure is fairly standard.  Try:
+
+       ./configure
+       make
+       make install
+
+Options to the configure script are up to you.  For details, run:
+
+       ./configure --help
+
+Please report build problems at:
+
+       http://sourceforge.net/bugs/?func=addbug&group_id=4664
+
+(yes, even non-Linux problems).
+
+
+***** TIPS AND PROBLEMS:
+
+- Try to use flex as the lexical analyzer.  The lex scanner is now
+separated from the flex version to allow the flex scanner to be
+optimized.  It's also a lot harder to diagnose and debug problems
+without having full access to the particular platform and its version of
+lex being used.  flex is available everywhere --- AT&T lex is not.
+
+- On Solaris, the native lex fails to catch our redefinition of YYLMAX
+early enough, which leads to possible buffer overflows.
+
+- On Linux systems (and possibly others) configure may fail if lex is
+  a synomyn for flex.  To fix, do the following:
+
+       make distclean
+       ./configure --with-flex
+       make
+
+- On HP-UX several problems exist when using configure. Try the following
+  to solve this:
+
+       CFLAGS='-Ae -DYYCHAR_ARRAY' CURSES_LIBS=-lHcurses ./configure
+
+- On Tru64, formerly known as Digital Unix, formerly known as DEC OSF/1,
+  the system-supplied libcurses causes cscope to terminate itself
+  immediately as it comes back to foreground after being suspended by
+  the user (Ctrl-Z). Using GNU Ncurses instead of OSF1 curses works
+  around the problem. According to the lynx and ncurses people, this
+  is a design problem of curses vs. signal handling, at the heart of it.
+
+- Solaris 2.8 on Intel hardware may not work using the vendor's curses
+  implementation.  Using the free NCurses should help.
+
+- Some ancient Unix filesytems supported only 14 characters in 
+  filenames.  cscope no longer cares for that by default.  If you want
+  to run it on such a system, #define the macro SHORT_NAMES_ONLY manually
+  (there's a definition in global.h you can uncomment).
+
+Browse to http://cscope.sourceforge.net for more current information,
+like reported bugs whose solutions haven't been put into this source
+distribution yet.
diff --git a/INSTALL.gnu b/INSTALL.gnu
new file mode 100644 (file)
index 0000000..a1e89e1
--- /dev/null
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..ae0fc53
--- /dev/null
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = doc src contrib
+
+EXTRA_DIST = INSTALL.gnu packages
+
+dist-hook:
+       @for dir in `find $(distdir) -type d -name CVS -print`; do \
+         rm -rf $$dir; done
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..2146e01
--- /dev/null
@@ -0,0 +1,727 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+       TODO compile config.guess config.sub depcomp install-sh \
+       missing mkinstalldirs ylwrap
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
+CURSES_LIBS = @CURSES_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gnome1 = @gnome1@
+gnome2 = @gnome2@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = doc src contrib
+EXTRA_DIST = INSTALL.gnu packages
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @if test ! -f $@; then rm -f stamp-h1; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.lz*) \
+         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @test -n '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: trying to run $@ with an empty' \
+              '$$(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       $(am__cd) '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+       ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+       dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
+       dist-zip distcheck distclean distclean-generic distclean-hdr \
+       distclean-tags distcleancheck distdir distuninstallcheck dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+
+dist-hook:
+       @for dir in `find $(distdir) -type d -name CVS -print`; do \
+         rm -rf $$dir; done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..8d26507
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,4 @@
+2003/09/04 - Release of version 15.5.
+2002/08/15 - Release of version 15.4.
+2001/07/02 - Release of version 15.3. 
+2000/04/18 - Release of Version 13.0 into Open Source. Initial Linux port
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..70c8a6a
--- /dev/null
+++ b/README
@@ -0,0 +1,31 @@
+Cscope is a text screen based source browsing tool.  Although it is
+primarily designed to search C code (including lex and yacc files), it
+can also be used for C++ code.
+
+Using cscope, you can easily search for where symbols are used and
+defined.  Cscope is designed to answer questions like:
+
+        Where is this variable used?
+        What is the value of this preprocessor symbol?
+        Where is this function in the source files?
+        What functions call this function?
+        What functions are called by this function?
+        Where does the message "out of space" come from?
+        Where is this source file in the directory structure?
+        What files include this header file?
+
+It has been released by The Santa Cruz Operation, Inc as Open Source
+under the BSD license.  Please look at COPYING for a detailed
+description of the license.
+
+For instructions on how to build and install cscope, see the file,
+"INSTALL".
+
+One thing to be pointed out is that this is ancient Unix software
+predating much of today's security concerns.  While we do try to
+address safety issues as we learn about them, it must be said that
+this is in no way hardened or secure software.  It's designed to be
+used by developers, not administrators or anonymous users.
+
+Browse to http://cscope.sourceforge.net for more current information
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..ce6256d
--- /dev/null
+++ b/TODO
@@ -0,0 +1,24 @@
+Open
+
++ Display the current case mode (^C) onscreen
+
++ emacs like key bindings
+    ^S for searching (^Y)
+    Up/dwn Arrow support Next/Prev field. ??
+    Inline editing on Input fields ( ??^B/^F )
+    ^X^C to quit ( ^Q ??)
+    Pagdwn/PageUp/+/- 
+
++ Same capabilities as interactive in non interactive (one shot) mode
+
++ Provide some how-do-I-use-this-thing doc.
+
++ Replace invlib.[ch] by real database.  Failing that, at least sanitize it.
+
+Possible changes:
+
+? Change to full screen target display and use bottom line for command,
+    control or fn keys for operations (cf pine)
+
+? Apply added capability from osr5 codebase
+
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..cd69d7b
--- /dev/null
@@ -0,0 +1,230 @@
+# $Id: acinclude.m4,v 1.1 2009/04/10 13:39:22 broeker Exp $
+
+# Copyright (c) 2008 Holger Weiss <holger@jhweiss.de>.
+#
+# This code may freely be used, modified and/or redistributed for any purpose.
+# It would be nice if additions and fixes to this file (including trivial code
+# cleanups) would be sent back in order to let me include them in the version
+# available at <http://www.jhweiss.de/software/snprintf.html>.  However, this is
+# not a requirement for using or redistributing (possibly modified) versions of
+# this file, nor is leaving this notice intact mandatory.
+
+# HW_HEADER_STDARG_H
+# ------------------
+# Define HAVE_STDARG_H to 1 if <stdarg.h> is available.
+AC_DEFUN([HW_HEADER_STDARG_H],
+[
+  AC_PREREQ([2.60])dnl Older releases should work if AC_CHECK_HEADERS is used.
+  AC_CHECK_HEADERS_ONCE([stdarg.h])
+])# HW_HEADER_STDARG_H
+
+# HW_HEADER_VARARGS_H
+# -------------------
+# Define HAVE_VARARGS_H to 1 if <varargs.h> is available.
+AC_DEFUN([HW_HEADER_VARARGS_H],
+[
+  AC_PREREQ([2.60])dnl Older releases should work if AC_CHECK_HEADERS is used.
+  AC_CHECK_HEADERS_ONCE([varargs.h])
+])# HW_HEADER_VARARGS_H
+
+# HW_FUNC_VA_COPY
+# ---------------
+# Set $hw_cv_func_va_copy to "yes" or "no".  Define HAVE_VA_COPY to 1 if
+# $hw_cv_func_va_copy is set to "yes".  Note that it's "unspecified whether
+# va_copy and va_end are macros or identifiers declared with external linkage."
+# (C99: 7.15.1, 1)  Therefore, the presence of va_copy(3) cannot simply "be
+# tested with #ifdef", as suggested by the Autoconf manual (5.5.1).
+AC_DEFUN([HW_FUNC_VA_COPY],
+[
+  AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
+  AC_REQUIRE([HW_HEADER_VARARGS_H])dnl Our check evaluates HAVE_VARARGS_H.
+  AC_CACHE_CHECK([for va_copy],
+    [hw_cv_func_va_copy],
+    [AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM(
+        [[#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif]],
+        [[va_list ap, aq; va_copy(aq, ap);]])],
+      [hw_cv_func_va_copy=yes],
+      [hw_cv_func_va_copy=no],
+      [hw_cv_func_va_copy=no])])
+  AS_IF([test "$hw_cv_func_va_copy" = yes],
+    [AC_DEFINE([HAVE_VA_COPY], [1],
+      [Define to 1 if you have the `va_copy' function or macro.])])
+])# HW_FUNC_VA_COPY
+
+# HW_FUNC___VA_COPY
+# -----------------
+# Set $hw_cv_func___va_copy to "yes" or "no".  Define HAVE___VA_COPY to 1 if
+# $hw_cv_func___va_copy is set to "yes".
+AC_DEFUN([HW_FUNC___VA_COPY],
+[
+  AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
+  AC_REQUIRE([HW_HEADER_VARARGS_H])dnl Our check evaluates HAVE_VARARGS_H.
+  AC_CACHE_CHECK([for __va_copy],
+    [hw_cv_func___va_copy],
+    [AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM(
+        [[#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif]],
+        [[va_list ap, aq; __va_copy(aq, ap);]])],
+      [hw_cv_func___va_copy=yes],
+      [hw_cv_func___va_copy=no],
+      [hw_cv_func___va_copy=no])])
+  AS_IF([test "$hw_cv_func___va_copy" = yes],
+    [AC_DEFINE([HAVE___VA_COPY], [1],
+      [Define to 1 if you have the `__va_copy' function or macro.])])
+])# HW_FUNC___VA_COPY
+
+# HW_FUNC_VSNPRINTF
+# -----------------
+# Set $hw_cv_func_vsnprintf and $hw_cv_func_vsnprintf_c99 to "yes" or "no",
+# respectively.  Define HAVE_VSNPRINTF to 1 only if $hw_cv_func_vsnprintf_c99
+# is set to "yes".  Otherwise, define vsnprintf to rpl_vsnprintf and make sure
+# the replacement function will be built.
+AC_DEFUN([HW_FUNC_VSNPRINTF],
+[
+  AC_PREREQ([2.60])dnl 2.59 should work if some AC_TYPE_* macros are replaced.
+  AC_REQUIRE([HW_HEADER_STDARG_H])dnl Our check evaluates HAVE_STDARG_H.
+  AC_CHECK_FUNC([vsnprintf],
+    [hw_cv_func_vsnprintf=yes],
+    [hw_cv_func_vsnprintf=no])
+  AS_IF([test "$hw_cv_func_vsnprintf" = yes],
+    [AC_CACHE_CHECK([whether vsnprintf is C99 compliant],
+      [hw_cv_func_vsnprintf_c99],
+      [AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM(
+          [[#if HAVE_STDARG_H
+          #include <stdarg.h>
+          #endif
+          #include <stdio.h>
+          static int testprintf(char *buf, size_t size, const char *format, ...)
+          {
+            int result;
+            va_list ap;
+            va_start(ap, format);
+            result = vsnprintf(buf, size, format, ap);
+            va_end(ap);
+            return result;
+          }]],
+          [[char buf[43];
+          if (testprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
+              testprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
+              buf[0] != 'T' || buf[3] != '\0')
+            return 1;]])],
+        [hw_cv_func_vsnprintf_c99=yes],
+        [hw_cv_func_vsnprintf_c99=no],
+        [hw_cv_func_vsnprintf_c99=no])])],
+    [hw_cv_func_snprintf_c99=no])
+  AS_IF([test "$hw_cv_func_vsnprintf_c99" = yes],
+    [AC_DEFINE([HAVE_VSNPRINTF], [1],
+      [Define to 1 if you have a C99 compliant `vsnprintf' function.])],
+    [AC_DEFINE([vsnprintf], [rpl_vsnprintf],
+      [Define to rpl_vsnprintf if the replacement function should be used.])
+    AC_CHECK_HEADERS([inttypes.h locale.h stddef.h stdint.h])
+    AC_CHECK_MEMBERS([struct lconv.decimal_point, struct lconv.thousands_sep],
+      [], [], [#include <locale.h>])
+    AC_TYPE_LONG_DOUBLE
+    AC_TYPE_LONG_LONG_INT
+    AC_TYPE_UNSIGNED_LONG_LONG_INT
+    AC_TYPE_SIZE_T
+    AC_TYPE_INTMAX_T
+    AC_TYPE_UINTMAX_T
+    AC_TYPE_UINTPTR_T
+    AC_CHECK_TYPES([ptrdiff_t])
+    AC_CHECK_FUNCS([localeconv])
+    _HW_FUNC_XPRINTF_REPLACE])
+])# HW_FUNC_VSNPRINTF
+
+# HW_FUNC_SNPRINTF
+# ----------------
+# Set $hw_cv_func_snprintf and $hw_cv_func_snprintf_c99 to "yes" or "no",
+# respectively.  Define HAVE_SNPRINTF to 1 only if $hw_cv_func_snprintf_c99
+# is set to "yes".  Otherwise, define snprintf to rpl_snprintf and make sure
+# the replacement function will be built.
+AC_DEFUN([HW_FUNC_SNPRINTF],
+[
+  AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl Our snprintf(3) calls vsnprintf(3).
+  AC_CHECK_FUNC([snprintf],
+    [hw_cv_func_snprintf=yes],
+    [hw_cv_func_snprintf=no])
+  AS_IF([test "$hw_cv_func_snprintf" = yes],
+    [AC_CACHE_CHECK([whether snprintf is C99 compliant],
+      [hw_cv_func_snprintf_c99],
+      [AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([[#include <stdio.h>]],
+          [[char buf[43];
+          if (snprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
+              snprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
+              buf[0] != 'T' || buf[3] != '\0')
+            return 1;]])],
+        [hw_cv_func_snprintf_c99=yes],
+        [hw_cv_func_snprintf_c99=no],
+        [hw_cv_func_snprintf_c99=no])])],
+    [hw_cv_func_snprintf_c99=no])
+  AS_IF([test "$hw_cv_func_snprintf_c99" = yes],
+    [AC_DEFINE([HAVE_SNPRINTF], [1],
+      [Define to 1 if you have a C99 compliant `snprintf' function.])],
+    [AC_DEFINE([snprintf], [rpl_snprintf],
+      [Define to rpl_snprintf if the replacement function should be used.])
+    _HW_FUNC_XPRINTF_REPLACE])
+])# HW_FUNC_SNPRINTF
+
+# HW_FUNC_VASPRINTF
+# -----------------
+# Set $hw_cv_func_vasprintf to "yes" or "no".  Define HAVE_VASPRINTF to 1 if
+# $hw_cv_func_vasprintf is set to "yes".  Otherwise, define vasprintf to
+# rpl_vasprintf and make sure the replacement function will be built.
+AC_DEFUN([HW_FUNC_VASPRINTF],
+[
+  AC_REQUIRE([HW_FUNC_VSNPRINTF])dnl Our vasprintf(3) calls vsnprintf(3).
+  AC_CHECK_FUNCS([vasprintf],
+    [hw_cv_func_vasprintf=yes],
+    [hw_cv_func_vasprintf=no])
+  AS_IF([test "$hw_cv_func_vasprintf" = no],
+    [AC_DEFINE([vasprintf], [rpl_vasprintf],
+      [Define to rpl_vasprintf if the replacement function should be used.])
+    AC_CHECK_HEADERS([stdlib.h])
+    HW_FUNC_VA_COPY
+    AS_IF([test "$hw_cv_func_va_copy" = no],
+      [HW_FUNC___VA_COPY])
+    _HW_FUNC_XPRINTF_REPLACE])
+])# HW_FUNC_VASPRINTF
+
+# HW_FUNC_ASPRINTF
+# ----------------
+# Set $hw_cv_func_asprintf to "yes" or "no".  Define HAVE_ASPRINTF to 1 if
+# $hw_cv_func_asprintf is set to "yes".  Otherwise, define asprintf to
+# rpl_asprintf and make sure the replacement function will be built.
+AC_DEFUN([HW_FUNC_ASPRINTF],
+[
+  AC_REQUIRE([HW_FUNC_VASPRINTF])dnl Our asprintf(3) calls vasprintf(3).
+  AC_CHECK_FUNCS([asprintf],
+    [hw_cv_func_asprintf=yes],
+    [hw_cv_func_asprintf=no])
+  AS_IF([test "$hw_cv_func_asprintf" = no],
+    [AC_DEFINE([asprintf], [rpl_asprintf],
+      [Define to rpl_asprintf if the replacement function should be used.])
+    _HW_FUNC_XPRINTF_REPLACE])
+])# HW_FUNC_ASPRINTF
+
+# _HW_FUNC_XPRINTF_REPLACE
+# ------------------------
+# Arrange for building snprintf.c.  Must be called if one or more of the
+# functions provided by snprintf.c are needed.
+AC_DEFUN([_HW_FUNC_XPRINTF_REPLACE],
+[
+  AS_IF([test "x$_hw_cv_func_xprintf_replace_done" != xyes],
+    [AC_C_CONST
+    HW_HEADER_STDARG_H
+    AC_LIBOBJ([snprintf])
+    _hw_cv_func_xprintf_replace_done=yes])
+])# _HW_FUNC_XPRINTF_REPLACE
+
+dnl vim: set joinspaces textwidth=80:
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..c4bc224
--- /dev/null
@@ -0,0 +1,1135 @@
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# longlong.m4 serial 14
+dnl Copyright (C) 1999-2007, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+        dnl If cross compiling, assume the bug isn't important, since
+        dnl nobody cross compiles for this platform as far as we know.
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[@%:@include <limits.h>
+               @%:@ifndef LLONG_MAX
+               @%:@ define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               @%:@ define LLONG_MAX (HALF - 1 + HALF)
+               @%:@endif]],
+             [[long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;]])],
+          [ac_cv_type_long_long_int=yes],
+          [ac_cv_type_long_long_int=no],
+          [ac_cv_type_long_long_int=yes])],
+       [ac_cv_type_long_long_int=no])])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type `long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [ac_cv_type_unsigned_long_long_int=yes],
+       [ac_cv_type_unsigned_long_long_int=no])])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type `unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.3], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.3])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES(CC)],
+                 [define([AC_PROG_CC],
+                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES(CXX)],
+                 [define([AC_PROG_CXX],
+                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES(OBJC)],
+                 [define([AC_PROG_OBJC],
+                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/compile b/compile
new file mode 100755 (executable)
index 0000000..b1f4749
--- /dev/null
+++ b/compile
@@ -0,0 +1,310 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-01-04.17; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
+# Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""       $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv/,$2, in
+       *,$file_conv,*)
+         ;;
+       mingw/*)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin/*)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine/*)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+       -o)
+         # configure might choose to run compile as 'compile cc -o foo foo.c'.
+         eat=1
+         case $2 in
+           *.o | *.[oO][bB][jJ])
+             func_file_conv "$2"
+             set x "$@" -Fo"$file"
+             shift
+             ;;
+           *)
+             func_file_conv "$2"
+             set x "$@" -Fe"$file"
+             shift
+             ;;
+         esac
+         ;;
+       -I*)
+         func_file_conv "${1#-I}" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -l*)
+         lib=${1#-l}
+         found=no
+         save_IFS=$IFS
+         IFS=';'
+         for dir in $lib_path $LIB
+         do
+           IFS=$save_IFS
+           if $shared && test -f "$dir/$lib.dll.lib"; then
+             found=yes
+             set x "$@" "$dir/$lib.dll.lib"
+             break
+           fi
+           if test -f "$dir/$lib.lib"; then
+             found=yes
+             set x "$@" "$dir/$lib.lib"
+             break
+           fi
+         done
+         IFS=$save_IFS
+
+         test "$found" != yes && set x "$@" "$lib.lib"
+         shift
+         ;;
+       -L*)
+         func_file_conv "${1#-L}"
+         if test -z "$lib_path"; then
+           lib_path=$file
+         else
+           lib_path="$lib_path;$file"
+         fi
+         linker_opts="$linker_opts -LIBPATH:$file"
+         ;;
+       -static)
+         shared=false
+         ;;
+       -Wl,*)
+         arg=${1#-Wl,}
+         save_ifs="$IFS"; IFS=','
+         for flag in $arg; do
+           IFS="$save_ifs"
+           linker_opts="$linker_opts $flag"
+         done
+         IFS="$save_ifs"
+         ;;
+       -Xlinker)
+         eat=1
+         linker_opts="$linker_opts $2"
+         ;;
+       -*)
+         set x "$@" "$1"
+         shift
+         ;;
+       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+         func_file_conv "$1"
+         set x "$@" -Tp"$file"
+         shift
+         ;;
+       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+         func_file_conv "$1" mingw
+         set x "$@" "$file"
+         shift
+         ;;
+       *)
+         set x "$@" "$1"
+         shift
+         ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as 'compile cc -o foo foo.c'.
+       # So we strip '-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..49ba16f
--- /dev/null
@@ -0,0 +1,1522 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-01-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       exitcode=$?
+       trap '' 0
+       exit $exitcode ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+       echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+       echo m68k-milan-mint${UNAME_RELEASE}
+       exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+       echo m68k-hades-mint${UNAME_RELEASE}
+       exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+       echo m68k-unknown-mint${UNAME_RELEASE}
+       exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+       # DG/UX returns AViiON for all architectures
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[4567])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case "${sc_cpu_version}" in
+                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     532)                      # CPU_PA_RISC2_0
+                       case "${sc_kernel_bits}" in
+                         32) HP_ARCH="hppa2.0n" ;;
+                         64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                       esac ;;
+                   esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^            //' << EOF >$dummy.c
+
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
+
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
+
+                   switch (cpu)
+                       {
+                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+                       case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+                           switch (bits)
+                               {
+                               case 64: puts ("hppa2.0w"); break;
+                               case 32: puts ("hppa2.0n"); break;
+                               default: puts ("hppa2.0"); break;
+                               } break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+                           puts ("hppa2.0"); break;
+               #endif
+                       default: puts ("hppa1.0"); break;
+                       }
+                   exit (0);
+               }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+       exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+       exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+       exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+       exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    5000:UNIX_System_V:4.*:*)
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case ${UNAME_PROCESSOR} in
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+       esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           else
+               echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+           fi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo ${UNAME_MACHINE}-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo ${UNAME_MACHINE}-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+       # Unixware is an offshoot of SVR4, but it has its own version
+       # number series starting with 2...
+       # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+       # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+       # uname -m prints for DJGPP always 'pc', but it prints nothing about
+       # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+       exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+       echo i586-unisys-sysv4
+       exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+       exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+       echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+       "4"
+#else
+       ""
+#endif
+       ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..2219be7
--- /dev/null
@@ -0,0 +1,267 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* We're using a BSD-flavoured Unix */
+#undef BSD
+
+/* Found some version of curses that we're going to use */
+#undef HAS_CURSES
+
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fixkeypad' function. */
+#undef HAVE_FIXKEYPAD
+
+/* Define to 1 if you have the <floss.h> header file. */
+#undef HAVE_FLOSS_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getopt_long' function. */
+#undef HAVE_GETOPT_LONG
+
+/* Define to 1 if the system has the type `intmax_t'. */
+#undef HAVE_INTMAX_T
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the `regex' library (-lregex). */
+#undef HAVE_LIBREGEX
+
+/* Define to 1 if you have the `localeconv' function. */
+#undef HAVE_LOCALECONV
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if the system has the type `long double'. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define to 1 if the system has the type `long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if the system has the type `ptrdiff_t'. */
+#undef HAVE_PTRDIFF_T
+
+/* Define to 1 if you have the `regcmp' function. */
+#undef HAVE_REGCMP
+
+/* Define to 1 if you have the `regcomp' function. */
+#undef HAVE_REGCOMP
+
+/* Define to 1 if you have the `setmode' function. */
+#undef HAVE_SETMODE
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define if we have sigsetjmp(). */
+#undef HAVE_SIGSETJMP
+
+/* Define to 1 if you have a C99 compliant `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if `decimal_point' is a member of `struct lconv'. */
+#undef HAVE_STRUCT_LCONV_DECIMAL_POINT
+
+/* Define to 1 if `thousands_sep' is a member of `struct lconv'. */
+#undef HAVE_STRUCT_LCONV_THOUSANDS_SEP
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/termios.h> header file. */
+#undef HAVE_SYS_TERMIOS_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/window.h> header file. */
+#undef HAVE_SYS_WINDOW_H
+
+/* Define to 1 if the system has the type `uintmax_t'. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the <varargs.h> header file. */
+#undef HAVE_VARARGS_H
+
+/* Define to 1 if you have the `vasprintf' function. */
+#undef HAVE_VASPRINTF
+
+/* Define to 1 if you have the `va_copy' function or macro. */
+#undef HAVE_VA_COPY
+
+/* Define to 1 if you have a C99 compliant `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `_setmode' function. */
+#undef HAVE__SETMODE
+
+/* Define to 1 if you have the `__va_copy' function or macro. */
+#undef HAVE___VA_COPY
+
+/* We're using some variant of Linux */
+#undef Linux
+
+/* Set to reflect version of ncurses: 0 = version 1.* 1 = version 1.9.9g 2 =
+   version 4.0/4.1 */
+#undef NCURSES_970530
+
+/* If your Curses does not have color define this one */
+#undef NO_COLOR_CURSES
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define if you want to turn on SCO-specific code */
+#undef SCO_FLAVOR
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Use Ncurses? */
+#undef USE_NCURSES
+
+/* Use SunOS SysV curses? */
+#undef USE_SUNOS_CURSES
+
+/* Use SystemV curses? */
+#undef USE_SYSV_CURSES
+
+/* Define this if the scanner is run through lex, not flex */
+#undef USING_LEX
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+   `char[]'. */
+#undef YYTEXT_POINTER
+
+/* Define to rpl_asprintf if the replacement function should be used. */
+#undef asprintf
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
+   not define. */
+#undef intmax_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to rpl_snprintf if the replacement function should be used. */
+#undef snprintf
+
+/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
+   do not define. */
+#undef uintmax_t
+
+/* Define to the type of an unsigned integer type wide enough to hold a
+   pointer, if such a type exists, and if the system does not define it. */
+#undef uintptr_t
+
+/* Define to rpl_vasprintf if the replacement function should be used. */
+#undef vasprintf
+
+/* Define to rpl_vsnprintf if the replacement function should be used. */
+#undef vsnprintf
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..d6b6b3c
--- /dev/null
@@ -0,0 +1,1766 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-01-01'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray | -microblaze)
+               os=
+               basic_machine=$1
+               ;;
+       -bluegene*)
+               os=-cnk
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | le32 | le64 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nds32 | nds32le | nds32be \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | open8 \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
+       | pyramid \
+       | rl78 | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu \
+       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+       | we32k \
+       | x86 | xc16x | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       strongarm | thumb | xscale)
+               basic_machine=arm-unknown
+               ;;
+
+       xscaleeb)
+               basic_machine=armeb-unknown
+               ;;
+
+       xscaleel)
+               basic_machine=armel-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | be32-* | be64-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | hexagon-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | le32-* | le64-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+       | pyramid-* \
+       | rl78-* | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+       | tahoe-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile*-* \
+       | tron-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+       | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c54x-*)
+               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c55x-*)
+               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c6x-*)
+               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16 | cr16-*)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       msys)
+               basic_machine=i386-pc
+               os=-msys
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       nacl)
+               basic_machine=le32-unknown
+               os=-nacl
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       neo-tandem)
+               basic_machine=neo-tandem
+               ;;
+       nse-tandem)
+               basic_machine=nse-tandem
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc | ppcbe)    basic_machine=powerpc-unknown
+               ;;
+       ppc-* | ppcbe-*)
+               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       strongarm-* | thumb-*)
+               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tile*)
+               basic_machine=$basic_machine-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       xscale-* | xscalee[bl]-*)
+               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+       # First match some system type aliases
+       # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -auroraux)
+               os=-auroraux
+               ;;
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+       -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -nacl*)
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       score-*)
+               os=-elf
+               ;;
+       spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+       c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..0d780db
--- /dev/null
+++ b/configure
@@ -0,0 +1,8841 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+        /*)
+          for as_base in sh bash ksh sh5; do
+            # Try only shells that exist, to save several forks.
+            as_shell=$as_dir/$as_base
+            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+          done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+       # neutralization value for shells without unset; and this also
+       # works around shells that cannot unset nonexistent variables.
+       # Preserve -v and -x to the replacement shell.
+       BASH_ENV=/dev/null
+       ENV=/dev/null
+       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+       export CONFIG_SHELL
+       case $- in # ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+PACKAGE_URL=
+
+ac_unique_file="src/crossref.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_list=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+GNOME_LINUX_FALSE
+GNOME_LINUX_TRUE
+HAS_GNOME_FALSE
+HAS_GNOME_TRUE
+USING_GNOME2_FALSE
+USING_GNOME2_TRUE
+gnome2
+gnome1
+HAS_CURSES_FALSE
+HAS_CURSES_TRUE
+EGREP
+GREP
+CPP
+CURSES_INCLUDEDIR
+CURSES_LIBS
+YFLAGS
+YACC
+USING_LEX_FALSE
+USING_LEX_TRUE
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+with_sco
+with_sunos_curses
+with_osf1_curses
+with_vcurses
+with_ncurses
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+YACC
+YFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+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 this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-sco              Use this to turn on SCO-specific code
+  --with-sunos-curses     Used to force SunOS 4.x curses
+  --with-osf1-curses      Used to force OSF/1 curses
+  --with-vcurses=incdir Used to force SysV curses
+  --with-ncurses=dir  Compile with ncurses/locate base dir
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to $YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+configure
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+        return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+           return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+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 $as_me, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+as_fn_append ac_header_list " stdarg.h"
+as_fn_append ac_header_list " varargs.h"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=cscope
+ VERSION=15.8a
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h:config.h.in"
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+if test "x$CC" != xcc; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+        test -f conftest2.$ac_objext && { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
+      then
+       # cc works too.
+       :
+      else
+       # cc exists but doesn't like -o.
+       eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+
+for ac_prog in flex lex
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LEX"; then
+  ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LEX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+  cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { yyless (input () != 0); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$LEX conftest.l") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+if test -f lex.yy.c; then
+  ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+  ac_cv_prog_lex_root=lexyy
+else
+  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+
+$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi
+ if test "x$LEX" = "xlex"; then
+  USING_LEX_TRUE=
+  USING_LEX_FALSE='#'
+else
+  USING_LEX_TRUE='#'
+  USING_LEX_FALSE=
+fi
+
+if test "x$LEX" = "xlex" ; then
+$as_echo "#define USING_LEX 1" >>confdefs.h
+
+fi
+for ac_prog in 'bison -y' byacc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_YACC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+       search_ncurses=true
+       screen_manager=""
+       has_curses=false
+
+       CFLAGS=${CFLAGS--O}
+
+
+
+
+
+# Check whether --with-sco was given.
+if test "${with_sco+set}" = set; then :
+  withval=$with_sco;
+         if test x$withval = xyes; then
+
+$as_echo "#define SCO_FLAVOR 1" >>confdefs.h
+
+               CFLAGS="$CFLAGS -D_SVID3"
+         fi
+
+fi
+
+
+
+# Check whether --with-sunos-curses was given.
+if test "${with_sunos_curses+set}" = set; then :
+  withval=$with_sunos_curses;
+         if test x$withval = xyes; then
+
+       search_ncurses=false
+       screen_manager="SunOS 4.x /usr/5include curses"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SunOS 4.x /usr/5include curses" >&5
+$as_echo "Using SunOS 4.x /usr/5include curses" >&6; }
+
+$as_echo "#define USE_SUNOS_CURSES 1" >>confdefs.h
+
+       $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+
+$as_echo "#define NO_COLOR_CURSES 1" >>confdefs.h
+
+
+$as_echo "#define USE_SYSV_CURSES 1" >>confdefs.h
+
+       CURSES_INCLUDEDIR="-I/usr/5include"
+       CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Please note that some screen refreshs may fail" >&5
+$as_echo "Please note that some screen refreshs may fail" >&6; }
+
+         fi
+
+fi
+
+
+
+# Check whether --with-osf1-curses was given.
+if test "${with_osf1_curses+set}" = set; then :
+  withval=$with_osf1_curses;
+         if test x$withval = xyes; then
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using OSF1 curses" >&5
+$as_echo "Using OSF1 curses" >&6; }
+       search_ncurses=false
+       screen_manager="OSF1 curses"
+       $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+       $as_echo "#define NO_COLOR_CURSES 1" >>confdefs.h
+
+       $as_echo "#define USE_SYSV_CURSES 1" >>confdefs.h
+
+       CURSES_LIBS="-lcurses"
+
+         fi
+
+fi
+
+
+
+# Check whether --with-vcurses was given.
+if test "${with_vcurses+set}" = set; then :
+  withval=$with_vcurses; if test x$withval != xyes; then
+               CURSES_INCLUDEDIR="-I$withval"
+         fi
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SysV curses" >&5
+$as_echo "Using SysV curses" >&6; }
+       $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+       $as_echo "#define USE_SYSV_CURSES 1" >>confdefs.h
+
+       search_ncurses=false
+       screen_manager="SysV/curses"
+       CURSES_LIBS="-lcurses"
+
+
+fi
+
+
+
+# Check whether --with-ncurses was given.
+if test "${with_ncurses+set}" = set; then :
+  withval=$with_ncurses; if test x$withval = xno ; then
+               search_ncurses=false
+         elif test x$withval != xyes ; then
+               CURSES_LIBS="$LIBS -L$withval/lib -lncurses"
+               CURSES_INCLUDEDIR="-I$withval/include"
+               search_ncurses=false
+               screen_manager="ncurses"
+
+$as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+
+$as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+               has_curses=true
+         fi
+
+fi
+
+
+       if $search_ncurses
+       then
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking \"location of ncurses.h file\"..." >&5
+$as_echo "$as_me: checking \"location of ncurses.h file\"..." >&6;}
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/include/ncurses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/include/ncurses.h" >&5
+$as_echo "Found ncurses on /usr/include/ncurses.h" >&6; }
+           CURSES_LIBS="-lncurses"
+           CURSES_INCLUDEDIR=""
+           search_ncurses=false
+           screen_manager="ncurses on /usr/include"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/include/ncurses/ncurses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/include/ncurses/ncurses.h" >&5
+$as_echo "Found ncurses on /usr/include/ncurses/ncurses.h" >&6; }
+           CURSES_LIBS="-lncurses"
+           CURSES_INCLUDEDIR="-I/usr/include/ncurses"
+           search_ncurses=false
+           screen_manager="ncurses on /usr/include/ncurses"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/local/include/ncurses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/local/include/ncurses.h" >&5
+$as_echo "Found ncurses on /usr/local/include/ncurses.h" >&6; }
+           CURSES_LIBS="-L/usr/local/lib -lncurses"
+           CURSES_INCLUDEDIR="-I/usr/local/include"
+           search_ncurses=false
+           screen_manager="ncurses on /usr/local"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/local/include/ncurses/ncurses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/local/include/ncurses/ncurses.h" >&5
+$as_echo "Found ncurses on /usr/local/include/ncurses/ncurses.h" >&6; }
+           CURSES_LIBS="-L/usr/local/lib -L/usr/local/lib/ncurses -lncurses"
+           CURSES_INCLUDEDIR="-I/usr/local/include/ncurses"
+           search_ncurses=false
+           screen_manager="ncurses on /usr/local/include/ncurses"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/local/include/ncurses/curses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/local/include/ncurses/curses.h" >&5
+$as_echo "Found ncurses on /usr/local/include/ncurses/curses.h" >&6; }
+           CURSES_LIBS="-L/usr/local/lib -lncurses"
+           CURSES_INCLUDEDIR="-I/usr/local/include/ncurses -DRENAMED_NCURSES"
+           search_ncurses=false
+           screen_manager="renamed ncurses on /usr/local/.../ncurses"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+
+    if $search_ncurses
+    then
+        if test -f /usr/include/ncurses/curses.h
+       then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Found ncurses on /usr/include/ncurses/curses.h" >&5
+$as_echo "Found ncurses on /usr/include/ncurses/curses.h" >&6; }
+           CURSES_LIBS="-lncurses"
+           CURSES_INCLUDEDIR="-I/usr/include/ncurses -DRENAMED_NCURSES"
+           search_ncurses=false
+           screen_manager="renamed ncurses on /usr/include/ncurses"
+            $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+            has_curses=true
+           $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+       fi
+    fi
+
+
+                if $search_ncurses
+    then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <curses.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "init_color" >/dev/null 2>&1; then :
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SysV curses" >&5
+$as_echo "Using SysV curses" >&6; }
+       $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+       $as_echo "#define USE_SYSV_CURSES 1" >>confdefs.h
+
+       search_ncurses=false
+       screen_manager="SysV/curses"
+       CURSES_LIBS="-lcurses"
+
+fi
+rm -f conftest*
+
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <curses.h>
+#ifdef __NCURSES_H
+#undef USE_NCURSES
+USE_NCURSES
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "USE_NCURSES" >/dev/null 2>&1; then :
+
+       CURSES_INCLUDEDIR="$CURSES_INCLUDEDIR -DRENAMED_NCURSES"
+        $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+        $as_echo "#define USE_NCURSES 1" >>confdefs.h
+
+        search_ncurses=false
+        screen_manager="ncurses installed as curses"
+
+fi
+rm -f conftest*
+
+    fi
+
+                        if $search_ncurses
+    then
+       if test -f /usr/5include/curses.h
+       then
+
+       search_ncurses=false
+       screen_manager="SunOS 4.x /usr/5include curses"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SunOS 4.x /usr/5include curses" >&5
+$as_echo "Using SunOS 4.x /usr/5include curses" >&6; }
+
+$as_echo "#define USE_SUNOS_CURSES 1" >>confdefs.h
+
+       $as_echo "#define HAS_CURSES 1" >>confdefs.h
+
+       has_curses=true
+
+$as_echo "#define NO_COLOR_CURSES 1" >>confdefs.h
+
+
+$as_echo "#define USE_SYSV_CURSES 1" >>confdefs.h
+
+       CURSES_INCLUDEDIR="-I/usr/5include"
+       CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Please note that some screen refreshs may fail" >&5
+$as_echo "Please note that some screen refreshs may fail" >&6; }
+
+        fi
+    else
+        # check for ncurses version, to properly ifdef mouse-fix
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses version" >&5
+$as_echo_n "checking for ncurses version... " >&6; }
+       ncurses_version=unknown
+cat > conftest.$ac_ext <<EOF
+#line 4801 "configure"
+#include "confdefs.h"
+#ifdef RENAMED_NCURSES
+#include <curses.h>
+#else
+#include <ncurses.h>
+#endif
+#undef VERSION
+VERSION:NCURSES_VERSION
+EOF
+        if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "VERSION:" >conftest.out 2>&1; then
+            ncurses_version=`cat conftest.out|sed -e 's/^[^"]*"//' -e 's/".*//'`
+       fi
+       rm -rf conftest*
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ncurses_version" >&5
+$as_echo "$ncurses_version" >&6; }
+       case "$ncurses_version" in
+       4.[01])
+
+$as_echo "#define NCURSES_970530 2" >>confdefs.h
+
+            ;;
+       1.9.9g)
+            $as_echo "#define NCURSES_970530 1" >>confdefs.h
+
+            ;;
+       1*)
+            $as_echo "#define NCURSES_970530 0" >>confdefs.h
+
+            ;;
+       esac
+    fi
+
+       fi
+
+
+
+ if test "$has_curses" = true; then
+  HAS_CURSES_TRUE=
+  HAS_CURSES_FALSE='#'
+else
+  HAS_CURSES_TRUE='#'
+  HAS_CURSES_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default"
+if test "x$ac_cv_header_regex_h" = xyes; then :
+
+else
+
+  as_fn_error $? "necessary header <regex.h> not found" "$LINENO" 5
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lregex" >&5
+$as_echo_n "checking for regcomp in -lregex... " >&6; }
+if ${ac_cv_lib_regex_regcomp+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lregex  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char regcomp ();
+int
+main ()
+{
+return regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_regex_regcomp=yes
+else
+  ac_cv_lib_regex_regcomp=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_regex_regcomp" >&5
+$as_echo "$ac_cv_lib_regex_regcomp" >&6; }
+if test "x$ac_cv_lib_regex_regcomp" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBREGEX 1
+_ACEOF
+
+  LIBS="-lregex $LIBS"
+
+fi
+
+
+
+
+
+
+       has_gnome=false
+       # Extract the first word of "gnome-config", so it can be a program name with args.
+set dummy gnome-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_gnome1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$gnome1"; then
+  ac_cv_prog_gnome1="$gnome1" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_gnome1="true"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+gnome1=$ac_cv_prog_gnome1
+if test -n "$gnome1"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome1" >&5
+$as_echo "$gnome1" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+       # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_gnome2+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$gnome2"; then
+  ac_cv_prog_gnome2="$gnome2" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_gnome2="true"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+gnome2=$ac_cv_prog_gnome2
+if test -n "$gnome2"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome2" >&5
+$as_echo "$gnome2" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+       if test x$gnome1 = xtrue; then
+         has_gnome=true
+       fi
+
+       if test x$gnome2 = xtrue; then
+         has_gnome=true
+       fi
+
+        if pkg-config --exists gtk+-2.0; then
+  USING_GNOME2_TRUE=
+  USING_GNOME2_FALSE='#'
+else
+  USING_GNOME2_TRUE='#'
+  USING_GNOME2_FALSE=
+fi
+
+        if test "$has_gnome" = true; then
+  HAS_GNOME_TRUE=
+  HAS_GNOME_FALSE='#'
+else
+  HAS_GNOME_TRUE='#'
+  HAS_GNOME_FALSE=
+fi
+
+        if test "$host_os" = Linux; then
+  GNOME_LINUX_TRUE=
+  GNOME_LINUX_FALSE='#'
+else
+  GNOME_LINUX_TRUE='#'
+  GNOME_LINUX_FALSE=
+fi
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if eval \${$as_ac_Header+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_ac_Header=yes"
+else
+  eval "$as_ac_Header=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_ac_Header
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_opendir+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_opendir+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+for ac_header in fcntl.h sys/window.h sys/termios.h unistd.h signal.h floss.h io.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define mode_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif
+"
+if test "x$ac_cv_type_sighandler_t" = xyes; then :
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
+$as_echo_n "checking for sigsetjmp... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <setjmp.h>
+int
+main ()
+{
+jmp_buf env; sigsetjmp(env, 1);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if ${ac_cv_type_signal+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_signal=int
+else
+  ac_cv_type_signal=void
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+for ac_func in strchr memcpy memset setmode _setmode
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in getcwd regcmp regcomp strerror lstat
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in fixkeypad getopt_long
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+      ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+  hw_cv_func_vsnprintf=yes
+else
+  hw_cv_func_vsnprintf=no
+fi
+
+  if test "$hw_cv_func_vsnprintf" = yes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf is C99 compliant" >&5
+$as_echo_n "checking whether vsnprintf is C99 compliant... " >&6; }
+if ${hw_cv_func_vsnprintf_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func_vsnprintf_c99=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+          #include <stdarg.h>
+          #endif
+          #include <stdio.h>
+          static int testprintf(char *buf, size_t size, const char *format, ...)
+          {
+            int result;
+            va_list ap;
+            va_start(ap, format);
+            result = vsnprintf(buf, size, format, ap);
+            va_end(ap);
+            return result;
+          }
+int
+main ()
+{
+char buf[43];
+          if (testprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
+              testprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
+              buf[0] != 'T' || buf[3] != '\0')
+            return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func_vsnprintf_c99=yes
+else
+  hw_cv_func_vsnprintf_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func_vsnprintf_c99" >&5
+$as_echo "$hw_cv_func_vsnprintf_c99" >&6; }
+else
+  hw_cv_func_snprintf_c99=no
+fi
+  if test "$hw_cv_func_vsnprintf_c99" = yes; then :
+
+$as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h
+
+else
+
+$as_echo "#define vsnprintf rpl_vsnprintf" >>confdefs.h
+
+    for ac_header in inttypes.h locale.h stddef.h stdint.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h>
+"
+if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct lconv" "thousands_sep" "ac_cv_member_struct_lconv_thousands_sep" "#include <locale.h>
+"
+if test "x$ac_cv_member_struct_lconv_thousands_sep" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_LCONV_THOUSANDS_SEP 1
+_ACEOF
+
+
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
+$as_echo_n "checking for long double... " >&6; }
+if ${ac_cv_type_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$GCC" = yes; then
+       ac_cv_type_long_double=yes
+     else
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* The Stardent Vistra knows sizeof (long double), but does
+                not support it.  */
+             long double foo = 0.0L;
+int
+main ()
+{
+static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+             sizeof (double) <= sizeof (long double))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_long_double=yes
+else
+  ac_cv_type_long_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5
+$as_echo "$ac_cv_type_long_double" >&6; }
+  if test $ac_cv_type_long_double = yes; then
+
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if ${ac_cv_type_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+                          if test "$cross_compiling" = yes; then :
+  ac_cv_type_long_long_int=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+               #ifndef LLONG_MAX
+               # define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               # define LLONG_MAX (HALF - 1 + HALF)
+               #endif
+int
+main ()
+{
+long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_type_long_long_int=yes
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_type_unsigned_long_long_int=yes
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+    ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes; then :
+
+$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+
+else
+  test $ac_cv_type_long_long_int = yes \
+       && ac_type='long long int' \
+       || ac_type='long int'
+
+cat >>confdefs.h <<_ACEOF
+#define intmax_t $ac_type
+_ACEOF
+
+fi
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintmax_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
+
+else
+  test $ac_cv_type_unsigned_long_long_int = yes \
+       && ac_type='unsigned long long int' \
+       || ac_type='unsigned long int'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
+
+else
+  for ac_type in 'unsigned int' 'unsigned long int' \
+       'unsigned long long int'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define uintptr_t $ac_type
+_ACEOF
+
+         ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       test -z "$ac_type" && break
+     done
+fi
+
+
+    ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PTRDIFF_T 1
+_ACEOF
+
+
+fi
+
+    for ac_func in localeconv
+do :
+  ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
+if test "x$ac_cv_func_localeconv" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LOCALECONV 1
+_ACEOF
+
+fi
+done
+
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+    ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+  hw_cv_func_snprintf=yes
+else
+  hw_cv_func_snprintf=no
+fi
+
+  if test "$hw_cv_func_snprintf" = yes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf is C99 compliant" >&5
+$as_echo_n "checking whether snprintf is C99 compliant... " >&6; }
+if ${hw_cv_func_snprintf_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func_snprintf_c99=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+char buf[43];
+          if (snprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
+              snprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
+              buf[0] != 'T' || buf[3] != '\0')
+            return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func_snprintf_c99=yes
+else
+  hw_cv_func_snprintf_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func_snprintf_c99" >&5
+$as_echo "$hw_cv_func_snprintf_c99" >&6; }
+else
+  hw_cv_func_snprintf_c99=no
+fi
+  if test "$hw_cv_func_snprintf_c99" = yes; then :
+
+$as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
+
+else
+
+$as_echo "#define snprintf rpl_snprintf" >>confdefs.h
+
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+      ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+  hw_cv_func_vsnprintf=yes
+else
+  hw_cv_func_vsnprintf=no
+fi
+
+  if test "$hw_cv_func_vsnprintf" = yes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf is C99 compliant" >&5
+$as_echo_n "checking whether vsnprintf is C99 compliant... " >&6; }
+if ${hw_cv_func_vsnprintf_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func_vsnprintf_c99=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+          #include <stdarg.h>
+          #endif
+          #include <stdio.h>
+          static int testprintf(char *buf, size_t size, const char *format, ...)
+          {
+            int result;
+            va_list ap;
+            va_start(ap, format);
+            result = vsnprintf(buf, size, format, ap);
+            va_end(ap);
+            return result;
+          }
+int
+main ()
+{
+char buf[43];
+          if (testprintf(buf, 4, "The answer is %27.2g.", 42.0) != 42 ||
+              testprintf(buf, 0, "No, it's %32zu.", (size_t)42) != 42 ||
+              buf[0] != 'T' || buf[3] != '\0')
+            return 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func_vsnprintf_c99=yes
+else
+  hw_cv_func_vsnprintf_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func_vsnprintf_c99" >&5
+$as_echo "$hw_cv_func_vsnprintf_c99" >&6; }
+else
+  hw_cv_func_snprintf_c99=no
+fi
+  if test "$hw_cv_func_vsnprintf_c99" = yes; then :
+
+$as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h
+
+else
+
+$as_echo "#define vsnprintf rpl_vsnprintf" >>confdefs.h
+
+    for ac_header in inttypes.h locale.h stddef.h stdint.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h>
+"
+if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct lconv" "thousands_sep" "ac_cv_member_struct_lconv_thousands_sep" "#include <locale.h>
+"
+if test "x$ac_cv_member_struct_lconv_thousands_sep" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_LCONV_THOUSANDS_SEP 1
+_ACEOF
+
+
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
+$as_echo_n "checking for long double... " >&6; }
+if ${ac_cv_type_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$GCC" = yes; then
+       ac_cv_type_long_double=yes
+     else
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* The Stardent Vistra knows sizeof (long double), but does
+                not support it.  */
+             long double foo = 0.0L;
+int
+main ()
+{
+static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+             sizeof (double) <= sizeof (long double))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_long_double=yes
+else
+  ac_cv_type_long_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5
+$as_echo "$ac_cv_type_long_double" >&6; }
+  if test $ac_cv_type_long_double = yes; then
+
+$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if ${ac_cv_type_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+                          if test "$cross_compiling" = yes; then :
+  ac_cv_type_long_long_int=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+               #ifndef LLONG_MAX
+               # define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               # define LLONG_MAX (HALF - 1 + HALF)
+               #endif
+int
+main ()
+{
+long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_type_long_long_int=yes
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_type_unsigned_long_long_int=yes
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+    ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes; then :
+
+$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+
+else
+  test $ac_cv_type_long_long_int = yes \
+       && ac_type='long long int' \
+       || ac_type='long int'
+
+cat >>confdefs.h <<_ACEOF
+#define intmax_t $ac_type
+_ACEOF
+
+fi
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintmax_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
+
+else
+  test $ac_cv_type_unsigned_long_long_int = yes \
+       && ac_type='unsigned long long int' \
+       || ac_type='unsigned long int'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+fi
+
+
+
+  ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
+
+else
+  for ac_type in 'unsigned int' 'unsigned long int' \
+       'unsigned long long int'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define uintptr_t $ac_type
+_ACEOF
+
+         ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       test -z "$ac_type" && break
+     done
+fi
+
+
+    ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PTRDIFF_T 1
+_ACEOF
+
+
+fi
+
+    for ac_func in localeconv
+do :
+  ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
+if test "x$ac_cv_func_localeconv" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LOCALECONV 1
+_ACEOF
+
+fi
+done
+
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+
+
+
+
+
+    for ac_func in vasprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VASPRINTF 1
+_ACEOF
+ hw_cv_func_vasprintf=yes
+else
+  hw_cv_func_vasprintf=no
+fi
+done
+
+  if test "$hw_cv_func_vasprintf" = no; then :
+
+$as_echo "#define vasprintf rpl_vasprintf" >>confdefs.h
+
+    for ac_header in stdlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
+$as_echo_n "checking for va_copy... " >&6; }
+if ${hw_cv_func_va_copy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func_va_copy=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif
+int
+main ()
+{
+va_list ap, aq; va_copy(aq, ap);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func_va_copy=yes
+else
+  hw_cv_func_va_copy=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func_va_copy" >&5
+$as_echo "$hw_cv_func_va_copy" >&6; }
+  if test "$hw_cv_func_va_copy" = yes; then :
+
+$as_echo "#define HAVE_VA_COPY 1" >>confdefs.h
+
+fi
+
+    if test "$hw_cv_func_va_copy" = no; then :
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __va_copy" >&5
+$as_echo_n "checking for __va_copy... " >&6; }
+if ${hw_cv_func___va_copy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func___va_copy=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif
+int
+main ()
+{
+va_list ap, aq; __va_copy(aq, ap);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func___va_copy=yes
+else
+  hw_cv_func___va_copy=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func___va_copy" >&5
+$as_echo "$hw_cv_func___va_copy" >&6; }
+  if test "$hw_cv_func___va_copy" = yes; then :
+
+$as_echo "#define HAVE___VA_COPY 1" >>confdefs.h
+
+fi
+
+fi
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+    for ac_func in asprintf
+do :
+  ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
+if test "x$ac_cv_func_asprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_ASPRINTF 1
+_ACEOF
+ hw_cv_func_asprintf=yes
+else
+  hw_cv_func_asprintf=no
+fi
+done
+
+  if test "$hw_cv_func_asprintf" = no; then :
+
+$as_echo "#define asprintf rpl_asprintf" >>confdefs.h
+
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+    for ac_func in vasprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VASPRINTF 1
+_ACEOF
+ hw_cv_func_vasprintf=yes
+else
+  hw_cv_func_vasprintf=no
+fi
+done
+
+  if test "$hw_cv_func_vasprintf" = no; then :
+
+$as_echo "#define vasprintf rpl_vasprintf" >>confdefs.h
+
+    for ac_header in stdlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
+$as_echo_n "checking for va_copy... " >&6; }
+if ${hw_cv_func_va_copy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func_va_copy=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif
+int
+main ()
+{
+va_list ap, aq; va_copy(aq, ap);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func_va_copy=yes
+else
+  hw_cv_func_va_copy=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func_va_copy" >&5
+$as_echo "$hw_cv_func_va_copy" >&6; }
+  if test "$hw_cv_func_va_copy" = yes; then :
+
+$as_echo "#define HAVE_VA_COPY 1" >>confdefs.h
+
+fi
+
+    if test "$hw_cv_func_va_copy" = no; then :
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __va_copy" >&5
+$as_echo_n "checking for __va_copy... " >&6; }
+if ${hw_cv_func___va_copy+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  hw_cv_func___va_copy=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if HAVE_STDARG_H
+        #include <stdarg.h>
+        #elif HAVE_VARARGS_H
+        #include <varargs.h>
+        #endif
+int
+main ()
+{
+va_list ap, aq; __va_copy(aq, ap);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  hw_cv_func___va_copy=yes
+else
+  hw_cv_func___va_copy=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hw_cv_func___va_copy" >&5
+$as_echo "$hw_cv_func___va_copy" >&6; }
+  if test "$hw_cv_func___va_copy" = yes; then :
+
+$as_echo "#define HAVE___VA_COPY 1" >>confdefs.h
+
+fi
+
+fi
+
+  if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+
+
+
+    case " $LIBOBJS " in
+  *" snprintf.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ ;;
+esac
+
+    _hw_cv_func_xprintf_replace_done=yes
+fi
+
+fi
+
+
+case "$host_os" in
+       linux*)
+
+$as_echo "#define Linux 1" >>confdefs.h
+
+       ;;
+       netbsd*|freebsd*|darwin*)
+
+$as_echo "#define BSD 1" >>confdefs.h
+
+       ;;
+esac
+
+ac_config_files="$ac_config_files Makefile doc/Makefile src/Makefile contrib/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+       cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+         mv -f confcache "$cache_file"$$ &&
+         mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+         mv -f confcache "$cache_file" ;;
+       esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USING_LEX_TRUE}" && test -z "${USING_LEX_FALSE}"; then
+  as_fn_error $? "conditional \"USING_LEX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAS_CURSES_TRUE}" && test -z "${HAS_CURSES_FALSE}"; then
+  as_fn_error $? "conditional \"HAS_CURSES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USING_GNOME2_TRUE}" && test -z "${USING_GNOME2_FALSE}"; then
+  as_fn_error $? "conditional \"USING_GNOME2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAS_GNOME_TRUE}" && test -z "${HAS_GNOME_FALSE}"; then
+  as_fn_error $? "conditional \"HAS_GNOME\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GNOME_LINUX_TRUE}" && test -z "${GNOME_LINUX_FALSE}"; then
+  as_fn_error $? "conditional \"GNOME_LINUX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.h.in" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
+h
+s///
+s/^/:/
+s/[     ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[  ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..9f05fad
--- /dev/null
@@ -0,0 +1,422 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT
+AC_CONFIG_SRCDIR([src/crossref.c])
+AM_INIT_AUTOMAKE(cscope, 15.8a)
+AC_CONFIG_HEADERS([config.h:config.h.in])
+AC_PREREQ(2.59)
+AC_CANONICAL_HOST
+
+dnl User specification of lexer
+dnl AC_CHECK_LEXER
+dnl User specification of yacc
+dnl AC_CHECK_YACC
+
+dnl Checks for programs.
+AC_PROG_INSTALL
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_EXEEXT
+AM_PROG_LEX
+AM_CONDITIONAL(USING_LEX, test "x$LEX" = "xlex")
+if test "x$LEX" = "xlex" ; then AC_DEFINE(USING_LEX, 1, 
+   [Define this if the scanner is run through lex, not flex])
+fi
+AC_PROG_YACC
+
+dnl === BEGIN CURSES CHECK
+dnl Curses detection: Munged from Midnight Commander's configure.in
+dnl
+dnl What it does:
+dnl =============
+dnl
+dnl - Determine which version of curses is installed on your system
+dnl   and set the -I/-L/-l compiler entries and add a few preprocessor
+dnl   symbols 
+dnl - Do an AC_SUBST on the CURSES_INCLUDEDIR and CURSES_LIBS so that
+dnl   @CURSES_INCLUDEDIR@ and @CURSES_LIBS@ will be available in
+dnl   Makefile.in's
+dnl - Modify the following configure variables (these are the only
+dnl   curses.m4 variables you can access from within configure.in)
+dnl   CURSES_INCLUDEDIR - contains -I's and possibly -DRENAMED_CURSES if
+dnl                       an ncurses.h that's been renamed to curses.h
+dnl                       is found.
+dnl   CURSES_LIBS       - sets -L and -l's appropriately
+dnl   CFLAGS            - if --with-sco, add -D_SVID3 
+dnl   has_curses        - exports result of tests to rest of configure
+dnl
+dnl Usage:
+dnl ======
+dnl 1) Add lines indicated below to acconfig.h
+dnl 2) call AC_CHECK_CURSES after AC_PROG_CC in your configure.in
+dnl 3) Instead of #include <curses.h> you should use the following to
+dnl    properly locate ncurses or curses header file
+dnl
+dnl    #if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+dnl    #include <ncurses.h>
+dnl    #else
+dnl    #include <curses.h>
+dnl    #endif
+dnl
+dnl 4) Make sure to add @CURSES_INCLUDEDIR@ to your preprocessor flags
+dnl 5) Make sure to add @CURSES_LIBS@ to your linker flags or LIBS
+dnl
+dnl Notes with automake:
+dnl - call AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true) from
+dnl   configure.in
+dnl - your Makefile.am can look something like this
+dnl   -----------------------------------------------
+dnl   INCLUDES= blah blah blah $(CURSES_INCLUDEDIR) 
+dnl   if HAS_CURSES
+dnl   CURSES_TARGETS=name_of_curses_prog
+dnl   endif
+dnl   bin_PROGRAMS = other_programs $(CURSES_TARGETS)
+dnl   other_programs_SOURCES = blah blah blah
+dnl   name_of_curses_prog_SOURCES = blah blah blah
+dnl   other_programs_LDADD = blah
+dnl   name_of_curses_prog_LDADD = blah $(CURSES_LIBS)
+dnl   -----------------------------------------------
+dnl
+dnl
+dnl The following lines should be added to acconfig.h:
+dnl ==================================================
+dnl
+dnl /*=== Curses version detection defines ===*/
+dnl /* Found some version of curses that we're going to use */
+dnl #undef HAS_CURSES
+dnl    
+dnl /* Use SunOS SysV curses? */
+dnl #undef USE_SUNOS_CURSES
+dnl 
+dnl /* Use old BSD curses - not used right now */
+dnl #undef USE_BSD_CURSES
+dnl 
+dnl /* Use SystemV curses? */
+dnl #undef USE_SYSV_CURSES
+dnl 
+dnl /* Use Ncurses? */
+dnl #undef USE_NCURSES
+dnl 
+dnl /* If you Curses does not have color define this one */
+dnl #undef NO_COLOR_CURSES
+dnl 
+dnl /* Define if you want to turn on SCO-specific code */
+dnl #undef SCO_FLAVOR
+dnl 
+dnl /* Set to reflect version of ncurses *
+dnl  *   0 = version 1.*
+dnl  *   1 = version 1.9.9g
+dnl  *   2 = version 4.0/4.1 */
+dnl #undef NCURSES_970530
+dnl
+dnl /*=== End new stuff for acconfig.h ===*/
+dnl 
+
+
+AC_DEFUN([AC_CHECK_CURSES],[
+       search_ncurses=true
+       screen_manager=""
+       has_curses=false
+
+       CFLAGS=${CFLAGS--O}
+
+       AC_SUBST(CURSES_LIBS)
+       AC_SUBST(CURSES_INCLUDEDIR)
+
+       AC_ARG_WITH(sco,
+         [  --with-sco              Use this to turn on SCO-specific code],[
+         if test x$withval = xyes; then
+               AC_DEFINE(SCO_FLAVOR, 1, [Define if you want to turn on SCO-specific code])
+               CFLAGS="$CFLAGS -D_SVID3"
+         fi
+       ])
+
+       AC_ARG_WITH(sunos-curses,
+         [  --with-sunos-curses     Used to force SunOS 4.x curses],[
+         if test x$withval = xyes; then
+               AC_USE_SUNOS_CURSES
+         fi
+       ])
+
+       AC_ARG_WITH(osf1-curses,
+         [  --with-osf1-curses      Used to force OSF/1 curses],[
+         if test x$withval = xyes; then
+               AC_USE_OSF1_CURSES
+         fi
+       ])
+
+       AC_ARG_WITH(vcurses,
+         [  --with-vcurses[=incdir] Used to force SysV curses],
+         if test x$withval != xyes; then
+               CURSES_INCLUDEDIR="-I$withval"
+         fi
+         AC_USE_SYSV_CURSES
+       )
+
+       AC_ARG_WITH(ncurses,
+         [  --with-ncurses[=dir]  Compile with ncurses/locate base dir],
+         if test x$withval = xno ; then
+               search_ncurses=false
+         elif test x$withval != xyes ; then
+               CURSES_LIBS="$LIBS -L$withval/lib -lncurses"
+               CURSES_INCLUDEDIR="-I$withval/include"
+               search_ncurses=false
+               screen_manager="ncurses"
+               AC_DEFINE(USE_NCURSES, 1, [Use Ncurses?])
+               AC_DEFINE(HAS_CURSES, 1, [Found some version of curses that we're going to use])
+               has_curses=true
+         fi
+       )
+
+       if $search_ncurses
+       then
+               AC_SEARCH_NCURSES()
+       fi
+
+
+])
+
+
+AC_DEFUN([AC_USE_SUNOS_CURSES], [
+       search_ncurses=false
+       screen_manager="SunOS 4.x /usr/5include curses"
+       AC_MSG_RESULT(Using SunOS 4.x /usr/5include curses)
+       AC_DEFINE(USE_SUNOS_CURSES, 1, [Use SunOS SysV curses?])
+       AC_DEFINE(HAS_CURSES)
+       has_curses=true
+       AC_DEFINE(NO_COLOR_CURSES, 1, [If your Curses does not have color define this one])
+       AC_DEFINE(USE_SYSV_CURSES, 1, [Use SystemV curses?])
+       CURSES_INCLUDEDIR="-I/usr/5include"
+       CURSES_LIBS="/usr/5lib/libcurses.a /usr/5lib/libtermcap.a"
+       AC_MSG_RESULT(Please note that some screen refreshs may fail)
+])
+
+AC_DEFUN([AC_USE_OSF1_CURSES], [
+       AC_MSG_RESULT(Using OSF1 curses)
+       search_ncurses=false
+       screen_manager="OSF1 curses"
+       AC_DEFINE(HAS_CURSES)
+       has_curses=true
+       AC_DEFINE(NO_COLOR_CURSES)
+       AC_DEFINE(USE_SYSV_CURSES)
+       CURSES_LIBS="-lcurses"
+])
+
+AC_DEFUN([AC_USE_SYSV_CURSES], [
+       AC_MSG_RESULT(Using SysV curses)
+       AC_DEFINE(HAS_CURSES)
+       has_curses=true
+       AC_DEFINE(USE_SYSV_CURSES)
+       search_ncurses=false
+       screen_manager="SysV/curses"
+       CURSES_LIBS="-lcurses"
+])
+
+dnl AC_ARG_WITH(bsd-curses,
+dnl [--with-bsd-curses         Used to compile with bsd curses, not very fancy],
+dnl    search_ncurses=false
+dnl    screen_manager="Ultrix/cursesX"
+dnl    if test $system = ULTRIX
+dnl    then
+dnl        THIS_CURSES=cursesX
+dnl        else
+dnl        THIS_CURSES=curses
+dnl    fi
+dnl
+dnl    CURSES_LIBS="-l$THIS_CURSES -ltermcap"
+dnl    AC_DEFINE(HAS_CURSES)
+dnl    has_curses=true
+dnl    AC_DEFINE(USE_BSD_CURSES)
+dnl    AC_MSG_RESULT(Please note that some screen refreshs may fail)
+dnl    AC_MSG_WARN([Use of the bsdcurses extension has some])
+dnl    AC_MSG_WARN([display/input problems.])
+dnl    AC_MSG_WARN([Reconsider using xcurses])
+dnl)
+
+       
+dnl
+dnl Parameters: directory filename cureses_LIBS curses_INCLUDEDIR nicename
+dnl
+AC_DEFUN([AC_NCURSES], [
+    if $search_ncurses
+    then
+        if test -f $1/$2
+       then
+           AC_MSG_RESULT(Found ncurses on $1/$2)
+           CURSES_LIBS="$3"
+           CURSES_INCLUDEDIR="$4"
+           search_ncurses=false
+           screen_manager=$5
+            AC_DEFINE(HAS_CURSES)
+            has_curses=true
+           AC_DEFINE(USE_NCURSES)
+       fi
+    fi
+])
+
+AC_DEFUN([AC_SEARCH_NCURSES], [
+    AS_MESSAGE(checking "location of ncurses.h file"...)
+
+    AC_NCURSES(/usr/include, ncurses.h, -lncurses,, "ncurses on /usr/include")
+    AC_NCURSES(/usr/include/ncurses, ncurses.h, -lncurses, -I/usr/include/ncurses, "ncurses on /usr/include/ncurses")
+    AC_NCURSES(/usr/local/include, ncurses.h, -L/usr/local/lib -lncurses, -I/usr/local/include, "ncurses on /usr/local")
+    AC_NCURSES(/usr/local/include/ncurses, ncurses.h, -L/usr/local/lib -L/usr/local/lib/ncurses -lncurses, -I/usr/local/include/ncurses, "ncurses on /usr/local/include/ncurses")
+
+    AC_NCURSES(/usr/local/include/ncurses, curses.h, -L/usr/local/lib -lncurses, -I/usr/local/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/local/.../ncurses")
+
+    AC_NCURSES(/usr/include/ncurses, curses.h, -lncurses, -I/usr/include/ncurses -DRENAMED_NCURSES, "renamed ncurses on /usr/include/ncurses")
+
+    dnl
+    dnl We couldn't find ncurses, try SysV curses
+    dnl
+    if $search_ncurses 
+    then
+        AC_EGREP_HEADER(init_color, curses.h,
+           AC_USE_SYSV_CURSES)
+       AC_EGREP_CPP(USE_NCURSES,[
+#include <curses.h>
+#ifdef __NCURSES_H
+#undef USE_NCURSES
+USE_NCURSES
+#endif
+],[
+       CURSES_INCLUDEDIR="$CURSES_INCLUDEDIR -DRENAMED_NCURSES"
+        AC_DEFINE(HAS_CURSES)
+       has_curses=true
+        AC_DEFINE(USE_NCURSES)
+        search_ncurses=false
+        screen_manager="ncurses installed as curses"
+])
+    fi
+
+    dnl
+    dnl Try SunOS 4.x /usr/5{lib,include} ncurses
+    dnl The flags USE_SUNOS_CURSES, USE_BSD_CURSES and BUGGY_CURSES
+    dnl should be replaced by a more fine grained selection routine
+    dnl
+    if $search_ncurses
+    then
+       if test -f /usr/5include/curses.h
+       then
+           AC_USE_SUNOS_CURSES
+        fi
+    else
+        # check for ncurses version, to properly ifdef mouse-fix
+       AC_MSG_CHECKING(for ncurses version)
+       ncurses_version=unknown
+cat > conftest.$ac_ext <<EOF
+[#]line __oline__ "configure"
+#include "confdefs.h"
+#ifdef RENAMED_NCURSES
+#include <curses.h>
+#else
+#include <ncurses.h>
+#endif
+#undef VERSION
+VERSION:NCURSES_VERSION
+EOF
+        if (eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD() |
+  egrep "VERSION:" >conftest.out 2>&1; then
+changequote(,)dnl
+            ncurses_version=`cat conftest.out|sed -e 's/^[^"]*"//' -e 's/".*//'`
+changequote([,])dnl
+       fi
+       rm -rf conftest*
+        AC_MSG_RESULT($ncurses_version)
+       case "$ncurses_version" in
+changequote(,)dnl
+       4.[01])
+changequote([,])dnl
+            AC_DEFINE(NCURSES_970530,2,
+       [Set to reflect version of ncurses: 
+       0 = version 1.*
+       1 = version 1.9.9g
+       2 = version 4.0/4.1])
+            ;;
+       1.9.9g)
+            AC_DEFINE(NCURSES_970530,1)
+            ;;
+       1*)
+            AC_DEFINE(NCURSES_970530,0)
+            ;;
+       esac
+    fi
+])
+dnl === END CURSES CHECK
+
+AC_CHECK_CURSES
+AM_CONDITIONAL(HAS_CURSES, test "$has_curses" = true)
+
+dnl Checks for libraries.
+dnl Replace `main' with a function in -lcurses:
+dnl AC_CHECK_LIB(curses, main)
+
+AC_CHECK_HEADER(regex.h, [], [
+  AC_MSG_ERROR([necessary header <regex.h> not found])
+])
+
+dnl Cygwin is a bit peculiar: it has the regcomp() functions, but in a
+dnl separate library, so we have to check for that:
+AC_CHECK_LIB(regex, regcomp)
+
+dnl Check for a GNOME installation
+
+AC_DEFUN([AC_CHECK_GNOME],[
+       has_gnome=false
+       AC_CHECK_PROG(gnome1, gnome-config, true)       
+       AC_CHECK_PROG(gnome2, pkg-config, true)
+
+       if test x$gnome1 = xtrue; then
+         has_gnome=true
+       fi
+
+       if test x$gnome2 = xtrue; then
+         has_gnome=true
+       fi
+       
+       AM_CONDITIONAL(USING_GNOME2, pkg-config --exists gtk+-2.0)
+       AM_CONDITIONAL(HAS_GNOME, test "$has_gnome" = true)
+       AM_CONDITIONAL(GNOME_LINUX, test "$host_os" = Linux)
+])
+
+AC_CHECK_GNOME
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h sys/window.h sys/termios.h unistd.h signal.h floss.h io.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_MODE_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE(sighandler_t,[],[],[
+#ifdef HAVE_SIGNAL_H
+# include <signal.h>
+#endif])
+dnl This test was ripped from gnuplot's configure.in:
+AC_MSG_CHECKING(for sigsetjmp)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]], [[jmp_buf env; sigsetjmp(env, 1);]])],[AC_MSG_RESULT(yes)
+   AC_DEFINE(HAVE_SIGSETJMP,1,
+             [ Define if we have sigsetjmp(). ])],[AC_MSG_RESULT(no)])
+
+dnl Checks for library functions.
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS(strchr memcpy memset setmode _setmode)
+AC_CHECK_FUNCS(getcwd regcmp regcomp strerror lstat)
+AC_CHECK_FUNCS(fixkeypad getopt_long)
+HW_FUNC_SNPRINTF
+HW_FUNC_VSNPRINTF
+HW_FUNC_ASPRINTF
+HW_FUNC_VASPRINTF
+
+case "$host_os" in
+       linux*)
+               AC_DEFINE(Linux, 1, [We're using some variant of Linux])
+       ;;
+       netbsd*|freebsd*|darwin*)
+               AC_DEFINE(BSD, 1, [We're using a BSD-flavoured Unix])
+       ;;
+esac
+
+AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile contrib/Makefile])
+AC_OUTPUT
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644 (file)
index 0000000..769b4f5
--- /dev/null
@@ -0,0 +1,6 @@
+## Process this file with automake to produce Makefile.in
+
+bin_SCRIPTS = ocs
+
+EXTRA_DIST = README ocs cctree.txt cctree.vim xcscope webcscope
+
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644 (file)
index 0000000..6a92346
--- /dev/null
@@ -0,0 +1,406 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = contrib
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(bindir)"
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
+CURSES_LIBS = @CURSES_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gnome1 = @gnome1@
+gnome2 = @gnome2@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_SCRIPTS = ocs
+EXTRA_DIST = README ocs cctree.txt cctree.vim xcscope webcscope
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu contrib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-binSCRIPTS install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-binSCRIPTS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/README b/contrib/README
new file mode 100644 (file)
index 0000000..c6fd4c6
--- /dev/null
@@ -0,0 +1,14 @@
+Contributed addons and wrappers for cscope
+$Id: README,v 1.4 2011/05/26 17:47:25 nhorman Exp $
+
+ocs - wrapper for cscope providing database generation through recursive
+       directory set (among other things) - docced in script itself.
+        contributed from SCO osr5.
+
+webcscope - a web cgi interface to cscope. Contributed by Ragho Mahalingam,
+               using code from Dmitry Obukhovi and Steven E. Brenner.
+
+xcscope - An (X)Emacs interface to cscope.
+
+cctree.vim - A Vim plugin to allow you to do some powerful searching of cscope
+            databases from within vi, see cctree.txt for usage details
diff --git a/contrib/cctree.txt b/contrib/cctree.txt
new file mode 100644 (file)
index 0000000..555559d
--- /dev/null
@@ -0,0 +1,537 @@
+*CCTree.txt*   Plugin for C Call-Tree Explorer *CCTree*\r
+\r
+Author: Hari Rangarajan (First.Last AT gmail DOT com)\r
+Last Change: 20 May 2011\r
+\r
+CCTree version 1.51\r
+\r
+For Vim version 7.0 and above\r
+\r
+==============================================================================\r
+\r
+1. Overview                                     |CCTree-overview|\r
+2. Downloads                                    |CCTree-download|\r
+3. Installation                                 |CCTree-installation|\r
+4. Configuration                               |CCTree-configuration|\r
+5. Features                                     |CCTree-features|\r
+6. Limitations                                  |CCTree-limitations|\r
+7. FAQ & TIPS                                   |CCTree-faq|\r
+8. History                                      |CCTree-history|\r
+9. Thanks                                       |CCTree-thanks|\r
\r
+==============================================================================\r
+1. Overview~\r
+                                                *CCTree-overview*\r
+\r
+Plugin generates dependency-trees for symbols using a cscope database in Vim.\r
+Basic cross-referencing includes functions and macros. Enhanced symbol\r
+processing covers macros, typedefs, enums, and global variables.\r
+\r
+Requires Cscope and works best with C code.\r
+\r
+==============================================================================\r
+2. Downloads~\r
+                                                *CCTree-download*\r
+\r
+You can download the latest release of the script from this url :\r
+    http://www.vim.org/scripts/script.php?script_id=2368\r
+\r
+\r
+Cscope packages can be found here:\r
+    http://cscope.sourceforge.net/\r
+    http://code.google.com/p/cscope-win32/\r
+    \r
+\r
+==============================================================================\r
+3. Installation~\r
+                                                *CCTree-installation*\r
+\r
+Copy this file to ~/.vim/plugins/ or to /vimfiles/plugins/  (on Win32\r
+platforms) \r
+\r
+It should also be possible to load it as a filetype plugin ~/.vim/ftplugin/c/\r
+Need to set :filetype plugin on \r
+\r
+\r
+==============================================================================\r
+CONFIGURATION                                  *CCTree-configuration*\r
+4. Options~\r
+\r
+You can customize behavior by changing the following variable settings\r
+                    \r
+4.1.1 Cscope Symbol Database~\r
+                                                *CCTreeCscopeDb*\r
+\r
+Cscope database file, g:CCTreeCscopeDb = "cscope.out"\r
+\r
+4.1.2 Call-tree Depth~\r
+                                                *CCTreeRecursiveDepth* \r
+Maximum call levels,   g:CCTreeRecursiveDepth = 3\r
+\r
+4.1.3 Call-tree Minimum Visible Depth~\r
+                                                *CCTreeMinVisibleDepth*\r
+Maximum visible(unfolded) level, g:CCTreeMinVisibleDepth = 3\r
+\r
+4.1.4 Call-tree window display~\r
+\r
+4.4.1 Orientation~\r
+                                                *CCTreeOrientation*\r
+Orientation of window,  g:CCTreeOrientation = "leftabove"\r
+ (standard vim options for split: [right|left][above|below])\r
+\r
+4.5 Direction~\r
+                                                *CCTreeWindowVertical* \r
+Use Vertical window, g:CCTreeWindowVertical = 1\r
+\r
+4.5.1 Dimensions~\r
+\r
+These settings determine the layout of the CCTree preview window.\r
+\r
+4.5.2 Horizontal Window Settings~\r
+                                                *CCTreeWindowHeight* \r
+ Horizontal window, g:CCTreeWindowHeight, default is -1.\r
+\r
+4.5.2 Vertical Window Settings~\r
+                                                *CCTreeWindowMinWidth* \r
+                                                *CCTreeWindowWidth* \r
+ Minimum width for window, g:CCTreeWindowMinWidth = 40.\r
+ g:CCTreeWindowWidth = -1, auto-select best width to fit.\r
+\r
+\r
+4.6 Call-tree display format~\r
+                                                *CCTreeDisplayMode*\r
+Display format, g:CCTreeDisplayMode, default: 1\r
+\r
+Values: 1 -- Ultra-compact (takes minimum screen width)\r
+        2 -- Compact       (Takes little more space)\r
+        3 -- Wide          (Takes copious amounts of space)\r
+\r
+For vertical splits, 1 and 2 are good, while 3 is good for horizontal\r
+displays.\r
+\r
+4.7. Dynamic Call-tree highlighting~\r
+                                                *CCTreeHilightCallTree*\r
+\r
+Enable/disable dynamic call-tree highlighting, default: 1\r
+\r
+\r
+4.7.1 Syntax items~\r
+                                               *CCTreeSymbol* *CCTreeHiSymbol*\r
+CCTreeSymbol is the symbol name.\r
+CCTreeHiSymbol is the highlighted call tree functions.\r
+\r
+                                               *CCTreeMarkers* *CCTreeHiMarkers*\r
+CCTreeMarkers include  "|","+--->".\r
+CCTreeHiMarkers is the same as CCTreeMarkers except these denote the \r
+highlighted call-tree.\r
+\r
+    \r
+   \r
+==============================================================================\r
+COMMAND LIST                                           *CCTree-commands-list*\r
+\r
+Database Management~\r
+      CCTreeLoadDB                <dbname>\r
+      CCTreeAppendDB              <dbname>\r
+      CCTreeUnLoadDB             \r
+      CCTreeShowLoadedDBs\r
+                               Refer to |CCTree-usage|\r
+\r
+Native Xref Database~\r
+      CCTreeLoadXRefDB          <dbname>\r
+      CCTreeSaveXRefDB          <dbname>\r
+                               \r
+                               Refer to |CCTree-fast-loading|\r
+       \r
+Symbol tracing~\r
+      CCTreeTraceForward          <symbolname>\r
+      CCTreeTraceReverse          <symbolname>     \r
+      CCTreeRecurseDepthPlus     \r
+      CCTreeRecurseDepthMinus    \r
+                               Refer to |CCTree-explore-source|\r
+Trace Management~\r
+      CCTreeWindowSaveCopy\r
+      CCTreeWindowHiCallTree   \r
+                               Refer to |CCTree-preview-window|\r
+\r
+Dynamic configuration~\r
+      CCTreeOptsEnable <option>    (<tab> for auto-complete)\r
+      CCTreeOptsDisable <option>   (<tab> for auto-complete)\r
+      CCTreeOptsToggle <option>    (<tab> for auto-complete)\r
+      Options~\r
+            DynamicTreeHiLights: Control dynamic tree highlighting\r
+           UseUnicodeSymbols:   Use of UTF-8 special characters for tree\r
+            UseConceal: Use (+Conceal) feature instead of 'ignore'\r
+                    syntax highlighting. Allows CCTree window\r
+                    to be exported in HTML without syntax markup\r
+                    characters. (Vim 7.3+ only)\r
+                                            *CCTree-Enhanced-Symbol-Processing*\r
+            EnhancedSymbolProcessing: Cross-reference enums, macros,\r
+                    global variables, typedefs (WARNING: Database\r
+                    processing speeds will be slow).\r
\r
+SHORTCUT KEYS                                          *CCTree-Key-Map*        \r
+Default Mappings~\r
+                                                       *CCTree-Default-Key-Map*   \r
+      Get reverse call tree for symbol  <C-\><\r
+      Get forward call tree for symbol  <C-\>>\r
+      Increase depth of tree and update <C-\>=\r
+      Decrease depth of tree and update <C-\>-\r
+\r
+      Open symbol in other window       <CR>\r
+      Preview symbol in other window    <Ctrl-P>\r
+\r
+      Save copy of preview window       <C-\>y\r
+      Highlight current call-tree flow  <C-l>\r
+      Compress(Fold) call tree view     zs\r
+      (This is useful for viewing long\r
+       call trees which span across\r
+       multiple pages)\r
+\r
+Custom user-mappings   \r
+                                                       *CCTree-Custom-Key-Map*\r
+    Users can custom-map the short-cut keys by \r
+    overriding the following variables in their\r
+    Vim start-up configuration            \r
+>\r
+     let g:CCTreeKeyTraceForwardTree = '<C-\>>' \r
+     let g:CCTreeKeyTraceReverseTree = '<C-\><' \r
+     let g:CCTreeKeyHilightTree = '<C-l>'        " Static highlighting\r
+     let g:CCTreeKeySaveWindow = '<C-\>y' \r
+     let g:CCTreeKeyToggleWindow = '<C-\>w' \r
+     let g:CCTreeKeyCompressTree = 'zs'     " Compress call-tree \r
+     let g:CCTreeKeyDepthPlus = '<C-\>=' \r
+     let g:CCTreeKeyDepthMinus = '<C-\>-'\r
+<  \r
+\r
+==============================================================================\r
+FEATURES                                               *CCTree-features*\r
+\r
+5.1. Symbol database~\r
+                                                       *CCTree-usage*\r
+Build cscope database, for example:\r
+> cscope -b -i cscope.files\r
+ [Tip: add -c option to build uncompressed databases for faster\r
+    load speeds]\r
+\r
+Load database~\r
+>\r
+       :CCTreeLoadDB\r
+<\r
+       (Please note that it might take a while depending on the \r
+        database size)\r
+\r
+A database name, i.e., my_cscope.out, can be specified with the command. If\r
+not provided, a prompt will ask for the filename; default is cscope.out.\r
+       \r
+Unload database ~\r
+ >\r
+       :CCTreeUnLoadDB\r
+<\r
+Append database~\r
+ >\r
+       :CCTreeAppendDB\r
+<\r
+    Allows multiple cscope files to be loaded and cross-referenced\r
+    Illustration: >\r
+    :CCTreeAppendDB ./cscope.out\r
+    :CCTreeAppendDB ./dir1/cscope.out\r
+    :CCTreeAppendDB ./dir2/cscope.out\r
+<\r
+    A database name, i.e., my_cscope.out, can be specified with \r
+    the command. If not provided, a prompt will ask for the \r
+    filename; default is cscope.out.\r
+\r
+FASTER DATABASE LOADING                                        *CCTree-fast-loading*\r
+\r
+Save native Xref Db~\r
+>\r
+       :CCTreeSaveXRefDb  cctree.out\r
+<\r
+This command will save the cross-referenced symbols currently loaded into \r
+memory into a serialized format  for faster loading.\r
+\r
+Load native XRef Db~\r
+>\r
+       :CCTreeLoadXRefDb  cctree.out\r
+<\r
+This command will load cross-referenced symbols from the previously saved\r
+native format database.\r
+\r
+ccglue~\r
+                                                       *CCTree-ccglue*\r
+\r
+Check out the ccglue project at http://ccglue.sourceforge.net for an external\r
+tool that can build cctree-compatible xref databases.\r
+\r
+\r
+5.2. Exploring source-code~\r
+                                                       *CCTree-explore-source*\r
+\r
+Get reverse call tree for symbol  <C-\><\r
+>\r
+       :CCTreeTraceReverse <symbolname>     \r
+<\r
+\r
+Get forward call tree for symbol  <C-\>>\r
+>\r
+       :CCTreeTraceForward <symbolname>\r
+<\r
+Increase depth of tree and update <C-\>=\r
+>\r
+       :CCTreeRecurseDepthPlus     \r
+<\r
+Decrease depth of tree and update <C-\>-\r
+>\r
+       :CCTreeRecurseDepthMinus    \r
+<\r
+5.3. Preview Window~\r
+                                                *CCTree-preview-window*\r
+Open symbol in other window       <CR>\r
+Preview symbol in other window    <Ctrl-P>\r
+\r
+5.4. Syntax Coloring~\r
+                                                *CCTree-Syntax*\r
+CCTreeHiXXXX allows dynamic highlighting of the call-tree.  To observe the\r
+effect, move the cursor to the function to highlight the current call-tree.\r
+This option can be turned off using the setting, *CCTreeHilightCallTree* . \r
+\r
+For faster highlighting, the value of 'updatetime' can be changed.\r
+\r
+5.5 Support for large database files~\r
+                               *CCTree-LargeDatabase* *CCTree-LargeFile*\r
+Vimscript does not have an API for reading files line-by-line. This\r
+becomes a problem when parsing large databases. CCTree can overcome\r
+the limitation using an external utility (i.e., GNU coreutils: split)\r
+or VimScript's perl interpreter interface (:version must indicate +perl)\r
+\r
+5.5.1 Using GNU Coreutils (split/cat)~\r
+                               *CCTree-Tools-split* *CCTree-Tools-cat*\r
+       The following settings are tailored to suit GNU coreutils split; the\r
+default settings should work with no changes on typical linux/unix distros.\r
+Monopoly OSes will require installation of unixutils or equivalent.\r
+\r
+External command is setup with the following parameters~\r
+>\r
+       let g:CCTreeSplitProgCmd = \r
+               'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'\r
+<\r
+\r
+Break-down of individual parameters~\r
+The split utility is assumed to be on the path; otherwise, specify full path\r
+       g:CCTreeSplitProg = 'split'\r
+\r
+Option for splitting files (-C or -l)~\r
+>\r
+       let g:CCTreeSplitProgOption = '-C'\r
+<\r
+If split program does not support -C, then this parameter must be set to \r
+the number of lines in the split files\r
+>\r
+       let g:CCTreeDbFileSplitLines = -1\r
+<\r
+Largest filesize Vimscript can handle; file sizes greater than this will\r
+be temporarily split\r
+>\r
+       let g:CCTreeDbFileMaxSize  = 40000000 (40 Mbytes)\r
+<\r
+Sample system command~\r
+Typical:\r
+>\r
+       split -C 40000000 inputFile outputFilePrefix\r
+<\r
+ When g:CCTreeDbFileSplitLines is set to 10000 (-C options will be ignored)\r
+>\r
+       split -l 10000 inputFile outputFilePrefix\r
+<\r
+                                               *CCTree-Tools-Perl*\r
+                                               *CCTree-Tools-Perl-LargeFile*\r
+Enabling perl interface~\r
+\r
+       By default, perl usage is disabled. Set\r
+>\r
+       let g:CCTreeUsePerl = 1 \r
+<               to enable the perl interface.\r
+\r
+       Perl interface is typically faster than native Vimscript.\r
+       This option can be used independent of the file size\r
+\r
+       For more info on setting up perl interface\r
+       :help |perl-using| or :help |perl-dynamic|\r
+\r
+5.6.   Miscellaneous                           *CCTree-Miscellaneous*\r
+\r
+       UTF-8 usage                             *CCTree-UTF8-Symbols*\r
+            UTF-8 symbols should work fine on the majority of\r
+        X11 systems; however, some terminals might cause problems.\r
+\r
+        To use symbols for drawing the tree, this option can be enabled.\r
+>\r
+            let g:CCTreeUseUTF8Symbols = 1 \r
+<\r
+        The options interface (CCTreeOptsxxx) can be used to \r
+        modify options on-the-fly.\r
+\r
+==============================================================================\r
+6. Limitations~\r
+                                                *CCTree-limitations*\r
+\r
+The following are known limitations:\r
+\r
+Basic Symbol Processing:\r
+  (1) The accuracy of the call-tree will only be as good as the cscope database\r
+generation.  (NOTE: Different flavors of Cscope have some known limitations\r
+due to the lexical analysis engine. This results in incorrectly identified\r
+function blocks, etc.)\r
+\r
+Enhanced Symbol Processing:\r
+  (1) Cscope does not mark-up nameless enums correctly; hence,\r
+CCTree cannot recognize nameless enum symbols.\r
+\r
+\r
+==============================================================================\r
+7. FAQ~\r
+                                                *CCTree-faq*\r
+\r
++ I see strange characters "!#@" on my screen when dynamic highlighting is\r
+enabled. Why do I see them?\r
+  \r
+Check :hi ignore. You will see something like\r
+hi ignore ctermfg=white guifg=bg\r
+    \r
+  For console, white must be your background color; for GUI, guifg must be set\r
+to bg.\r
+\r
+==============================================================================\r
+8. History~\r
+                                                *CCTree-history*\r
+Version 1.51: May 18, 2011\r
+      1. Robust error reporting when external (split/cat) utils fail\r
+\r
+Version 1.50: May 6, 2011\r
+      1. Support cross-referencing of global variables, macros,\r
+         enums, and typedefs.\r
+\r
+Version 1.40: April 22, 2011\r
+      1. Maintain order of functions called during forward tracing\r
+\r
+Version 1.39: April 18, 2011\r
+      1. Use +Conceal feature for highlighting (only Vim 7.3)\r
+\r
+Version 1.33: April 5, 2011\r
+      1. Load and trace CCTree native XRefDb directly from disk\r
+      2. Fix AppendDB command when 'ignorecase' is set\r
+\r
+Version 1.26: March 28, 2011\r
+      1. Fix macro cross-referencing limitation\r
+      2. Correct native xref file format\r
+\r
+Version 1.21: March 21, 2011\r
+      1. Support serialization of loaded\r
+                cscope databases (for faster loading)\r
+\r
+Version 1.07: March 09, 2011\r
+      1. Fix new keymaps incorrectly applied to buffer\r
+      2. CCTreeOptsToggle command for toggling options\r
+\r
+Version 1.04: March 06, 2011\r
+      1. Customization for key mappings\r
+      2. Dynamic configuration of UI variables\r
+      3. Folding long call-trees to show current path dynamically\r
+\r
+Version 1.01: March 04, 2011\r
+      1. Make UTF-8 symbols for tree optional\r
+\r
+Version 1.00: March 02, 2011\r
+      1. Staging release for upcoming features\r
+         - Complete refactoring of code to take \r
+                advantage of VimScript's OO features\r
+      2. Faster decompression of symbols\r
+      3. Display related changes\r
+         - Use of unicode symbols for tree\r
+      4. Bugfixes related to multi-database loading\r
+               \r
+Version 0.90: February 18, 2011\r
+      1. Support for large databases using external split utility or perl\r
+         interface\r
+\r
+Version 0.85: February 9, 2011\r
+      1. Significant increase in database loading and decompression speeds\r
+\r
+Version 0.80: February 4, 2011\r
+      1. Reduce memory usage by removing unused xref symbols\r
+\r
+Version 0.75: June 23, 2010\r
+         1. Support for saving CCTree preview window; multiple \r
+       CCTree windows can now be open\r
+\r
+ersion 0.71: May 11, 2010\r
+         1. Fix script bug\r
+\r
+Version 0.70: May 8, 2010\r
+         1. Functionality to load multiple cscope databases\r
+\r
+Version 0.65: July 12, 2009\r
+         1. Toggle preview window\r
+\r
+Version 0.61: December 24, 2008\r
+      1. Fixed bug when processing include files\r
+      2. Remove 'set ruler' option\r
+\r
+Version 0.60: November 26, 2008\r
+      1. Added support for source-file dependency tree\r
+\r
+Version 0.50: October 17, 2008\r
+      1. Optimizations for compact memory foot-print and \r
+         improved compressed-database load speeds\r
+\r
+Version 0.41: October 6, 2008\r
+       1. Minor fix: Compressed cscope databases will load\r
+       incorrectly if encoding is not 8-bit\r
+\r
+Version 0.4: September 28, 2008\r
+      1. Rewrite of display-related code\r
+      2. New syntax hightlighting\r
+      3. Dynamic highlighting for call-trees\r
+      4. Support for new window modes (vertical, horizontal)  \r
+      5. New display format option for compact or wide call-trees\r
+      6. Preview window fix\r
+\r
+Version 0.3: September 21, 2008\r
+      1. Support compressed cscope databases\r
+      2. Display window related bugs fixed\r
+      3. More intuitive display and folding capabilities\r
+    \r
+Version 0.2: September 12, 2008\r
+      (Patches from Yegappan Lakshmanan, thanks!)\r
+      1. Support for using the plugin in Vi-compatible mode\r
+      2. Filtering out unwanted lines before processing the db\r
+      3. Command-line completion for the commands\r
+      4. Using the cscope db from any directory\r
+\r
+Version 0.1: August 31,2008\r
+      1. Cross-referencing support for only functions and macros\r
+         (Note: Functions inside macro definitions will be incorrectly\r
+         attributed to the top level calling function)\r
+\r
+\r
+==============================================================================\r
+9. Thanks~\r
+                                                 *CCTree-thanks*\r
+\r
+\r
+   Qaiser Durrani                 (ver 1.51 -- Reporting issues with SunOS)\r
+   Ben Fritz                      (ver 1.39 -- Suggestion/Testing for \r
+                                                        conceal feature)\r
+   Ben Fritz                      (ver 1.26 -- Bug report)\r
+   Frank Chang                    (ver 1.0x -- testing/UI enhancement \r
+                                                            ideas/bug fixes)\r
+   Arun Chaganty/Timo Tiefel     (Ver 0.60 -- bug report)\r
+   Michael Wookey                 (Ver 0.40 -- Testing/bug report/patches)\r
+   Yegappan Lakshmanan            (Ver 0.20 -- Patches)\r
+\r
+   The Vim Community, ofcourse :)\r
+\r
+\r
+vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:\r
+\r
diff --git a/contrib/cctree.vim b/contrib/cctree.vim
new file mode 100644 (file)
index 0000000..0382220
--- /dev/null
@@ -0,0 +1,3398 @@
+" C Call-Tree Explorer (CCTree) <CCTree.vim>
+"
+"
+" Script Info and Documentation
+"=============================================================================
+"    Copyright: Copyright (C) August 2008 - 2011, Hari Rangarajan
+"               Permission is hereby granted to use and distribute this code,
+"               with or without modifications, provided that this copyright
+"               notice is copied with it. Like anything else that's free,
+"               cctree.vim is provided *as is* and comes with no
+"               warranty of any kind, either expressed or implied. In no
+"               event will the copyright holder be liable for any damamges
+"               resulting from the use of this software.
+"
+" Name Of File: CCTree.vim
+"  Description: C Call-Tree Explorer Vim Plugin
+"   Maintainer: Hari Rangarajan <hari.rangarajan@gmail.com>
+"          URL: http://vim.sourceforge.net/scripts/script.php?script_id=2368
+"  Last Change: May 18, 2011
+"      Version: 1.51
+"
+"=============================================================================
+"
+"  {{{ Description:
+"       Plugin generates dependency-trees for symbols using a cscope database
+"  in Vim.
+"  }}}
+"  {{{ Requirements: 1) Vim 7.xx , 2) Cscope
+"
+"                Tested on Unix and the following Win32 versions:
+"                + Cscope, mlcscope (WIN32)
+"                       http://code.google.com/p/cscope-win32/
+"                       http://www.bell-labs.com/project/wwexptools/packages.html
+"  }}}
+"  {{{ Installation:
+"               Copy this file to ~/.vim/plugins/
+"               or to /vimfiles/plugins/  (on Win32 platforms)
+"
+"               It might also be possible to load it as a filetype plugin
+"               ~/.vim/ftplugin/c/
+"
+"               Need to set :filetype plugin on
+"
+"  }}}
+"  {{{ Usage:
+"           Build cscope database, for example:
+"           > cscope -b -i cscope.files
+"               [Tip: add -c option to build uncompressed databases for faster
+"               load speeds]
+"
+"           Load database with command ":CCTreeLoadDB"
+"           (Please note that it might take a while depending on the
+"           database size)
+"
+"           Append database with command ":CCTreeAppendDB"
+"            Allows multiple cscope files to be loaded and cross-referenced
+"            Illustration:
+"            :CCTreeAppendDB ./cscope.out
+"            :CCTreeAppendDB ./dir1/cscope.out
+"            :CCTreeAppendDB ./dir2/cscope.out
+"
+"           A database name, i.e., my_cscope.out, can be specified with
+"           the command. If not provided, a prompt will ask for the
+"           filename; default is cscope.out.
+"
+"           To show loaded databases, use command ":CCTreeShowLoadedDBs"
+"
+"           To unload all databases, use command ":CCTreeUnLoadDB"
+"            Note: There is no provision to unload databases individually
+"
+"           To save the current set of databases loaded in to memory onto disk
+"           in native CCTree XRef format, use command ":CCTreeSaveXRefDB"
+"
+"           To load a saved native CCTree XRef format file, use
+"           command ":CCTreeLoadXRefDB"
+"
+"           To load a saved native CCTree XRef format file, use
+"           command ":CCTreeLoadXRefDBFromDisk"
+"
+"           Notes: No merging database support for CCTree native DB's [at present].
+"
+"
+"            To have multiple CCTree preview windows, use ":CCTreeWindowSaveCopy"
+"            Note: Once saved, only the depth of the preview window can be changed
+"
+"           Default Mappings:
+"             Get reverse call tree for symbol  <C-\><
+"             Get forward call tree for symbol  <C-\>>
+"             Increase depth of tree and update <C-\>=
+"             Decrease depth of tree and update <C-\>-
+"
+"             Open symbol in other window       <CR>
+"             Preview symbol in other window    <Ctrl-P>
+"
+"              Save copy of preview window       <C-\>y
+"             Highlight current call-tree flow  <C-l>
+"             Compress(Fold) call tree view     zs
+"             (This is useful for viewing long
+"              call trees which span across
+"              multiple pages)
+"
+"           Custom user-mappings:
+"           Users can custom-map the short-cut keys by
+"           overriding the following variables in their
+"           Vim start-up configuration
+"
+"            g:CCTreeKeyTraceForwardTree = '<C-\>>'
+"            g:CCTreeKeyTraceReverseTree = '<C-\><'
+"            g:CCTreeKeyHilightTree = '<C-l>'        " Static highlighting
+"            g:CCTreeKeySaveWindow = '<C-\>y'
+"            g:CCTreeKeyToggleWindow = '<C-\>w'
+"            g:CCTreeKeyCompressTree = 'zs'     " Compress call-tree
+"            g:CCTreeKeyDepthPlus = '<C-\>='
+"            g:CCTreeKeyDepthMinus = '<C-\>-'
+"
+"          Command List:
+"             CCTreeLoadDB                <dbname>
+"             CCTreeAppendDB              <dbname>
+"             CCTreeLoadXRefDB            <dbname>
+"             CCTreeSaveXRefDB            <dbname>
+"             CCTreeLoadXRefDBFromDisk    <dbname>
+"
+"             CCTreeUnLoadDB
+"             CCTreeShowLoadedDBs
+"
+"             CCTreeTraceForward          <symbolname>
+"             CCTreeTraceReverse          <symbolname>
+"             CCTreeRecurseDepthPlus
+"             CCTreeRecurseDepthMinus
+"             CCTreeWindowSaveCopy
+"
+"          Only in preview window:
+"             CCTreeWindowHiCallTree   (same as <C-l> shorcut)
+"                   Highlight calling tree for keyword at cursor
+"
+"          Dynamic configuration:
+"             CCTreeOptsEnable <option>    (<tab> for auto-complete)
+"             CCTreeOptsDisable <option>   (<tab> for auto-complete)
+"             CCTreeOptsToggle <option>   (<tab> for auto-complete)
+"             Options:
+"                   DynamicTreeHiLights: Control dynamic tree highlighting
+"                   UseUnicodeSymbols: Use of UTF-8 special characters for
+"                                      tree
+"                   UseConceal: Use (+Conceal) feature instead of 'ignore'
+"                               syntax highlighting. Allows CCTree window
+"                               to be exported in HTML without syntax markup
+"                               characters. (Vim 7.3+ only)
+"                   EnhancedSymbolProcessing: Cross-reference enums, macros,
+"                               global variables, typedefs (Warning: Database
+"                               processing speeds will be slow).
+"
+"
+"
+"          Settings:
+"               Customize behavior by changing the variable settings
+"
+"               UTF-8 usage:
+"                   UTF-8 symbols should work fine on the majority of
+"               X11 systems; however, some terminals might cause problems.
+"
+"               To use symbols for drawing the tree, this option can be enabled.
+"                   g:CCTreeUseUTF8Symbols = 1
+"               The options interface (CCTreeOptsxxx) can be used to
+"               modify options on-the-fly.
+"
+"               Cscope database file, g:CCTreeCscopeDb = "cscope.out"
+"               Maximum call levels,   g:CCTreeRecursiveDepth = 3
+"               Maximum visible(unfolded) level, g:CCTreeMinVisibleDepth = 3
+"               Orientation of window,  g:CCTreeOrientation = "topleft"
+"                (standard vim options for split: [right|left][above|below])
+"
+"               Use Vertical window, g:CCTreeWindowVertical = 1
+"                   Min width for window, g:CCTreeWindowMinWidth = 40
+"                   g:CCTreeWindowWidth = -1, auto-select best width to fit
+"
+"               Horizontal window, g:CCTreeWindowHeight, default is -1
+"
+"
+"               Display format, g:CCTreeDisplayMode, default 1
+"
+"               Values: 1 -- Ultra-compact (takes minimum screen width)
+"                       2 -- Compact       (Takes little more space)
+"                       3 -- Wide          (Takes copious amounts of space)
+"
+"               For vertical splits, 1 and 2 are good, while 3 is good for
+"               horizontal displays
+"
+"               NOTE: To get older behavior, add the following to your vimrc
+"               let g:CCTreeDisplayMode = 3
+"               let g:CCTreeWindowVertical = 0
+"
+"               Syntax Coloring:
+"                    CCTreeSymbol is the symbol name
+"                    CCTreeMarkers include  "|","+--->"
+"
+"                    CCTreeHiSymbol is the highlighted call tree functions
+"                    CCTreeHiMarkers is the same as CCTreeMarkers except
+"                           these denote the highlighted call-tree
+"
+"
+"                    CCTreeHiXXXX allows dynamic highlighting of the call-tree.
+"                    To observe the effect, move the cursor to the function to
+"                    highlight the current call-tree. This option can be
+"                    turned off using the setting, g:CCTreeHilightCallTree.
+"                    For faster highlighting, the value of 'updatetime' can be
+"                    changed.
+"
+"               Support for large database files:
+"                 Vimscript does not have an API for reading files line-by-line. This
+"                becomes a problem when parsing large databases. CCTree can overcome
+"                the limitation using an external utility (i.e., GNU coreutils: split)
+"                or VimScript's perl interpreter interface (:version must indicate +perl)
+"
+"                The following settings are tailored to suit GNU coreutils split; the default
+"                settings should work with no changes on typical linux/unix distros
+"                (Monopoly OSes will require installation of unixutils or equivalent)
+"
+"                External command is setup with the following parameters:
+"                g:CCTreeSplitProgCmd = 'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'
+"
+"                Break-down of individual parameters:
+"                The split utility is assumed to be on the path; otherwise, specify full path
+"                            g:CCTreeSplitProg = 'split'
+"
+"                Option for splitting files (-C or -l)
+"                            g:CCTreeSplitProgOption = '-C'
+"                 If split program does not support -C, then this parameter must be set to
+"                 the number of lines in the split files
+"                         g:CCTreeDbFileSplitLines = -1
+"                Largest filesize Vimscript can handle; file sizes greater than this will
+"                be temporarily split
+"                        g:CCTreeDbFileMaxSize  = 40000000 (40 Mbytes)
+"
+"                Sample system command:
+"                Typical:
+"                        split -C 40000000 inputFile outputFilePrefix
+"
+"                 When g:CCTreeDbFileSplitLines is set to 10000 (-C options will be ignored)
+"                        split -l 10000 inputFile outputFilePrefix
+"
+"
+"                Using perl interface:
+"                        By default, perl usage is disabled. Set
+"                        g:CCTreeUsePerl = 1  to enable the perl interface.
+"
+"                        Perl interface is typically faster than native Vimscript.
+"                        This option can be used independent of the file size
+"
+"                        For more info on setting up perl interface
+"                        :help perl-using or :help perl-dynamic
+"
+"               Writing large Xref Databases:
+"                   CCTree can use external utilities to write extremely large files beyond
+"               VimScripts capabilities. It requires the use of an external tool that can
+"               join text files (i.e., 'cat' in unix). This utility is triggered if the size
+"               of the file being written exceeds g:CCTreeDbFileMaxSize (40 Mb or as configured)
+"
+"               The join utility command is configured by default as follows:
+"               let CCTreeJoinProgCmd = 'PROG_JOIN JOIN_OPT IN_FILES > OUT_FILE'
+"
+"               let  g:CCTreeJoinProg = 'cat'           " PROG_JOIN
+"               let  g:CCTreeJoinProgOpts = ""          " JOIN_OPT
+"
+"
+"  }}}
+"  {{{ Limitations:
+"           Basic Symbol Processing:
+"               The accuracy of the call-tree will only be as good as the cscope
+"           database generation.
+"               NOTE: Different flavors of Cscope have some known
+"                 limitations due to the lexical analysis engine. This results
+"                 in incorrectly identified function blocks, etc.
+"           Enhanced Symbol Processing:
+"               (1) Cscope does not mark-up nameless enums correctly; hence,
+"               CCTree cannot recognize nameless enum symbols.
+"  }}}
+"  {{{ History:
+"           Version 1.51: May 18, 2011
+"                 1. Robust error reporting when external (split/cat) utils fail
+"           Version 1.50: May 6, 2011
+"                 1. Support cross-referencing of global variables, macros,
+"                    enums, and typedefs.
+"           Version 1.40: April 22, 2011
+"                 1. Maintain order of functions called during forward tracing
+"           Version 1.39: April 18, 2011
+"                 1. Use +Conceal feature for highlighting (only Vim 7.3)
+"           Version 1.33: April 5, 2011
+"                 1. Load and trace CCTree native XRefDb directly from disk
+"                 2. Fix AppendDB command when 'ignorecase' is set
+"           Version 1.26: March 28, 2011
+"                 1. Fix macro cross-referencing limitation
+"                 2. Correct native xref file format
+"           Version 1.21: March 21, 2011
+"                 1. Support serialization of loaded
+"                           cscope databases (for faster loading)
+"           Version 1.07: March 09, 2011
+"                 1. Fix new keymaps incorrectly applied to buffer
+"                 2. CCTreeOptsToggle command for toggling options
+"
+"           Version 1.04: March 06, 2011
+"                 1. Customization for key mappings
+"                 2. Dynamic configuration of UI variables
+"                 3. Folding long call-trees to show current path dynamically
+"
+"           Version 1.01: March 04, 2011
+"                 1. Make UTF-8 symbols for tree optional
+"
+"           Version 1.00: March 02, 2011
+"                 1. Staging release for upcoming features
+"                    - Complete refactoring of code to take
+"                           advantage of VimScript's OO features
+"                 2. Faster decompression of symbols
+"                 3. Display related changes
+"                    - Use of unicode symbols for tree
+"                 4. Bugfixes related to multi-database loading
+"
+"            Version 0.90: February 18, 2011
+"                  1. Support for large databases using external split utility or perl
+"                     interface
+"
+"           Version 0.85: February 9, 2011
+"                 1. Significant increase in database loading and decompression speeds
+"
+"           Version 0.80: February 4, 2011
+"                 1. Reduce memory usage by removing unused xref symbols
+"
+"           Version 0.75: June 23, 2010
+"                     1. Support for saving CCTree preview window; multiple
+"                        CCTree windows can now be open
+"
+"          Version 0.71: May 11, 2010
+"                     1. Fix script bug
+
+"           Version 0.70: May 8, 2010
+"                     1. Functionality to load multiple cscope databases
+"
+"           Version 0.65: July 12, 2009
+"                     1. Toggle preview window
+"
+"           Version 0.61: December 24, 2008
+"                 1. Fixed bug when processing include files
+"                 2. Remove 'set ruler' option
+"
+"           Version 0.60: November 26, 2008
+"                 1. Added support for source-file dependency tree
+"
+"           Version 0.50: October 17, 2008
+"                 1. Optimizations for compact memory foot-print and
+"                    improved compressed-database load speeds
+"
+"           Version 0.41: October 6, 2008
+"                  1. Minor fix: Compressed cscope databases will load
+"                  incorrectly if encoding is not 8-bit
+"
+"           Version 0.4: September 28, 2008
+"                  1. Rewrite of "tree-display" code
+"                  2. New syntax hightlighting
+"                  3. Dynamic highlighting for call-trees
+"                  4. Support for new window modes (vertical, horizontal)
+"                  5. New display format option for compact or wide call-trees
+"                  NOTE: defaults for tree-orientation set to vertical
+"
+"           Version 0.3:
+"               September 21, 2008
+"                 1. Support compressed cscope databases
+"                 2. Display window related bugs fixed
+"                 3. More intuitive display and folding capabilities
+"
+"           Version 0.2:
+"               September 12, 2008
+"               (Patches from Yegappan Lakshmanan, thanks!)
+"                 1. Support for using the plugin in Vi-compatible mode.
+"                 2. Filtering out unwanted lines before processing the db.
+"                 3. Command-line completion for the commands.
+"                 4. Using the cscope db from any directory.
+"
+"           Version 0.1:
+"                August 31,2008
+"                 1. Cross-referencing support for only functions and macros
+"                    Functions inside macro definitions will be incorrectly
+"                    attributed to the top level calling function
+"
+"   }}}
+"   {{{ Thanks:
+"
+"    Qaiser Durrani                 (ver 1.51 -- Reporting issues with SunOS)
+"    Ben Fritz                      (ver 1.39 -- Suggestion/Testing for conceal feature)
+"    Ben Fritz                      (ver 1.26 -- Bug report)
+"    Frank Chang                    (ver 1.0x -- testing/UI enhancement ideas/bug fixes)
+"    Arun Chaganty/Timo Tiefel            (Ver 0.60 -- bug report)
+"    Michael Wookey                 (Ver 0.4 -- Testing/bug report/patches)
+"    Yegappan Lakshmanan            (Ver 0.2 -- Patches)
+"
+"    The Vim Community, ofcourse :)
+"=============================================================================
+"    }}}
+
+" {{{ Init
+if !exists('loaded_cctree') && v:version >= 700
+  " First time loading the cctree plugin
+  let loaded_cctree = 1
+else
+  "finish
+endif
+
+" Line continuation used here
+let s:cpo_save = &cpoptions
+set cpoptions&vim
+
+" Trick to get the current script ID
+map <SID>xx <SID>xx
+let s:sid = substitute(maparg('<SID>xx'), '<SNR>\(\d\+_\)xx$', '\1', '')
+unmap <SID>xx
+"}}}
+" {{{ Global variables; Modify in .vimrc to modify default behavior
+" {{{General
+if !exists('CCTreeCscopeDb')
+    let CCTreeCscopeDb = "cscope.out"
+endif
+" revisit
+if !exists('CCTreeDb')
+    let CCTreeDb = "cctree.out"
+endif
+if !exists('CCTreeRecursiveDepth')
+    let CCTreeRecursiveDepth = 3
+endif
+if !exists('CCTreeMinVisibleDepth')
+    let CCTreeMinVisibleDepth = 3
+endif
+if !exists('CCTreeEnhancedSymbolProcessing')
+    let CCTreeEnhancedSymbolProcessing = 0
+endif
+" }}}
+" {{{ Custom user-key mappings
+if !exists('CCTreeKeyTraceForwardTree')
+    let g:CCTreeKeyTraceForwardTree = '<C-\>>'
+endif
+if !exists('CCTreeKeyTraceReverseTree')
+    let g:CCTreeKeyTraceReverseTree = '<C-\><'
+endif
+if !exists('CCTreeKeyHilightTree')
+    let g:CCTreeKeyHilightTree = '<C-l>'        " Static highlighting
+endif
+if !exists('CCTreeKeySaveWindow ')
+    let g:CCTreeKeySaveWindow = '<C-\>y'
+endif
+if !exists('CCTreeKeyToggleWindow ')
+    let g:CCTreeKeyToggleWindow = '<C-\>w'
+endif
+if !exists('CCTreeKeyCompressTree ')
+    let g:CCTreeKeyCompressTree = 'zs'     " Compress call-tree
+endif
+if !exists('CCTreeKeyDepthPlus')
+    let g:CCTreeKeyDepthPlus = '<C-\>='
+endif
+if !exists('CCTreeKeyDepthMinus')
+    let g:CCTreeKeyDepthMinus = '<C-\>-'
+endif
+" }}}
+" {{{ CCTree UI settings
+if !exists('CCTreeOrientation')
+    let CCTreeOrientation = "topleft"
+endif
+if !exists('CCTreeWindowVertical')
+    let CCTreeWindowVertical = 1
+endif
+if !exists('CCTreeWindowWidth')
+    " -1 is auto select best width
+    let CCTreeWindowWidth = -1
+endif
+if !exists('CCTreeWindowMinWidth')
+    let CCTreeWindowMinWidth = 25
+endif
+if !exists('CCTreeWindowHeight')
+    let CCTreeWindowHeight = -1
+endif
+if !exists('CCTreeDisplayMode')
+    let CCTreeDisplayMode = 1
+endif
+if !exists('CCTreeHilightCallTree')
+    let CCTreeHilightCallTree = 1
+endif
+" }}}
+" {{{ Split prog
+if !exists('CCTreeSplitProgCmd')
+    let CCTreeSplitProgCmd = 'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'
+endif
+
+if !exists('CCTreeSplitProg')
+    "PROG_SPLIT
+    let CCTreeSplitProg = 'split'
+endif
+
+if !exists('CCTreeSplitProgOption')
+    "SPLIT_OPT
+    let CCTreeSplitProgOption = '-C'
+endif
+
+if !exists('CCTreeDbFileSplitLines')
+    " if SPLIT_OPT is -l
+    " If split program does not support -C, then this parameter must be set to
+    " the number of lines in the split files
+    let CCTreeDbFileSplitLines = -1
+endif
+
+if !exists('CCTreeSplitProgCmd')
+    let CCTreeSplitProgCmd = 'PROG_SPLIT SPLIT_OPT SPLIT_SIZE IN_FILE OUT_FILE_PREFIX'
+endif
+
+if !exists('CCTreeDbFileMaxSize')
+    " if SPLIT_OPT is -C
+    let CCTreeDbFileMaxSize = 40000000 "40 Mbytes
+endif
+
+" }}}
+" {{{ Join/Cat prog
+if !exists('CCTreeJoinProgCmd')
+    let CCTreeJoinProgCmd = 'PROG_JOIN JOIN_OPT IN_FILES > OUT_FILE'
+endif
+
+if !exists('CCTreeJoinProg')
+    "PROG_JOIN
+    let CCTreeJoinProg = 'cat'
+endif
+
+if !exists('CCTreeJoinProgOpts')
+    let CCTreeJoinProgOpts = ""
+endif
+" }}}
+" {{{ Misc (perl)
+if !exists('CCTreeUsePerl')
+    " Disabled by default
+    let CCTreeUsePerl = 0
+if 0        " Auto-detect perl interface (Experimental code)
+    if has('perl)
+perl << PERL_EOF
+        VIM::DoCommand("let CCTreeUsePerl = 1");
+PERL_EOF
+    endif
+endif
+endif
+
+if has('conceal')
+    let s:CCTreeUseConceal = 1
+else
+    let s:CCTreeUseConceal = 0
+endif
+
+if !exists('CCTreeUseUTF8Symbols')
+    let CCTreeUseUTF8Symbols = 0
+endif
+" }}}
+" }}}
+" {{{ Plugin related local variables
+let s:pluginname = 'CCTree'
+let s:windowtitle = 'CCTree-View'
+let s:windowsavetitle = 'CCTree-View-Copy'
+
+let s:DBClasses = { 'cscopeid': 'Cscope', 'cctreexref' : 'CCTree XRef'}
+let s:DBStorage = { 'memory': 'Memory', 'disk' : 'Disk'}
+
+" }}}
+" {{{ Turn on/off debugs
+let s:tag_debug=0
+
+" Use the Decho plugin for debugging
+function! DBGecho(...)
+    if s:tag_debug
+        Decho(a:000)
+    endif
+endfunction
+
+function! DBGredir(...)
+    if s:tag_debug
+        Decho(a:000)
+    endif
+endfunction
+
+function! Pause()
+    call input("sasasD", "asdads")
+endfunction
+" }}}
+" {{{ Progress bar (generic, numeric, rolling)
+let s:GenericProgressBar= {
+                \ 'depth': 0,
+                \ 'depthChar': '',
+                \ 'currentChar': 0,
+                \ 'updateTime': 0,
+                \ 'rangeChars': [],
+                \ 'formatStr' : '',
+                \ 'units' : ''
+                \ }
+
+function! s:GenericProgressBar.mCreate(rangechars, depthchar, fmtStr)
+    let pbr = deepcopy(s:GenericProgressBar)
+    unlet pbr.mCreate
+
+    let pbr.rangeChars = a:rangechars
+    let pbr.depthChar = a:depthchar
+    let pbr.formatStr = a:fmtStr
+
+    return pbr
+endfunction
+
+function! s:GenericProgressBar.mSetDepth(val) dict
+    let self.depth = a:val
+endfunction
+
+function! s:GenericProgressBar.mUpdate() dict
+    let staticchars = repeat(self.depthChar, self.depth)
+    let displayStr = substitute(self.formatStr, "\@PROGRESS\@",
+                       \ staticchars . self.rangeChars[self.currentChar], "")
+    call s:StatusLine.mSetExtraInfo(displayStr)
+endfunction
+
+function! s:GenericProgressBar.mDone()
+        call s:StatusLine.mSetExtraInfo("")
+endfunction
+
+let s:ProgressBarRoll = {
+                        \ 'updateTime' : 0,
+                        \ 'curTime' : 0
+                        \}
+
+function! s:ProgressBarRoll.mCreate(rollchars, depthChar) dict
+    let gpbr = s:GenericProgressBar.mCreate(a:rollchars, a:depthChar, "\@PROGRESS\@")
+    let pbr = extend(gpbr, deepcopy(s:ProgressBarRoll))
+    unlet pbr.mCreate
+
+    let pbr.curTime = localtime()
+
+    return pbr
+endfunction
+
+function! s:ProgressBarRoll.mTick(count) dict
+    if (localtime() - self.curTime) > self.updateTime
+        let self.currentChar += 1
+        if self.currentChar == len(self.rangeChars)
+            let self.currentChar = 0
+        endif
+        let self.curTime = localtime()
+        call self.mUpdate()
+    endif
+endfunction
+
+let s:ProgressBarNumeric = {
+                \ 'progress1current' : 0,
+                \ 'progressmax' : 0,
+                \ 'progress1percent' : 0,
+                \ 'progresspercent' : 0,
+                \}
+
+function! s:ProgressBarNumeric.mCreate(maxcount, unit) dict
+        let gpbr = s:GenericProgressBar.mCreate(range(0,200), '',
+            \ "Processing \@PROGRESS\@\%, total ". a:maxcount . " " . a:unit)
+        let progressbar = extend(gpbr, deepcopy(s:ProgressBarNumeric))
+        unlet progressbar.mCreate
+
+        let progressbar.progressmax = a:maxcount
+        let progressbar.progress1percent = a:maxcount/100
+
+        let progressbar.units = a:unit
+
+        return progressbar
+endfunction
+
+
+function! s:ProgressBarNumeric.mTick(count) dict
+        let self.progress1current += a:count
+        if self.progress1percent <= self.progress1current
+            let tmp =  (self.progress1current/self.progress1percent)
+            let self.progresspercent += tmp
+            let self.progress1current -= tmp * self.progress1percent
+            let self.currentChar += 1
+            call self.mUpdate()
+        endif
+endfunction
+
+" }}}
+" {{{ Status line
+let s:StatusLine = {
+                    \ 'symlastprogress' : 0,
+                    \ 'symprogress' : 0,
+                    \ 'cursym' : 0,
+                    \ 'savedStatusLine' : '',
+                    \ 'statusextra' : '',
+                    \ 'local':0
+                    \}
+
+function! s:StatusLine.mInit() dict
+    let self.savedStatusLine = &l:statusline
+    setlocal statusline=%{CCTreeStatusLine()}
+endfunction
+
+function! s:StatusLine.mRestore() dict
+    let self.currentstatus = ''
+    let self.statusextra = ''
+
+    let &l:statusline = s:StatusLine.savedStatusLine
+    redrawstatus
+endfunction
+
+function! s:StatusLine.mSetInfo(msg) dict
+    let s:StatusLine.currentstatus = a:msg
+    redrawstatus
+endfunction
+
+function! s:StatusLine.mSetExtraInfo(msg) dict
+    let s:StatusLine.statusextra = a:msg
+    redrawstatus
+endfunction
+
+function! CCTreeStatusLine()
+    return   s:pluginname. " ".
+           \ s:StatusLine.currentstatus . " -- ".
+           \ s:StatusLine.statusextra
+endfunction
+"}}}
+" {{{ Shell command interface
+
+let s:ShellCmds = {'shellOutput': ''}
+
+function! s:ShellCmds.mSplit(inFile, outFile)
+        let cmdEx = substitute(g:CCTreeSplitProgCmd, "PROG_SPLIT", g:CCTreeSplitProg,"")
+        let cmdEx = substitute(cmdEx, "SPLIT_OPT", g:CCTreeSplitProgOption,"")
+        if g:CCTreeDbFileSplitLines != -1
+                let cmdEx = substitute(cmdEx, "SPLIT_SIZE", g:CCTreeDbFileSplitLines,"")
+        else
+                let cmdEx = substitute(cmdEx, "SPLIT_SIZE", g:CCTreeDbFileMaxSize,"")
+        endif
+        let cmdEx = substitute(cmdEx, "IN_FILE", a:inFile,"")
+        let cmdEx = substitute(cmdEx, "OUT_FILE_PREFIX", a:outFile,"")
+
+        return cmdEx
+endfunction
+
+function! s:ShellCmds.mJoin(inFileList, outFile)
+        let cmdEx = substitute(g:CCTreeJoinProgCmd, "PROG_JOIN", g:CCTreeJoinProg,"")
+        let cmdEx = substitute(cmdEx, "JOIN_OPT", g:CCTreeJoinProgOpts,"")
+        let cmdEx = substitute(cmdEx, "IN_FILES", a:inFileList,"")
+        let cmdEx = substitute(cmdEx, "OUT_FILE", a:outFile,"")
+
+        return cmdEx
+endfunction
+
+function! s:ShellCmds.mExec(cmd)
+    let s:shellOutput= system(a:cmd)
+    if s:shellOutput != ''
+         " Failed
+         return s:CCTreeRC.Error
+    endif
+    return s:CCTreeRC.Success
+endfunction
+
+" }}}
+
+" {{{ Virtual file interface
+let s:vFile = {}
+
+function! s:vFile.mCreate(fname, mode)
+    if a:mode == 'r'
+        return s:vFileR.mCreate(a:fname)
+    elseif a:mode == 'w'
+        return s:vFileW.mCreate(a:fname)
+    endif
+    return -1
+endfunction
+
+let s:vFileW = {
+            \ 'splitfiles' : [],
+            \ 'totSplits' : 0,
+            \ 'lines' : [],
+            \ 'fileSize' : 0
+            \}
+
+function! s:vFileW.mCreate(fname)  dict
+        let vfile =  deepcopy(s:vFileW)
+        unlet vfile.mCreate
+        let vfile.link = a:fname
+
+        return vfile
+endfunction
+
+function! s:vFileW.mCreateSplit()  dict
+    " first split, create name
+    if self.totSplits == 0
+        let self.tlink =  tempname()
+    endif
+    let fname = self.tlink .'_'. self.totSplits
+    call writefile(self.lines, fname)
+    call add(self.splitfiles, fname)
+    let self.lines = []
+    let self.totSplits += 1
+endfunction
+
+function! s:vFileW.mTestForSplit()  dict
+    if self.fileSize > g:CCTreeDbFileMaxSize
+        call self.mCreateSplit()
+    endif
+endfunction
+
+function! s:vFileW.mAddFileSize(size)  dict
+    let self.fileSize += a:size
+endfunction
+
+function! s:vFileW.mWriteList(linelist)  dict
+    call extend(self.lines, a:linelist)
+    call self.mTestForSplit()
+endfunction
+
+function! s:vFileW.mWriteLine(line)  dict
+    call add(self.lines, a:line)
+    call self.mAddFileSize(len(a:line))
+    call self.mTestForSplit()
+endfunction
+
+function! s:vFileW.mClose()  dict
+    if self.totSplits == 0
+        call writefile(self.lines, self.link)
+    else
+        " force remaining lines into a new split
+        call self.mCreateSplit()
+        " now join all of them
+        let filelist = join(self.splitfiles, " ")
+        let cmdEx = s:ShellCmds.mJoin(filelist, self.link)
+        if s:ShellCmds.mExec(cmdEx) != s:CCTreeRC.Success
+            let msg =  s:shellOutput ."Shell command: ".cmdEx. " failed!".
+                        \ " Refer help to setup split/join utils."
+            call s:CCTreeUtils.mWarningPrompt(msg)
+        endif
+    endif
+    for afile in self.splitfiles
+       call delete(afile)
+    endfor
+    return 0
+endfunction
+
+let s:vFileR = {
+            \ 'splitfiles' : [],
+            \ 'currentSplitIdx' : 0,
+            \ 'totSplits' : 0,
+            \ 'lines' : [],
+            \ 'valid' : 0,
+            \ 'mode' : ""
+            \}
+
+
+function! s:vFileR.mIsLargeFile()  dict
+        if (getfsize(self.link) > g:CCTreeDbFileMaxSize)
+                return 1
+        endif
+        return 0
+endfunction
+
+function! s:vFileR.mCreate(fname)  dict
+        let vfile =  deepcopy(s:vFileR)
+        unlet vfile.mCreate
+        let vfile.link = a:fname
+        let vfile.valid = filereadable(a:fname)
+        let vfile.size = getfsize(a:fname)
+
+        return vfile
+endfunction
+
+function! s:vFileR.mOpen()  dict
+        if self.mode == 'w'
+            " no need to do anything
+            return 0
+        endif
+
+        if self.mIsLargeFile() == 0
+                "little trick to keep interface uniform when we don't split
+                call add(self.splitfiles, self.link)
+                let self.totSplits = 1
+        else
+                let tmpDb = tempname()
+                let cmdEx = s:ShellCmds.mSplit(self.link, tmpDb)
+
+                if s:ShellCmds.mExec(cmdEx) != s:CCTreeRC.Success
+                     let msg =  s:shellOutput ."Shell command: ".cmdEx. " failed!".
+                             \ " Refer help to setup split/join utils."
+                     call s:CCTreeUtils.mWarningPrompt(msg)
+                     return -1
+                else
+                     let self.splitfiles = split(expand(tmpDb."*"), "\n")
+                endif
+                if empty(self.splitfiles)
+                     return -1
+                endif
+        endif
+        let self.totSplits = len(self.splitfiles)
+        return 0
+endfunction
+
+function! s:vFileR.mRead()  dict
+        if (self.currentSplitIdx >= len(self.splitfiles))
+                " out of bounds
+                return -1
+        endif
+        let self.lines = readfile(self.splitfiles[self.currentSplitIdx])
+        let self.currentSplitIdx += 1
+        return 0
+endfunction
+
+function! s:vFileR.mRewind()  dict
+        let self.currentSplitIdx = 0
+        let self.lines = []
+endfunction
+
+
+function! s:vFileR.mClose()  dict
+        if self.totSplits == 1
+            return
+        endif
+        for afile in self.splitfiles
+           call delete(afile)
+        endfor
+endfunction
+"}}}
+" {{{Stop watch
+let s:StopWatch = {
+                        \ 'text' : "(no reltime feature)",
+                          \}
+
+function! s:StopWatch.mCreate()        dict
+    let stopWatch = deepcopy(s:StopWatch)
+    unlet stopWatch.mCreate
+
+    call stopWatch.mReset()
+    return stopWatch
+endfunction
+
+function! s:StopWatch.mReset()        dict
+    if has('reltime')
+        let self.startRTime = reltime()
+    else
+        let self.startRTime = localtime()
+    endif
+endfunction
+
+function! s:StopWatch.mSnapElapsed()  dict
+    if has('reltime')
+        let self.text = reltimestr(reltime(self.startRTime))
+    else
+        let self.text = localtime() - self.startRTime
+    endif
+endfunction
+
+function! s:StopWatch.mGetText()   dict
+        return self.text
+endfunction
+"}}}
+" {{{ Digraph character compression/decompression routines
+
+let s:CharMaps = {
+                    \'savedEncoding' : '',
+                    \'mapkind' : ''
+                    \}
+
+" The encoding needs to be changed to 8-bit, otherwise we can't swap special
+" 8-bit characters; restore after done
+function! s:CharMaps.mInitTranslator() dict
+        if self.mapkind ==  'Alpha'
+            let self.savedEncoding = &encoding
+            let &encoding="latin1"
+        endif
+endfunction
+
+function! s:CharMaps.mDoneTranslator() dict
+        if self.mapkind ==  'Alpha'
+            let &encoding=self.savedEncoding
+        endif
+endfunction
+
+function! s:CharMaps.CrossProduct(seq1, seq2) dict
+    let cpSeq = []
+    for dc1 in range(strlen(a:seq1))
+        for dc2 in range(strlen(a:seq2))
+           call add(cpSeq, a:seq1[dc1].a:seq2[dc2])
+        endfor
+    endfor
+    return cpSeq
+endfunction
+
+let s:TranslateMap = {}
+
+function! s:TranslateMap.mCreate (srcsym, destsym, mapkind, regex) dict
+    let dicttable = extend(deepcopy(s:CharMaps), deepcopy(s:TranslateMap))
+    unlet dicttable.CrossProduct
+
+    let dicttable.mappings = {}
+
+    " map lower
+    let maxsym = min([len(a:srcsym),len (a:destsym)])
+
+    let index = 0
+    while (index < maxsym)
+        let dicttable.mappings[a:srcsym[index]] =  a:destsym[index]
+        let index += 1
+    endwhile
+    " Need mapping lens, we assume it's constant across the board
+    let dicttable.mapsrclen = len(a:srcsym[0])
+    let dicttable.regex = a:regex
+
+
+    if a:mapkind == 'Alpha'
+        let dicttable.mTranslate = dicttable.mTranslateAlpha
+    elseif a:mapkind == 'Numeric'
+        let dicttable.mTranslate = dicttable.mTranslateNumeric
+    endif
+
+    let dicttable.mapkind = a:mapkind
+
+    unlet dicttable.mTranslateNumeric
+    unlet dicttable.mTranslateAlpha
+
+    return dicttable
+endfunction
+
+
+function! s:TranslateMap.mTranslateNumeric(value) dict
+    let index = 0
+    let retval = ""
+
+    " remember to deal with multi-byte characters
+    while index < len(a:value)
+        let char1 = char2nr(a:value[index])
+        if has_key(self.mappings, char1)
+                let newmap = self.mappings[char1]
+        else
+                " take only the first character
+                let newmap = a:value[index]
+        endif
+        let retval .= newmap
+        let index += 1
+    endwhile
+    return retval
+endfunction
+
+function! s:TranslateMap.mTranslateAlpha(value) dict
+    let retval = substitute(a:value, self.regex, '\=self.mappings[submatch(1)]', "g")
+    return retval
+endfunction
+
+function! s:CCTreeGetXRefDbMaps(maptype, mapkind)
+        let dichar1 = ",0123456789"
+        let dichar2 = ",0123456789"
+
+        return s:CCTreeCreateGenericMaps(a:maptype, a:mapkind, dichar1, dichar2)
+endfunction
+
+function! s:CCTreeGetCscopeMaps(maptype, mapkind)
+        let dichar1 = " teisaprnl(of)=c"
+        let dichar2 = " tnerpla"
+
+        return s:CCTreeCreateGenericMaps(a:maptype, a:mapkind, dichar1, dichar2)
+endfunction
+
+
+function! s:CCTreeCreateGenericMaps(maptype, mapkind, dichar1, dichar2)
+        let s:CharMaps.mapkind = a:mapkind
+        call s:CharMaps.mInitTranslator()
+        if a:mapkind == 'Numeric'
+            let ab = map(range(128,255), 'v:val')
+        elseif a:mapkind == 'Alpha'
+            let ab = map(range(128,255), 'nr2char(v:val)')
+        else
+            return {}
+        endif
+        let ac =  s:CharMaps.CrossProduct(a:dichar1, a:dichar2)
+        if a:maptype == 'Compress'
+                let maps = s:TranslateMap.mCreate(ac, ab, a:mapkind,
+                                \'\(['.a:dichar1.']['.a:dichar2.']\)\C')
+        elseif a:maptype == 'Uncompress'
+                let maps = s:TranslateMap.mCreate(ab, ac, a:mapkind,
+                                \'\([\d128-\d255]\)')
+        endif
+        call s:CharMaps.mDoneTranslator()
+        return maps
+endfunction
+" }}}
+" {{{ Unique list filter object
+
+let s:UniqList = {}
+
+function! s:UniqList.mFilterEntries(lstval) dict
+        let valdict = {}
+        let reslist = ''
+        for aval in a:lstval
+            if !has_key(valdict, aval)
+                let valdict[aval] = ''
+                let reslist .= (aval . ",")
+            endif
+        endfor
+        return reslist
+endfunction
+
+let s:CCTreeUniqListFilter = deepcopy(s:UniqList)
+function! s:CCTreeMakeCommaListUnique(clist)
+        let entries = split(a:clist, ",")
+        if len(entries) > 0
+            return s:CCTreeUniqListFilter.mFilterEntries(entries)
+        endif
+        return ""
+endfunction
+" }}}
+" {{{ Buffer/Window
+func! s:FindOpenBuffer(filename)
+    let bnrHigh = bufnr("$")
+    "tabpagebuflist(tabpagenr())
+
+    for bufnrs in range(1, bnrHigh)
+        if (bufexists(bufnrs) == 1 && bufname(bufnrs) == a:filename && bufloaded(bufnrs) != 0 )
+            return bufnrs
+        endif
+    endfor
+    " Could not find the buffer
+    return 0
+endfunction
+
+func! s:FindOpenWindow(filename)
+    let bufnr = s:FindOpenBuffer(a:filename)
+    if (bufnr > 0)
+       let newWinnr = bufwinnr(bufnr)
+       if newWinnr != -1
+               exec newWinnr.'wincmd w'
+               return 1
+       endif
+    endif
+    " Could not find the buffer
+    return 0
+endfunction
+" }}}
+" {{{ Utils library
+
+let s:Utils = {}
+
+" Use this function to determine the correct "g" flag
+" for substitution
+function! s:Utils.mGetSearchFlag(gvalue)
+    let ret = (!a:gvalue)* (&gdefault) + (!&gdefault)*(a:gvalue)
+    if ret == 1
+        return 'g'
+    endif
+    return ''
+endfunc
+
+" Strlen works for multibyte characters
+function! s:Utils.mStrlenEx(val)
+    return strlen(substitute(a:val, ".", "x", "g"))
+endfunc
+" }}}
+" {{{ Generic db loader interface
+let s:GenericDbLdr = {
+        \ 'fDBName' : '',
+        \ 'class' : 'Generic',
+        \ }
+
+function! s:GenericDbLdr.mCreate(fname) dict
+    let gdb = deepcopy(s:GenericDbLdr)
+    unlet gdb.mCreate
+    let gdb.fDBName = a:fname
+
+    if !filereadable(a:fname)
+        return s:CCTreeRC.Error
+    endif
+
+    return gdb
+endfunction
+
+function! s:GenericDbLdr.mParseDbHeader(gRdr)
+    let header = readfile(self.fDBName, "", a:gRdr.headerLines)
+    return a:gRdr.mParseDbHeader(header)
+endfunction
+
+let s:XRefMemDbLdr = {
+                     \ 'class' : s:DBStorage.memory
+                     \}
+
+function! s:XRefMemDbLdr.mCreate(fname) dict
+    let gdb = s:GenericDbLdr.mCreate(a:fname)
+    if type(gdb) != type({})
+        return gdb
+    endif
+    let mdb = extend(gdb, deepcopy(s:XRefMemDbLdr))
+    unlet mdb.mCreate
+
+    return mdb
+endfunction
+
+if has('perl') && g:CCTreeUsePerl == 1
+" Perl function
+function! s:XRefMemDbLdr.mLoadFileIntoXRefDb(xRefDb, gRdr)  dict
+    let stage = 1
+    for afltr in a:gRdr.opts
+        let stageidxstr = 'Stage ('.stage.'/'.len(a:gRdr.opts).') '
+        call s:StatusLine.mSetInfo(stageidxstr. ': (PERL) Loading database ')
+        call a:gRdr.mProcessingStateInit()
+        let pBar = s:ProgressBarNumeric.mCreate(getfsize(self.fDBName), "bytes")
+        echomsg 'filtering '. afltr
+perl << PERL_EOF
+    #use strict;
+    #use warnings FATAL => 'all';
+    #use warnings NONFATAL => 'redefine';
+
+    my $filebytes = 0;
+    my $filterpat = VIM::Eval("afltr");
+
+    open (CSCOPEDB, VIM::Eval("self.fDBName")) or die "File trouble!";
+    #VIM::DoCommand("echomsg '".$filterpat."'");
+
+    while (<CSCOPEDB>) {
+        $filebytes += length($_);
+        chomp($_);
+
+        if ($_ !~ $filterpat) {
+                next;
+        }
+        VIM::DoCommand("call pBar.mTick(".$filebytes.")");
+        $filebytes = 0;
+        VIM::DoCommand("call a:gRdr.mProcessSymbol(a:xRefDb, '".$_."')");
+    }
+    VIM::DoCommand("call pBar.mDone()");
+    close(CSCOPEDB);
+PERL_EOF
+        call a:gRdr.mProcessingStateDone()
+        let stage += 1
+    endfor
+endfunction
+else
+" Native Vim function
+function! s:XRefMemDbLdr.mLoadFileIntoXRefDb(xRefDb, gRdr) dict
+        let vDbFile = s:vFile.mCreate(self.fDBName, "r")
+        if vDbFile.valid == 0
+            return -1
+        endif
+        if vDbFile.mIsLargeFile() == 1
+                call s:StatusLine.mSetExtraInfo('Database '
+                        \.' >'.g:CCTreeDbFileMaxSize .' bytes. Splitting '.
+                        \'into smaller chunks... (this may take some time)')
+        endif
+        try
+                if vDbFile.mOpen() == 0
+                        call self.mReadFileIntoXRefDb(vDbFile,
+                                                \ a:xRefDb,
+                                                \ a:gRdr)
+                endif
+        finally
+                call vDbFile.mClose()
+        endtry
+endfunction
+endif
+
+function! s:XRefMemDbLdr.mReadFileIntoXRefDb(vDbFile, xrefdb, gRdr)
+    let stage = 0
+    for afltr in a:gRdr.opts
+        call a:vDbFile.mRewind()
+        let stage += 1
+        call a:gRdr.mProcessingStateInit()
+        while 1 == 1
+            if a:vDbFile.mRead() == -1
+                break
+            endif
+            let stageidxstr = 'Stage ('.stage.'/'.len(a:gRdr.opts).') '
+            let fileidxstr = '('.a:vDbFile.currentSplitIdx.'/'.a:vDbFile.totSplits.') '
+            call s:StatusLine.mSetInfo(stageidxstr. ': Reading database chunk '.fileidxstr)
+            " Filter-out lines that doesn't have relevant information
+            let plist = a:gRdr.mReadLinesFromFile(a:vDbFile, afltr)
+            let pBar = s:ProgressBarNumeric.mCreate(len(plist), "items")
+            call s:StatusLine.mSetInfo(stageidxstr.': Analyzing database chunk '.fileidxstr)
+            call self.mProcessListIntoXrefDb(plist, a:gRdr, a:xrefdb, pBar)
+            call pBar.mDone()
+            " clean-up memory
+            call garbagecollect()
+        endwhile
+        call a:gRdr.mProcessingStateDone()
+    endfor
+endfunction
+
+function! s:XRefMemDbLdr.mProcessListIntoXrefDb(symbols, rdr, xrefdb, pbar)
+    for a in a:symbols
+        call a:pbar.mTick(1)
+        call a:rdr.mProcessSymbol(a:xrefdb, a)
+    endfor
+endfunction
+
+function! s:GenericDbLdr.mParseDbHeader(gRdr)
+    let header = readfile(self.fDBName, "", a:gRdr.headerLines)
+    return a:gRdr.mParseDbHeader(header)
+endfunction
+
+" }}}
+" {{{ Generic Disk DB Ldr
+let s:XRefDiskDbLdr = {
+        \ 'class' : s:DBStorage.disk
+        \ }
+
+function! s:XRefDiskDbLdr.mCreate(fname) dict
+    let gdb = s:GenericDbLdr.mCreate(a:fname)
+    if type(gdb) != type({})
+        return gdb
+    endif
+    let mdb = extend(gdb, deepcopy(s:XRefDiskDbLdr))
+    unlet mdb.mCreate
+
+    return mdb
+endfunction
+
+function! s:XRefDiskDbLdr.mLoadFileIntoXRefDb(xRefDb, gRdr) dict
+    call a:xRefDb.mSetLink(self.fDBName)
+endfunction
+
+"}}}
+" {{{ Xref disk DB
+let s:XRefDiskDb = {
+                        \ 'link':'',
+                        \ 'savedTags': '',
+                        \ 'class' : s:DBStorage.disk
+                        \ }
+
+function! s:XRefDiskDb.mCreate() dict
+       let fdb = deepcopy(s:XRefDiskDb)
+       unlet fdb.mCreate
+       let fdb.maps = s:CCTreeGetXRefDbMaps('Uncompress', 'Numeric')
+
+       return fdb
+endfunction
+
+function! s:XRefDiskDb.mSetLink(filedb) dict
+       let self.link = a:filedb
+        " revisit, do parse header here
+endfunction
+
+function! s:XRefDiskDb.mClear() dict
+        " do nothing
+endfunction
+
+function! s:XRefDiskDb.mInitState() dict
+        let self.savedTags = &tags
+        let &tags = self.link
+endfunction
+
+function! s:XRefDiskDb.mRestoreState() dict
+        let &tags = self.savedTags
+endfunction
+
+function! s:XRefDiskDb.mDecodeTagEntry(tagentry) dict
+        let itms = split(a:tagentry.name, "#")
+        let a:tagentry.n = itms[1]
+        let a:tagentry.idx = itms[0]
+
+        " Vim taglist() drops empty fields, so need to protect
+        if has_key(a:tagentry, 'c')
+            let a:tagentry.c = self.maps.mTranslate(a:tagentry.c)
+        else
+            let a:tagentry.c = ''
+        endif
+        if has_key(a:tagentry, 'p')
+            let a:tagentry.p = self.maps.mTranslate(a:tagentry.p)
+        else
+            let a:tagentry.p = ''
+        endif
+
+        return a:tagentry
+endfunction
+
+function! s:XRefDiskDb.mGetSymbolIdFromName(symname) dict
+        let symtagline = taglist('\#'.a:symname.'$')
+        let g:xyz = symtagline
+        let asym = self.mDecodeTagEntry(symtagline[0])
+        return asym.idx
+endfunction
+
+function! s:XRefDiskDb.mGetSymbolFromId(symid) dict
+        let symtagline = taglist('^'.a:symid.'\#')
+        if empty(symtagline)
+            echomsg "Failed to locate ".a:symid
+        else
+            return self.mDecodeTagEntry(symtagline[0])
+        endif
+        return {}
+endfunction
+
+function! s:XRefDiskDb.mGetSymbolIds() dict
+    " illegal
+    let symtaglines = taglist('^.')
+    return keys(self.symidhash)
+endfunction
+
+function! s:XRefDiskDb.mGetSymbolNames(lead) dict
+    if empty(a:lead)
+        let symtaglines = taglist('^.')
+    else
+        let symtaglines = taglist('#'.a:lead)
+    endif
+    let alist = []
+    for atag in symtaglines
+        let acctreesym = self.mDecodeTagEntry(atag)
+        call add(alist, acctreesym.n)
+    endfor
+    return alist
+endfunction
+" }}}
+" {{{ TagFile utils
+let s:CCTreeTagDbRdr = {'class': 'CCTreeXrefDb',
+                    \ 'headerLines' : 4,
+                    \ 'compressed' : 0,
+                    \ 'opts': ['v:val !~ "^[\!]"'],
+                    \ 'perl_opts': "^[^\!]",
+                    \ 'mapPreKeys': {'c':'','p':''},
+                    \ 'mapPostKeys': {'c':'','p':''}
+                    \ }
+
+function! s:CCTreeTagDbRdr.mCreate(fname) dict
+    let cctxdbrdr = deepcopy(s:CCTreeTagDbRdr)
+    unlet cctxdbrdr.mCreate
+
+    return cctxdbrdr
+endfunction
+
+function! s:CCTreeTagDbRdr.mRequirePreProcessing() dict
+    return s:CCTreeRC.False
+endfunction
+
+function! s:CCTreeTagDbRdr.mRequirePostProcessing() dict
+    return s:CCTreeRC.True
+endfunction
+
+function! s:CCTreeTagDbRdr.mRequireCleanup() dict
+    " Clean-up all symbols [never]
+    return s:CCTreeRC.False
+endfunction
+
+function! s:CCTreeTagDbRdr.mGetPreProcessingMaps() dict
+    return s:CCTreeGetXRefDbMaps('Compress', 'Alpha')
+endfunction
+
+function! s:CCTreeTagDbRdr.mGetPostProcessingMaps() dict
+    return s:CCTreeGetXRefDbMaps('Uncompress', 'Alpha')
+endfunction
+
+
+function! s:CCTreeTagDbRdr.mParseDbHeader(hdr) dict
+    " just check line 3 for sanity
+    if a:hdr[2] =~ "CCTree"
+        return s:CCTreeRC.Success
+    endif
+    return s:CCTreeRC.Error
+endfunction
+
+function! s:CCTreeTagDbRdr.mProcessingStateInit() dict
+endfunction
+
+function! s:CCTreeTagDbRdr.mProcessingStateDone() dict
+endfunction
+
+function! s:CCTreeTagDbRdr.mReadLinesFromFile(vdbFile, filtercmds) dict
+    " Hard-coded assumptions here about format for performance
+    if empty(get(a:vdbFile.lines, 0)) != 1 && a:vdbFile.lines[0][0] == "!"
+    " filter out the first few lines starting with "!"
+        call remove(a:vdbFile.lines, 0, self.headerLines-1)
+    endif
+    return a:vdbFile.lines
+endfunction
+
+function! s:CCTreeTagDbRdr.mProcessSymbol(xrefdb, aline) dict
+    let cctreesym = self.mDecodeTagLine(a:aline)
+    call a:xrefdb.mInsertSym(cctreesym.idx, cctreesym)
+    " we really don't need idx any longer
+    unlet cctreesym.idx
+endfunction
+
+function! s:CCTreeTagDbRdr.mDecodeTagLine(tagline) dict
+
+        let items = split(a:tagline, "\t")
+        let newsym = s:CCTreeSym.mCreate("")
+        try
+            let [newsym.idx, newsym.n] = split(items[0], '#')
+        catch
+            echomsg "problem decoding ". a:tagline
+        endtry
+
+        "let newsym.idx = strpart(items[0], 0, idxBr)
+        "let newsym.n =  items[0][ idxBr+1 : -2] "strpart(items[0], idxBr+1, strlen(items[0])-1)
+        if empty(get(items, 3)) != 1
+            let newsym.c = items[3][2:]
+        endif
+        if empty(get(items, 4)) != 1
+            let newsym.p = items[4][2:]
+        endif
+        return newsym
+endfunction
+
+" }}}
+" {{{ Generic Db Serializer
+let s:GenericDbSerializer = {}
+
+function! s:GenericDbSerializer.mCreate(xrefdb) dict
+    let gDbSerializer = deepcopy(s:GenericDbSerializer)
+    let gDbSerializer.xrefdb = a:xrefdb
+    return gDbSerializer
+endfunction
+
+function! s:GenericDbSerializer.mWriteXRefDbToFile(fname,
+                                            \ gWriter) dict
+    call s:StatusLine.mInit()
+    try
+        call s:StatusLine.mSetInfo('Writing XRefDb')
+        let vDbFile = s:vFile.mCreate(a:fname, "w")
+        call vDbFile.mWriteList(a:gWriter.mBuildHeader())
+        call self.mWriteSymsToFile(vDbFile, a:gWriter)
+    finally
+        call vDbFile.mClose()
+        call s:StatusLine.mRestore()
+    endtry
+endfunction
+
+function! s:GenericDbSerializer.mWriteSymsToFile(dstVFile,
+                                            \ gWriter) dict
+    let pBar = s:ProgressBarNumeric.mCreate(self.xrefdb.mGetSymbolCount(),
+                                                    \ "items")
+    call a:gWriter.mInitWriting()
+    " write syms
+    for asymid in sort(self.xrefdb.mGetSymbolIds())
+        let  acctreesym = self.xrefdb.mGetSymbolFromId(asymid)
+        call a:dstVFile.mWriteLine(a:gWriter.mBuildTagLine(acctreesym,
+                        \ asymid))
+        call pBar.mTick(1)
+    endfor
+    call pBar.mDone()
+    call a:gWriter.mDoneWriting()
+endfunction
+" }}}
+" {{{ CCTreeTagDb Writer
+let s:CCTreeTagDbWriter = {}
+
+function! s:CCTreeTagDbWriter.mCreate(tmaps) dict
+    let dbwriter = deepcopy(s:CCTreeTagDbWriter)
+    unlet dbwriter.mCreate
+
+
+    let dbwriter.tmaps = a:tmaps
+    return dbwriter
+endfunction
+
+function! s:CCTreeTagDbWriter.mInitWriting() dict
+    call self.tmaps.mInitTranslator()
+endfunction
+
+function! s:CCTreeTagDbWriter.mDoneWriting() dict
+    call self.tmaps.mDoneTranslator()
+endfunction
+
+function! s:CCTreeTagDbWriter.mBuildHeader() dict
+    let hdr = []
+    call add(hdr, "!_TAG_FILE_FORMAT\t2\t/extended format; --format=1 will not append ;\" to lines/")
+    call add(hdr, "!_TAG_FILE_SORTED\t1\t/0=unsorted, 1=sorted, 2=foldcase/")
+    call add(hdr, "!_TAG_PROGRAM_NAME\t\tCCTree (Vim plugin)//")
+    call add(hdr, "!_TAG_PROGRAM_URL\thttp://vim.sourceforge.net/scripts/script.php?script_id=2368\t/site/")
+    return hdr
+endfunction
+
+
+function! s:CCTreeTagDbWriter.mBuildTagLine(sym, symid) dict
+        let basetag = a:symid .'#'. a:sym.n."\t"."\t"."/^\$/".";\""
+        let cm =  self.tmaps.mTranslate(a:sym.c)
+        let pm =  self.tmaps.mTranslate(a:sym.p)
+
+        let basetag .= "\tc:". self.tmaps.mTranslate(a:sym.c)
+        let basetag .= "\tp:". self.tmaps.mTranslate(a:sym.p)
+
+        return basetag
+endfunction
+" }}}
+" {{{ CCTree constants
+let s:CCTreeRC = {
+                    \ 'Error' : -1,
+                    \ 'True' : 1,
+                    \ 'False' : 0,
+                    \ 'Success' : 2
+                    \ }
+"}}}
+" {{{ CCTree DB Obj
+" Symbol definition
+
+let s:CCTreeSym = {
+                    \'k': "",
+                    \'n': "",
+                    \'c': "",
+                    \'p': ""
+                    \}
+
+function! s:CCTreeSym.mCreate(name, kind)
+    let sym = deepcopy(s:CCTreeSym)
+    unlet sym.mCreate
+    let sym.n = a:name
+    let sym.k = a:kind
+    return sym
+endfunction
+
+
+" }}}
+" {{{ GenericXref, XrefDb
+let s:GenericXRef = {}
+
+function! s:GenericXRef.mCreate(filedb) dict
+       let gxref = deepcopy(s:GenericXRef)
+       return gxref
+endfunction
+
+function! s:GenericXRef.mInitState() dict
+endfunction
+
+function! s:GenericXRef.mRestoreState() dict
+endfunction
+" {{{ XRef Database object
+let s:xRefMemDb = {
+        \ 'symuniqid': 0,
+        \ 'symidhash' : {},
+        \ 'symnamehash' : {},
+        \ 'class' : s:DBStorage.memory
+        \}
+
+
+function s:xRefMemDb.mCreate()   dict
+        let dbObj = deepcopy(s:xRefMemDb)
+        unlet dbObj.mCreate
+
+        return dbObj
+endfunction
+
+function s:xRefMemDb.mInitState()   dict
+endfunction
+
+function s:xRefMemDb.mRestoreState()   dict
+endfunction
+
+function s:xRefMemDb.mClear()   dict
+    let self.symidhash = {}
+    let self.symnamehash = {}
+    let self.symuniqid = 0
+endfunction
+
+function! s:xRefMemDb.mInsertSym(idx, cctreesym)  dict
+    let self.symuniqid = max([self.symuniqid, a:idx])
+    let self.symidhash[a:idx] = a:cctreesym
+    let self.symnamehash[a:cctreesym.n] = a:idx
+endfunction
+
+function! s:xRefMemDb.mRemoveSymById(symidx)  dict
+    call self.mRemoveSymByName(acctreesym.n)
+    call remove(self.symidhash, a:symidx)
+endfunction
+
+function! s:xRefMemDb.mRemoveSymByName(symname)  dict
+    call remove(self.symnamehash, a:symname)
+endfunction
+
+function! s:xRefMemDb.mAddSym(name, kind)    dict
+    if !has_key(self.symnamehash, a:name)
+        let self.symnamehash[a:name] = self.symuniqid
+        let self.symidhash[self.symuniqid] =
+                            \s:CCTreeSym.mCreate(a:name, a:kind)
+        let self.symuniqid += 1
+    endif
+    let asymid = self.symnamehash[a:name]
+    if a:kind != ""
+        let asym = self.symidhash[asymid]
+        let asym.k = a:kind
+    endif
+    return asymid
+endfunction
+
+function! s:xRefMemDb.mMarkXRefSyms(funcentryidx, newfuncidx) dict
+    let self.symidhash[a:funcentryidx]['c'] .= (",". a:newfuncidx)
+    let self.symidhash[a:newfuncidx]['p'] .= (",". a:funcentryidx)
+endfunction
+
+function! s:xRefMemDb.mGetSymbolFromName(symname) dict
+    return self.symidhash[self.symnamehash[a:symname]]
+endfunction
+
+function! s:xRefMemDb.mGetSymbolIdFromName(symname) dict
+    if has_key(self.symnamehash, a:symname)
+        return self.symnamehash[a:symname]
+    else
+        return s:CCTreeRC.Error
+    endif
+endfunction
+
+function! s:xRefMemDb.mGetSymbolFromId(symid) dict
+    return self.symidhash[a:symid]
+endfunction
+
+function! s:xRefMemDb.mGetSymbolIds() dict
+    return keys(self.symidhash)
+endfunction
+
+function! s:xRefMemDb.mGetSymbolNames(lead) dict
+    let syms = keys(self.symnamehash)
+    if empty(a:lead) != 1
+        return filter(syms, 'v:val =~? a:lead')
+    endif
+    return syms
+endfunction
+
+function! s:xRefMemDb.mGetSymbolCount() dict
+    return len(self.symnamehash)
+endfunction
+
+function! s:xRefMemDb.mTranslateSymbols(map, tkeys) dict
+    call a:map.mInitTranslator()
+    let pBar = s:ProgressBarNumeric.mCreate(len(self.symnamehash), "items")
+
+    for asym in keys(self.symnamehash)
+        let idx = self.symnamehash[asym]
+        let val = self.symidhash[idx]
+        if has_key(a:tkeys, 'n')
+            let uncmpname = a:map.mTranslate(asym)
+            if (asym != uncmpname)
+                "Set up new entry
+                let self.symnamehash[uncmpname] = idx
+                " free the old entry
+                call remove(self.symnamehash, asym)
+                " Set uncompressed name
+                let val.n = uncmpname
+            endif
+        endif
+        if has_key(a:tkeys, 'p')
+            let val.p = a:map.mTranslate(val.p)
+        endif
+        if has_key(a:tkeys, 'c')
+            let val.c = a:map.mTranslate(val.c)
+        endif
+        call pBar.mTick(1)
+    endfor
+    call pBar.mDone()
+    call a:map.mDoneTranslator()
+endfunction
+
+function! s:xRefMemDb.mCleanSymbols () dict
+    let pBar = s:ProgressBarNumeric.mCreate(len(self.symnamehash), "items")
+    for asym in keys(self.symnamehash)
+        let idx = self.symnamehash[asym]
+        let val = self.symidhash[idx]
+        if empty(val.p) && empty(val.c)
+            call remove(self.symnamehash, asym)
+            call remove(self.symidhash, idx)
+        else
+            let val.p = s:CCTreeMakeCommaListUnique(val.p)
+            let val.c = s:CCTreeMakeCommaListUnique(val.c)
+        endif
+        call pBar.mTick(1)
+    endfor
+    call pBar.mDone()
+endfunction
+"}}}
+"}}} End of Xref
+" {{{ Tracer
+let s:CallTree = {
+                    \ 'symbol' : ""
+                    \ }
+function! s:CallTree.mCreate(name) dict
+    let ct = deepcopy(s:CallTree)
+    unlet ct.mCreate
+
+    let ct.symbol = a:name
+
+    return ct
+endfunction
+
+function! s:CallTree.mAddChildLink(childTree) dict
+    if !has_key(self, 'childlinks')
+        let self.childlinks = []
+    endif
+    call add(self.childlinks, a:childTree)
+endfunction
+
+let s:XRefTracer = {
+                    \}
+
+function! s:XRefTracer.mCreate(xrefdb) dict
+    let xreftracer = deepcopy(s:XRefTracer)
+    let xreftracer.xrefdb = a:xrefdb
+
+    return xreftracer
+endfunction
+
+function! s:XRefTracer.mInitTracing() dict
+    call self.xrefdb.mInitState()
+endfunction
+
+function! s:XRefTracer.mDoneTracing() dict
+    call self.xrefdb.mRestoreState()
+endfunction
+
+function! s:XRefTracer.mGetSymbolIdXRef(symid, direction) dict
+    let acctreesym = self.xrefdb.mGetSymbolFromId(a:symid)
+    let symidslist = split(
+                    \s:CCTreeMakeCommaListUnique(acctreesym[a:direction]), ",")
+    return symidslist
+endfunction
+
+function! s:XRefTracer.mBuildForSymbol(symid, curdepth, maxdepth,
+                                      \ direction, pbar) dict
+    if (a:curdepth > a:maxdepth)
+        return {}
+    endif
+
+    call a:pbar.mSetDepth(a:curdepth)
+    let asym = self.xrefdb.mGetSymbolFromId(a:symid)
+    " revisit
+    if empty(asym)
+        return {}
+    endif
+
+    let rtree = s:CallTree.mCreate(asym['n'])
+
+    for entry in self.mGetSymbolIdXRef(a:symid, a:direction)
+        call a:pbar.mTick(1)
+        let ctree =
+                \self.mBuildForSymbol(entry, a:curdepth+1, a:maxdepth,
+                                            \a:direction, a:pbar)
+        call rtree.mAddChildLink(ctree)
+    endfor
+    return rtree
+endfunction
+" }}}
+
+" {{{ Cscope Reader
+
+
+let s:CscopeDbRdrState = {
+    \'curfuncidx': -1,
+    \'curfileidx': -1,
+    \'curmacroidx': -1,
+    \'curenumidx': -1,
+    \ }
+
+function! s:CscopeDbRdrState.mCreate() dict
+    return deepcopy(s:CscopeDbRdrState)
+endfunction
+
+let s:CscopeDbRdrSymTags = {
+            \'func'  : '$}',
+            \'macro' : '#\)',
+            \'file' : '@\~',
+            \'enum' : 'em',
+            \'global' : 'g',
+            \'typedef' : 't',
+            \}
+
+let s:CscopeDbSymFilter = ['v:val =~ "^\t[#`$}@\~\)]"']
+let s:CscopeDbSymEnhFilter = ['v:val =~ "^\t[emgt#`$}@~)]"',
+                            \ 'v:val =~ "^\\a\\|^\t[)$}#]"']
+
+let s:CscopeDbSymFilterPerl = ['^\t[\`\#\$\}\@\~\)]']
+let s:CscopeDbSymEnhFilterPerl = ['^\t[\`\#\$\}\@\~\)emgt]',
+                                \ '^[A-Za-z]|^\t[\#\$\}\)]']
+
+let s:CscopeDbRdr = {
+                    \ 'class': 'Cscope',
+                    \ 'headerLines' : 1,
+                    \ 'compressed' : 0,
+                    \ 'opts': [],
+                    \ 'perl_opts': '',
+                    \ 'mapPreKeys': {'n':''},
+                    \ 'mapPostKeys': {'n':''}
+                    \}
+
+function! s:CscopeDbRdr.mCreate(fname, enhanced) dict
+    let csdbrdr = deepcopy(s:CscopeDbRdr)
+    unlet csdbrdr.mCreate
+
+    if a:enhanced == 1
+        if g:CCTreeUsePerl == 1
+            let csdbrdr.opts = s:CscopeDbSymEnhFilterPerl
+        else
+            let csdbrdr.opts = s:CscopeDbSymEnhFilter
+        endif
+    else
+        if g:CCTreeUsePerl == 1
+            let csdbrdr.opts = s:CscopeDbSymFilterPerl
+        else
+            let csdbrdr.opts = s:CscopeDbSymFilter
+        endif
+    endif
+    return csdbrdr
+endfunction
+
+function! s:CscopeDbRdr.mProcessingStateInit() dict
+    let self.iState = s:CscopeDbRdrState.mCreate()
+endfunction
+
+function! s:CscopeDbRdr.mProcessingStateDone() dict
+    " discard state
+    unlet self.iState
+endfunction
+
+function! s:CscopeDbRdr.mReadLinesFromFile(vDbFile, filtercmds) dict
+    return s:CCTreeUtils.mFilter(a:vDbFile.lines, a:filtercmds)
+endfunction
+
+function! s:CscopeDbRdr.mParseDbHeader(dbHeader) dict
+    if a:dbHeader[0] =~ "cscope"
+        if (a:dbHeader[0] !~ "cscope.*\-c")
+            let self.compressed =  s:CCTreeRC.True
+        else
+            let self.compressed =  s:CCTreeRC.False
+        endif
+        return s:CCTreeRC.Success
+    endif
+    return s:CCTreeRC.Error
+endfunction
+
+function! s:CscopeDbRdr.mRequirePreProcessing() dict
+    return (self.compressed == 1)? s:CCTreeRC.True : s:CCTreeRC.False
+endfunction
+
+function! s:CscopeDbRdr.mRequirePostProcessing() dict
+    return (self.compressed == 1)? s:CCTreeRC.True : s:CCTreeRC.False
+endfunction
+
+function! s:CscopeDbRdr.mRequireCleanup() dict
+    " Clean-up all symbols [always]
+    return s:CCTreeRC.True
+endfunction
+
+function! s:CscopeDbRdr.mGetPreProcessingMaps() dict
+    return s:CCTreeGetCscopeMaps('Compress', 'Alpha')
+endfunction
+
+function! s:CscopeDbRdr.mGetPostProcessingMaps() dict
+    return s:CCTreeGetCscopeMaps('Uncompress', 'Alpha')
+endfunction
+
+function! s:CscopeDbRdr.mProcessSymbol(xrefdb, symbol) dict
+    try
+        if a:symbol[0] == "\t"
+            return self.mProcessTaggedSymbol(a:xrefdb, a:symbol)
+        else
+            return self.mProcessUnTaggedSymbol(a:xrefdb, a:symbol)
+        endif
+    catch
+        echomsg 'Problem with '. a:symbol
+    endtry
+endfunction
+
+function! s:CscopeDbRdr.mProcessUnTaggedSymbol(xrefdb, symbol) dict
+       let cursymidx = a:xrefdb.mGetSymbolIdFromName(a:symbol)
+       if cursymidx != s:CCTreeRC.Error
+           if self.iState.curfuncidx != -1
+               call a:xrefdb.mMarkXRefSyms(self.iState.curfuncidx, cursymidx)
+           elseif self.iState.curmacroidx != -1
+               call a:xrefdb.mMarkXRefSyms(self.iState.curmacroidx, cursymidx)
+           endif
+       endif
+endfunction
+
+function! s:CscopeDbRdr.mProcessTaggedSymbol(xrefdb, symbol) dict
+        if self.iState.curmacroidx != -1
+            if a:symbol[1] == "`"
+                call a:xrefdb.mMarkXRefSyms(self.iState.curmacroidx,
+                                \ a:xrefdb.mAddSym(a:symbol[2:], ""))
+            elseif a:symbol[1] == ')'
+                let self.iState.curmacroidx = -1
+            endif
+        elseif self.iState.curfuncidx != -1
+            " inside function
+            if a:symbol[1] == "`"
+                call a:xrefdb.mMarkXRefSyms(self.iState.curfuncidx,
+                                \ a:xrefdb.mAddSym(a:symbol[2:], ""))
+            elseif a:symbol[1] == "}"
+               let self.iState.curfuncidx = -1
+            elseif a:symbol[1] == "#"
+                let self.iState.curmacroidx = a:xrefdb.mAddSym(a:symbol[2:], 'm')
+            endif
+        elseif self.iState.curenumidx != -1
+            if a:symbol[1] == "m"
+                call a:xrefdb.mMarkXRefSyms(self.iState.curenumidx,
+                                \ a:xrefdb.mAddSym(a:symbol[2:], "em"))
+            else
+                " just reprocess the symbol after changing state
+                let self.iState.curenumidx = -1
+                call self.mProcessTaggedSymbol(a:xrefdb, a:symbol)
+            endif
+        elseif a:symbol[1] == "$"
+            let self.iState.curfuncidx = a:xrefdb.mAddSym(a:symbol[2:], "f")
+        elseif a:symbol[1] == "#"
+           let self.iState.curmacroidx = a:xrefdb.mAddSym(a:symbol[2:], "d")
+        elseif a:symbol[1] == "~"
+            call a:xrefdb.mMarkXRefSyms(self.iState.curfileidx,
+                                       \a:xrefdb.mAddSym(a:symbol[3:], "i"))
+        elseif a:symbol[1] == "e"
+           let self.iState.curenumidx = a:xrefdb.mAddSym(a:symbol[2:],  "e")
+        elseif a:symbol[1] == "g"
+            call a:xrefdb.mAddSym(a:symbol[2:], "g")
+        elseif a:symbol[1] == "@"
+            if a:symbol[2] != ""
+                let self.iState.curfileidx =
+                                    \a:xrefdb.mAddSym(a:symbol[2:], "F")
+            endif
+        endif
+endfunction
+
+" }}}
+" {{{ CCTree helper library
+let s:CCTreeUtils = {}
+
+function! s:CCTreeUtils.mDetectDB(class)
+    if a:class == s:DBClasses.cctreexref
+        if filereadable(g:CCTreeDb)
+        return g:CCTreeDb
+        endif
+    elseif a:class == s:DBClasses.cscopeid
+        if filereadable(g:CCTreeCscopeDb)
+            return g:CCTreeCscopeDb
+        endif
+    endif
+    return ''
+endfunction
+
+function! s:CCTreeUtils.mFilter(lines, filtercmd) dict
+        let retlst = []
+        let progr = len(a:lines)/100
+        let pBar = s:ProgressBarNumeric.mCreate(len(a:lines), "items")
+        while len(a:lines) > 0
+                if progr <= len(a:lines)
+                        let tmplist = remove(a:lines, 0, progr)
+                else
+                        let tmplist = remove(a:lines, 0, len(a:lines)-1)
+                endif
+                call filter(tmplist, a:filtercmd)
+                call pBar.mTick(progr)
+                call extend(retlst, tmplist)
+        endwhile
+        call pBar.mDone()
+        return retlst
+endfunction
+
+function! s:CCTreeUtils.mWarningPrompt(msg) dict
+    echohl WarningMsg
+    let a = input(s:pluginname. ": ". a:msg)
+    echohl None
+endfunction
+
+function! s:CCTreeUtils.mWarningMsg(msg) dict
+    echohl WarningMsg
+    echomsg s:pluginname. ": ". a:msg
+    echohl None
+endfunction
+
+function! s:CCTreeUtils.mInfoMsg(msg) dict
+    echohl Title
+    echomsg s:pluginname. ": ". a:msg
+    echohl None
+endfunction
+
+function! s:CCTreeUtils.mWrite(msg) dict
+    echo s:pluginname. ": ". a:msg
+endfunction
+
+" }}}
+" {{{  CCTree DB management
+let s:CCTreeXrefDbEntry = {
+                     \  'type': '',
+                     \  'fname' : '',
+                     \  'fsize' : 0,
+                     \  'fdate' : 0
+                     \}
+
+function! s:CCTreeXrefDbEntry.mCreate(fname, type) dict
+    let xrefdbent = deepcopy(s:CCTreeXrefDbEntry)
+    unlet xrefdbent.mCreate
+
+    let xrefdbent.type = a:type
+    let xrefdbent.fname = simplify(getcwd().'/'.a:fname)
+    let xrefdbent.fsize = getfsize(a:fname)
+    let xrefdbent.fdate = strftime("%c", getftime(a:fname))
+    return xrefdbent
+endfunction
+
+let s:CCTreeDBList = {
+                        \'loadedDBs' : []
+                        \ }
+
+function! s:CCTreeDBList.mCreate() dict
+    let dbList = deepcopy(s:CCTreeDBList)
+    unlet dbList.mCreate
+
+    return dbList
+endfunction
+
+function! s:CCTreeDBList.mShowLoaded() dict
+    let i = 1
+    call s:CCTreeUtils.mWrite(s:pluginname.": List of loaded cscope databases")
+    call s:CCTreeUtils.mWrite("---------------------------------------")
+   for aDBEnt in self.loadedDBs
+        call s:CCTreeUtils.mWrite(i." ".aDBEnt.fname. " ".
+                                    \ " (".aDBEnt.type.") ".
+                                    \ aDBEnt.fsize. " bytes ".
+                                    \ aDBEnt.fdate)
+        let i = i + 1
+   endfor
+endfunction
+
+function! s:CCTreeDBList.mClearAll() dict
+    let self.loadedDBs = []
+endfunction
+
+function! s:CCTreeDBList.mIsEmpty() dict
+    if empty(self.loadedDBs)
+        return s:CCTreeRC.True
+    endif
+    return s:CCTreeRC.False
+endfunction
+
+" Load the cscope db into the global cctree xref db
+function! s:CCTreeDBList.mCreateDbLoaderAndReader(dbName, dbclass, storageclass) dict
+    let dbUser = s:CCTreeCmdLine.mInputDBName('Load', a:dbName, a:dbclass)
+    if dbUser == ''
+        call s:CCTreeUtils.mWarningMsg('Filename required')
+        "User cancel, do nothing
+        return
+    endif
+
+    " Create generic Db loader object
+    if a:storageclass == s:DBStorage.disk
+        let gDbLdr = s:XRefDiskDbLdr.mCreate(dbUser)
+    elseif a:storageclass == s:DBStorage.memory
+        let gDbLdr = s:XRefMemDbLdr.mCreate(dbUser)
+    endif
+
+    if type(gDbLdr) != type({})
+        call s:CCTreeUtils.mWarningMsg(a:dbclass.' database ' . a:dbName .
+            \ ' not found.')
+        return s:CCTreeRC.Error
+    endif
+
+    " Create new DB reader object
+    if a:storageclass == s:DBStorage.memory
+        if a:dbclass == s:DBClasses.cscopeid
+            let gDbRdr = s:CscopeDbRdr.mCreate(dbUser, g:CCTreeEnhancedSymbolProcessing)
+        elseif a:dbclass == s:DBClasses.cctreexref
+            let gDbRdr = s:CCTreeTagDbRdr.mCreate(dbUser)
+        else
+            return s:CCTreeRC.Error
+        endif
+        if gDbLdr.mParseDbHeader(gDbRdr) == s:CCTreeRC.Error
+            call s:CCTreeUtils.mWarningMsg(gDbRdr.class.' database ' . a:dbName .
+                \ ' format is not parseable.')
+            return s:CCTreeRC.Error
+        endif
+    else
+        let gDbRdr = {}
+    endif
+
+    return {'loader': gDbLdr, 'reader': gDbRdr}
+endfunction
+
+function! s:CCTreeDBList.mAddDbToList(dbName, type)
+    let aDBEnt = s:CCTreeXrefDbEntry.mCreate(a:dbName, a:type)
+    call add(self.loadedDBs, aDBEnt)
+endfunction
+
+" Merge the cscope db into the global cctree xref db
+function! s:CCTreeDBList.mMerge(dbName, xRefDb, class)
+    " Check if merge can be supported
+    if self.loadedDBs[0].type == s:DBStorage.disk
+        call s:CCTreeUtils.mInfoMsg("Cannot merge with DBs traced from disk")
+        return
+    endif
+    " Create db loader, reader
+    let gObjs = self.mCreateDbLoaderAndReader(a:dbName, a:class, s:DBStorage.memory)
+
+    if type(gObjs) == type({})
+        " if Db is compressed, then we need to compress our symbols first
+        let swatch = s:StopWatch.mCreate()
+        if self.mLoadDB(gObjs.loader, a:xRefDb,
+                            \ gObjs.reader) != s:CCTreeRC.Error
+            call self.mAddDbToList(gObjs.loader.fDBName, gObjs.loader.class)
+            let msg = "Done merging databases. xRef Symbol Count: "
+                                     \.a:xRefDb.mGetSymbolCount()
+                                     \.". Time taken: ".swatch.mGetText()." secs"
+            call s:CCTreeUtils.mInfoMsg(msg)
+        endif
+        " Load will auto decompress the symbols
+    endif
+endfunction
+
+" Load the cscope db into the global cctree xref db
+function! s:CCTreeDBList.mAddNew(dbName, xRefDb, dbclass, storageclass)
+    " Create db loader, reader
+    let gObjs = self.mCreateDbLoaderAndReader(a:dbName, a:dbclass, a:storageclass)
+
+    if type(gObjs) == type({})
+        let swatch = s:StopWatch.mCreate()
+        if self.mLoadDB(gObjs.loader, a:xRefDb,
+                            \ gObjs.reader) != s:CCTreeRC.Error
+            call self.mAddDbToList(gObjs.loader.fDBName, gObjs.loader.class)
+            call swatch.mSnapElapsed()
+            if a:storageclass == s:DBStorage.memory
+                let msg = "Done loading database. xRef Symbol Count: "
+                                     \.a:xRefDb.mGetSymbolCount()
+                                     \.". Time taken: ".swatch.mGetText()." secs"
+            else
+                let msg = "Disk Xref database loaded for tracing"
+            endif
+            call s:CCTreeUtils.mInfoMsg(msg)
+        endif
+    endif
+endfunction
+
+function! s:CCTreeDBList.mLoadDB(gDbLdr, xRefDb, gRdr)
+    let rc = s:CCTreeRC.Success
+    try
+        let swatch = s:StopWatch.mCreate()
+        call s:StatusLine.mInit()
+        " if compression, then we need to compress our symbols first
+        if !empty(a:gRdr) && a:gRdr.mRequirePreProcessing() == s:CCTreeRC.True
+            call s:StatusLine.mSetInfo('Pre-processing existing symbols')
+            call a:xRefDb.mTranslateSymbols(a:gRdr.mGetPreProcessingMaps(),
+                                            \ a:gRdr.mapPreKeys)
+        endif
+        call garbagecollect()
+        call s:StatusLine.mSetInfo('Loading database')
+        call a:gDbLdr.mLoadFileIntoXRefDb(a:xRefDb, a:gRdr)
+        if !empty(a:gRdr) && a:gRdr.mRequireCleanup() == s:CCTreeRC.True
+            call s:StatusLine.mSetInfo('Symbol clean-up')
+            call a:xRefDb.mCleanSymbols()
+        endif
+        call garbagecollect()
+        if !empty(a:gRdr) && a:gRdr.mRequirePostProcessing() == s:CCTreeRC.True
+            call s:StatusLine.mSetInfo('Post-processing loaded symbols')
+            call a:xRefDb.mTranslateSymbols(a:gRdr.mGetPostProcessingMaps(),
+                                                \ a:gRdr.mapPostKeys)
+        endif
+        call swatch.mSnapElapsed()
+        " restore normalcy
+        call garbagecollect()
+        redraw
+
+    catch /^Vim:Interrupt$/        " catch interrupts (CTRL-C)
+        call s:CCTreeUtils.mWarningMsg('Loading aborted.')
+        let rc = s:CCTreeRC.Error
+    finally
+        call s:StatusLine.mRestore()
+    endtry
+    return rc
+endfunction
+"}}}
+" {{{ UI Input related
+let s:CCTreeUI = {}
+
+
+function! s:CCTreeUI.mInputDBName(dbName, class, action)
+    let dbUser = a:dbName
+    let dbUser = input(a:action. ' database ('. a:class. '): ', a:dbName, 'file')
+    return dbUser
+endfunction
+" }}}
+" {{{ CCTree Markers
+let s:TreeMarkers_UTF8 = {
+                            \ 'splitT' : nr2char(0x251c),
+                             \ 'arrowR' : nr2char(0x25c0),
+                            \ 'arrowF' : nr2char(0x25B6),
+                            \ 'extV' : nr2char(0x2502),
+                            \ 'extH': nr2char(0x2500),
+                            \ 'depth': nr2char(0x25BC)
+                            \}
+
+let s:TreeMarkers_Text = {
+                            \ 'splitT' : '+',
+                            \ 'arrowF' : '>',
+                            \ 'arrowR' : '<',
+                            \ 'extV' : '|',
+                            \ 'extH': '-',
+                            \ 'depth': 'depth:'
+                            \}
+
+let s:CCTreeMarkers = {
+                        \ 'icons':{}
+                        \ }
+function! s:CCTreeMarkers.mCreate() dict
+    let treeMarkers = deepcopy(s:CCTreeMarkers)
+
+    if &encoding == 'utf-8' && g:CCTreeUseUTF8Symbols == 1
+        let treeMarkers.icons = deepcopy(s:TreeMarkers_UTF8)
+    else
+        " default choice
+        let treeMarkers.icons = deepcopy(s:TreeMarkers_Text)
+    endif
+
+    let treeMarkers.icons.arrowSyms = treeMarkers.icons.arrowF . treeMarkers.icons.arrowR
+    let treeMarkers.icons.vertSyms = treeMarkers.icons.splitT . treeMarkers.icons.extV
+
+    return treeMarkers
+endfunction
+
+function! s:CCTreeMarkers.mGetArrow(direction) dict
+    if a:direction == 'p'
+        return self.icons.arrowR
+    elseif a:direction == 'c'
+        return self.icons.arrowF
+    endif
+    return '?'
+endfunction
+" }}}
+" {{{ User key mappings
+let s:CCTreeKeyMappings = {
+                    \ 'CTreeF': g:CCTreeKeyTraceForwardTree,
+                    \ 'CTreeR': g:CCTreeKeyTraceReverseTree,
+                    \ 'CTreeHilight': g:CCTreeKeyHilightTree,
+                    \ 'CTreeWSave': g:CCTreeKeySaveWindow,
+                    \ 'CTreeWToggle': g:CCTreeKeyToggleWindow,
+                    \ 'CTreeCompress': g:CCTreeKeyCompressTree,
+                    \ 'CTreeDepthMinus': g:CCTreeKeyDepthMinus,
+                    \ 'CTreeDepthPlus': g:CCTreeKeyDepthPlus
+                    \}
+" }}}
+" {{{ CCTreeWindow
+let s:CCTreeWindow =  {
+                        \ 'hiKeyword': '',
+                        \ 'hiKeywordLine':'',
+                        \ 'lastbufname':'',
+                        \ 'treeMarkers': s:CCTreeMarkers.mCreate()}
+
+function! s:CCTreeWindow.mCreate() dict
+    let win = deepcopy(s:CCTreeWindow)
+    unlet win.mCreate
+
+    return win
+endfunction
+
+function! s:CCTreeWindow.mLeave()
+    call s:FindOpenWindow(self.lastbufname)
+endfunction
+
+
+" Definition of a keyword...
+let s:CCTreeKeywordRegEx = '[A-Za-z0-9_\\\.\/]\+'
+
+function! s:CCTreeWindow.mGetKeywordAtCursor() dict
+    let curline = line(".")
+    let self.hiKeyword = ''
+    if foldclosed(curline) == -1
+        let curkeyword = matchstr(getline("."), s:CCTreeKeywordRegEx)
+        if curkeyword != ''
+            if curkeyword != self.hiKeyword || curline != self.hiKeywordLine
+                let self.hiKeyword = curkeyword
+                let self.hiKeywordLine = line(".")
+                return s:CCTreeRC.Success
+            endif
+        else
+            return s:CCTreeRC.Error
+        endif
+    endif
+    if self.hiKeyword == ''
+        return s:CCTreeRC.Error
+    endif
+    return s:CCTreeRC.Success
+endfunction
+
+function! s:CCTreeWindow.mBuildStatusLine(pState, title, items)
+    let needcomma = 0
+    let rtitle = a:title. ' ('. a:pState.keyword
+    let rtitle .= '['
+    if has_key(a:items, "depth")
+        let rtitle .= self.treeMarkers.icons.depth
+        let rtitle .= a:pState.depth
+        let needcomma = 1
+    endif
+    if has_key(a:items, "direction")
+        if needcomma == 1
+            let rtitle .= ','
+        endif
+
+        let rtitle .= self.treeMarkers.mGetArrow(a:pState.direction)
+    endif
+    let rtitle .= '])'
+
+    return rtitle
+endfunction
+
+function! CCTreeWindowPreviewStatusLine()
+    " get global
+    " this is a hack
+    let pState = s:CCTreeGlobals.PreviewState
+    let tMarkers = s:CCTreeGlobals.Window.treeMarkers
+
+    return  s:CCTreeGlobals.Window.mBuildStatusLine(
+                \ s:CCTreeGlobals.PreviewState,
+                \ s:windowtitle,
+                \ {'depth':''}
+                \)
+endfunction
+
+function! s:CCTreeWindow.mPreviewSave(savetitle) dict
+    if s:FindOpenWindow(s:windowtitle) == 1
+        setlocal modifiable
+        call self.mClearMarks(b:displayTree)
+        setlocal nomodifiable
+             setlocal statusline=%-F
+               silent! exec ":f ". a:savetitle
+        return s:CCTreeRC.Success
+    endif
+    return s:CCTreeRC.Error
+endfunction
+
+function! s:CCTreeWindow.mIsOpen() dict
+    if s:FindOpenBuffer(s:windowtitle) > 0
+        return s:CCTreeRC.True
+    endif
+    return s:CCTreeRC.False
+endfunction
+
+function! s:CCTreeWindow.mClose() dict
+    if s:FindOpenWindow(s:windowtitle) == 1
+        silent! q!
+    endif
+endfunction
+
+function! s:CCTreeWindow.mDisplayToggle() dict
+    if s:FindOpenWindow(s:windowtitle) == 1
+        silent! hide
+    else
+        let winbufnr = s:FindOpenBuffer(s:windowtitle)
+        if winbufnr > 0
+           call self.mEnter()
+           silent! exec "buf ".winbufnr
+           call self.mResize()
+           silent! wincmd p
+        else
+           call s:CCTreeUtils.mWarningMsg(" No active window found.")
+        endif
+    endif
+endfunction
+
+function! s:CCTreeWindow.mResize() dict
+    if g:CCTreeWindowVertical == 1
+        if g:CCTreeWindowWidth == -1
+            exec "vertical resize ". b:maxwindowlen
+        else
+            exec "vertical resize ". g:CCTreeWindowWidth
+        endif
+    else
+        if g:CCTreeWindowHeight != -1
+            let &winminheight = g:CCTreeWindowHeight
+           exec "resize".g:CCTreeWindowHeight
+        endif
+    endif
+endfunction
+
+function! s:CCTreeWindow.mDisplayTree(atree, direction) dict
+    let incctreewin = 1
+    if (bufname('%') != s:windowtitle)
+        let incctreewin = self.mEnter()
+    endif
+
+    setlocal modifiable
+    silent 1,$d
+    let b:maxwindowlen = g:CCTreeWindowMinWidth
+    let b:displayTree = s:DisplayTree.mCreate(a:atree,
+                    \ a:direction, self.treeMarkers)
+    call s:CCTreeDisplay.mPopulateTreeInCurrentBuffer(b:displayTree)
+    exec "normal gg"
+
+    " Need to force this again
+    let &l:foldlevel=g:CCTreeMinVisibleDepth
+    setlocal nomodifiable
+    call self.mResize()
+    if (incctreewin == 0)
+        call s:CCTreeWindow.mLeave()
+    endif
+endfunction
+
+function! s:CCTreeWindow.mExtractTreeSymbols(dtree)
+    let symlist = {}
+    for aentry in a:dtree.entries
+        let symlist[aentry.symbol] = 0
+    endfor
+    return symlist
+endfunction
+
+function! s:CCTreeWindow.mEnter() dict
+    let self.lastbufname = bufname("%")
+    let foundWindow = s:FindOpenWindow(s:windowtitle)
+    if foundWindow == 0
+        if g:CCTreeWindowVertical == 1
+            exec  g:CCTreeOrientation." vsplit ". s:windowtitle
+            set winfixwidth
+        else
+            exec  g:CCTreeOrientation." split ". s:windowtitle
+            set winfixheight
+        endif
+
+        setlocal buftype=nofile
+        setlocal bufhidden=hide
+        setlocal noswapfile
+        setlocal nonumber
+        setlocal nowrap
+        setlocal nobuflisted
+
+        if s:CCTreeUseConceal == 1
+            setlocal cole=3
+            setlocal cocu=nv
+        endif
+
+        setlocal statusline=%=%{CCTreeWindowPreviewStatusLine()}
+
+        call self.mInitSyntax(self.treeMarkers.icons)
+        let cpo_save = &cpoptions
+        set cpoptions&vim
+
+        call s:CCTreeBufferKeyMappingsCreate(s:CCTreeKeyMappings)
+
+        command! -buffer -nargs=0 CCTreeWindowHiCallTree
+                                \ call s:CCTreeGlobals.mCursorHoldHandleEvent()
+
+        exec 'nnoremap <buffer> <silent> '.s:CCTreeKeyMappings.CTreeHilight.
+                                                 \' :CCTreeWindowHiCallTree<CR>'
+        exec 'nnoremap <buffer> <silent> '.s:CCTreeKeyMappings.CTreeCompress.
+                                                 \ ' :2,.foldclose!<CR>zv'
+
+        nnoremap <buffer> <silent> <C-p>  :CCTreePreviewBufferUsingTag<CR>
+        nnoremap <buffer> <silent> <CR>  :CCTreeLoadBufferUsingTag<CR>
+        nnoremap <buffer> <silent> <2-LeftMouse> :CCTreeLoadBufferUsingTag<CR>
+
+        let &cpoptions = cpo_save
+    endif
+    setlocal foldmethod=expr
+    setlocal foldexpr=CCTreeFoldExpr(getline(v:lnum))
+    setlocal foldtext=CCTreeFoldText()
+    let &l:foldlevel=g:CCTreeMinVisibleDepth
+
+    return foundWindow
+endfunction
+" }}}
+" {{{ Dynamic call-tree highlighting using
+" syntax highlight tricks
+"
+" There are 3 types of lines, marked with the start character [\s, !, #]
+" Also @ is used to mark the path that is going up
+
+function! s:CCTreeWindow.mMarkCallTree(dtree, keyword) dict
+    let declevel = -1
+    let treelst = a:dtree.entries
+    let curLine = line(".")
+
+    let declevel = treelst[curLine-1].level
+
+    let targetlevel = declevel
+    for idx in range(curLine, 1, -1)
+        let aentry = treelst[idx-1]
+
+
+        " Find our keyword
+        let linemarker = 0
+        " Skip folds
+        if declevel != -1 && foldclosed(idx) == -1
+            if targetlevel == aentry.level
+                let linemarker = 1
+                let targetlevel -= 1
+            endif
+            let aline = a:dtree.mGetNotationalTxt(aentry.level, targetlevel+1, linemarker, 1)
+                            \ . aentry.symbol
+            call setline(idx, aline)
+        endif
+    endfor
+endfunction
+
+function! s:CCTreeWindow.mClearMarks(dtree) dict
+    for idx in range(line(".")+1, line("$"))
+        let breakout = (getline(idx)[0] !~ "[!#]")
+        if breakout == 1
+            break
+        endif
+        let aentry = a:dtree.entries[idx-1]
+        let aline = a:dtree.mGetNotationalTxt(aentry.level, -1, 0, 0)
+                    \ . aentry.symbol
+        call setline(idx, aline)
+    endfor
+endfunction
+
+function! s:CCTreeWindow.mInitSyntax(markers) dict
+        "syntax match CCTreePathMark /\s[|+]/ contained
+        exec 'syntax match CCTreePathMark /\s['. a:markers.vertSyms . ']/ contained'
+        "syntax match CCTreeArrow  /-*[<>]/ contained
+        exec 'syntax match CCTreeArrow  /'.a:markers.extH.'*['. a:markers.arrowSyms .']/ contained'
+
+        syntax match CCTreeSymbol  / [A-Za-z0-9_\.\\\/]\+/  contained
+        syntax region CCTreeSymbolLine start="^\s" end="$" contains=CCTreeArrow,CCTreePathMark,CCTreeSymbol oneline
+
+        "syntax match CCTreeHiArrow  /-*[<>]/ contained
+        exec 'syntax match CCTreeHiArrow  /'. a:markers.extH .'*['. a:markers.arrowSyms .']/ contained'
+        syntax match CCTreeHiSymbol  / [A-Za-z0-9_\.\\\/]\+/  contained
+
+        "syntax match CCTreeHiPathMark /\s[|+]/ contained
+        exec 'syntax match CCTreeHiPathMark /\s[' . a:markers.vertSyms . ']/ contained'
+
+        if s:CCTreeUseConceal == 1
+            syntax match CCTreeMarkExcl  /^[!#]/ contained conceal
+            syntax match CCTreeMarkTilde /@/  contained conceal
+        else
+            syntax match CCTreeMarkExcl  /^[!#]/ contained
+            syntax match CCTreeMarkTilde /@/  contained
+        endif
+        "syntax region CCTreeUpArrowBlock start="@"  end=/[|+]/  contains=CCTreeMarkTilde contained oneline
+        exec 'syntax region CCTreeUpArrowBlock start="@"  end=/['. a:markers.vertSyms .']/  contains=CCTreeMarkTilde contained oneline'
+
+        syntax region CCTreeHiSymbolLine start="!" end="$" contains=CCTreeMarkExcl,
+                \ CCTreeUpArrowBlock,
+                \ CCTreeHiSymbol,CCTreeHiArrow,CCTreeHiPathMark oneline
+
+        syntax region CCTreeMarkedSymbolLine start="#" end="$" contains=CCTreeMarkExcl,
+                        \ CCTreeMarkTilde,CCTreePathMark,
+                        \ CCTreeArrow,CCTreeSymbol,CCTreeUpArrowBlock oneline
+endfunction
+
+
+" }}}
+" {{{ CCTreeDisplay
+
+let s:CCTreeDisplay = {}
+
+function! s:CCTreeDisplay.mPopulateTreeInCurrentBuffer(dtree)
+    let linelist = []
+    for aentry in a:dtree.entries
+        let aline = a:dtree.mGetNotationalTxt(aentry.level, -1, 0, 0)
+                        \ . aentry.symbol
+        let len = s:Utils.mStrlenEx(aline)
+        let b:maxwindowlen = max([len+1, b:maxwindowlen])
+        call add(linelist, aline)
+    endfor
+    call setline(".", linelist)
+endfunction
+
+
+
+" }}}
+" {{{ CCTree command line interface
+let s:CCTreeCmdLine = {}
+
+
+function! s:CCTreeCmdLine.mLoadDBFromDisk(dbName) dict
+        call s:CCTreeGlobals.mUnLoadDBs()
+        let s:CCTreeGlobals.XRefDb = s:XRefDiskDb.mCreate()
+        call s:CCTreeGlobals.DbList.mAddNew(a:dbName,
+                                \ s:CCTreeGlobals.XRefDb, s:DBClasses.cctreexref, "Disk")
+endfunction
+
+" Unload current db's and load new one
+" There is no selective unloading
+function! s:CCTreeCmdLine.mLoadDB(db_name, class) dict
+        call s:CCTreeGlobals.mSetupEncodingChangeAutoCmd(0)
+        call s:CCTreeGlobals.mUnLoadDBs()
+        let s:CCTreeGlobals.XRefDb = s:xRefMemDb.mCreate()
+        call s:CCTreeGlobals.DbList.mAddNew(a:db_name,
+                                \ s:CCTreeGlobals.XRefDb, a:class, s:DBStorage.memory)
+        call s:CCTreeGlobals.mSetupAutoCmds()
+endfunction
+
+function! s:CCTreeCmdLine.mInputDBName(action, dbName, class) dict
+    if a:dbName == ''
+        let dbUser = s:CCTreeUI.mInputDBName(
+                            \ s:CCTreeUtils.mDetectDB(a:class),
+                            \ a:class, a:action)
+    else
+        let dbUser = a:dbName
+    endif
+    return dbUser
+endfunction
+
+function! s:CCTreeCmdLine.mSaveDB(dbName, class) dict
+    let dbUser = self.mInputDBName('Save', a:dbName, a:class)
+    if dbUser == ''
+        call s:CCTreeUtils.mWarningMsg('Filename required')
+        return
+    endif
+    call s:CCTreeGlobals.Window.mClose()
+    call s:CCTreeGlobals.mSetupEncodingChangeAutoCmd(0)
+    call s:CCTreeGlobals.mWriteXRefDbToFile(dbUser)
+    call s:CCTreeGlobals.mSetupAutoCmds()
+    call s:CCTreeGlobals.mUpdateForCurrentSymbol()
+endfunction
+
+" Merge current db with new one
+function! s:CCTreeCmdLine.mMergeDB(db_name, class) dict
+        "call s:CCTreeGlobals.Window.mClose()
+        call s:CCTreeGlobals.DbList.mMerge(a:db_name, s:CCTreeGlobals.XRefDb, a:class)
+endfunction
+
+
+" }}}
+" {{{ CCTree Buffer mappings
+function! s:CCTreeWindowGetHiKeyword()
+    let keyw = expand("<cword>")
+    let keyf = expand("<cfile>")
+
+    let syms = s:CCTreeGlobals.mGetPreviewTreeSymbols()
+
+    if keyw != keyf
+        if has_key(syms, keyf)
+            return keyf
+        elseif has_key(syms, keyw)
+            return keyw
+        endif
+    else
+        return keyw
+    endif
+    return ''
+endfunction
+
+
+" Keymappings used common to source files and CCTree window
+function! s:CCTreeBufferKeyMappingsCreate(kmaps)
+     let func_expr = '<SNR>'.s:sid.'CCTreeWindowGetHiKeyword()'
+     exec 'nnoremap <buffer> <silent> '.a:kmaps.CTreeR.' :CCTreeTraceReverse <C-R>='.
+                                                  \ func_expr.'<CR><CR>'
+     exec 'nnoremap <buffer> <silent> '.a:kmaps.CTreeF.' :CCTreeTraceForward <C-R>='
+                                                \ .func_expr.'<CR><CR>'
+
+     exec 'nnoremap <silent> '.a:kmaps.CTreeWSave. ' :CCTreeWindowSaveCopy<CR>'
+     exec 'nnoremap <silent> '.a:kmaps.CTreeWToggle. ' :CCTreeWindowToggle<CR>'
+
+     exec 'nnoremap <buffer> <silent> '.a:kmaps.CTreeDepthPlus.
+                                    \ ' :CCTreeRecurseDepthPlus<CR>'
+     exec 'nnoremap <buffer> <silent> '.a:kmaps.CTreeDepthMinus.
+                                    \ ' :CCTreeRecurseDepthMinus<CR>'
+endfunction
+
+augroup CCTreeMaps
+au!
+" Header files get detected as cpp?
+" This is a bug in Vim 7.2, a patch needs to be applied to the runtime c
+" syntax files
+" For now, use this hack to make *.h files work
+autocmd FileType *   if &ft == 'c'|| &ft == 'cpp' |
+                   \ call s:CCTreeBufferKeyMappingsCreate(s:CCTreeKeyMappings)|
+                   \ endif
+augroup END
+
+
+" }}}
+" {{{ Tree building
+
+let s:DisplayTreeEntry = {
+                     \ 'symbol': "",
+                     \ 'level': -1
+                     \ }
+
+function! s:DisplayTreeEntry.mCreate(sym, level) dict
+    let te = deepcopy(s:DisplayTreeEntry)
+    let te.symbol = a:sym
+    let te.level = a:level
+    unlet te.mCreate
+
+    return te
+endfunction
+
+let s:calltreemaxdepth = 10
+let s:DisplayTree = {
+                    \ 'entries': [],
+                    \ 'levelMaxLen': repeat([255], s:calltreemaxdepth),
+                    \ 'notTxt': {}
+                    \ }
+
+function! s:DisplayTree.mCreate(calltree, direction, markers) dict
+    let dt = deepcopy(s:DisplayTree)
+    call dt.mBuildTreeForLevel(a:calltree, 0)
+    call dt.mBuildNotationalTxtMarkers(a:direction, a:markers.icons)
+
+    unlet dt.mBuildTreeForLevel
+    unlet dt.mCreate
+
+    return dt
+endfunction
+
+function! s:DisplayTree.mBuildTreeForLevel(ctree, level)
+    if !has_key(a:ctree, 'symbol')
+        return
+    endif
+
+    if g:CCTreeDisplayMode == 3
+       let curlevellen = strlen(a:ctree.symbol) + a:level + 2
+       let self.levelMaxLen[a:level] = min([self.levelMaxLen[a:level],
+                                        \ curlevellen])
+    endif
+
+
+    let aentry = s:DisplayTreeEntry.mCreate(a:ctree.symbol, a:level)
+    call add(self.entries, aentry)
+
+    if has_key(a:ctree, 'childlinks')
+        for alink in a:ctree['childlinks']
+            call self.mBuildTreeForLevel(alink, a:level+1)
+        endfor
+    endif
+endfunction
+
+
+function! s:DisplayTree.mBuildNotationalTxtMarkers(direction, markerSyms) dict
+   " REVISIT
+   if a:direction == 'p'
+        let directiontxt = a:markerSyms.arrowR . " "
+    elseif a:direction == 'c'
+        let directiontxt = a:markerSyms.arrowF . " "
+   endif
+
+
+   let self.notTxt.arrowHead = a:markerSyms.splitT
+   let self.notTxt.arrow = directiontxt
+   let self.notTxt.arrowLead = a:markerSyms.extH
+   let self.notTxt.sep = a:markerSyms.extV
+   if s:CCTreeUseConceal == 1
+       let concealspace = " "
+   else
+       let concealspace = ""
+   endif
+
+   let self.notTxt.symHighlighter= concealspace . "@"
+
+   let self.notTxt.hiSymbolMarker = "!".concealspace
+   let self.notTxt.hiBranchMarker = "#".concealspace
+
+   let self.notTxt.cache = {}
+
+endfunction
+
+function! s:DisplayTree.mGetNotationalTxt(depth, hiDepth, hiSym, hiPath) dict
+    let notkey = join(a:000, ":")
+    if has_key(self.notTxt.cache,notkey) == 1
+        return self.notTxt.cache[notkey]
+    else
+        return self.mBuildNotationalTxt(a:depth, a:hiDepth, a:hiSym, a:hiPath)
+    endif
+endfunction
+
+function! s:DisplayTree.mBuildNotationalTxt(depth, hiDepth, hiSym, hiPath) dict
+    let hiBranch = 0
+    let curDepth = a:depth
+    if 0
+        let Aspace = "A"
+        let Bspace = "B"
+        let Cspace = "C"
+        let Sspace = "S"
+        let Xspace = "X"
+        let Zspace = "Z"
+        let Fspace = "1"
+    else
+        let Aspace = " "
+        let Bspace = " "
+        let Cspace = " "
+        let Sspace = " "
+        let Xspace = " "
+        let Zspace = " "
+        let Fspace = " "
+    endif
+
+    if g:CCTreeDisplayMode == 1
+        let arrowLeads = self.notTxt.arrowLead
+    elseif g:CCTreeDisplayMode >= 2
+        let arrowLeads = repeat(self.notTxt.arrowLead, a:depth)
+    endif
+
+    let indentSpace = ""
+    if g:CCTreeDisplayMode == 2
+        if curDepth > 0
+            let  indentSpace = repeat(Aspace, curDepth)
+        endif
+    elseif g:CCTreeDisplayMode == 3
+        if curDepth > 0
+            let indentSpace = repeat(Aspace, self.levelMaxLen[curDepth-1])
+        endif
+    endif
+    let notTxt = self.notTxt.arrowHead. arrowLeads . self.notTxt.arrow
+    if a:hiDepth == a:depth
+        let notTxt = indentSpace . self.notTxt.symHighlighter . notTxt
+        let hiBranch = 1
+    else
+        let notTxt = indentSpace. Cspace. notTxt
+    endif
+    let curDepth -= 1
+
+    let indentSpace = ""
+    while (curDepth > 0)
+        if g:CCTreeDisplayMode == 2
+            let  indentSpace = repeat(Bspace, curDepth)
+        elseif g:CCTreeDisplayMode == 3
+            let indentSpace = repeat(Bspace, self.levelMaxLen[curDepth-1])
+        endif
+        let notTxt = self.notTxt.sep . notTxt
+        if a:hiDepth == curDepth && a:hiPath == 1
+            let notTxt = indentSpace . self.notTxt.symHighlighter . notTxt
+            let hiBranch = 1
+        else
+            let notTxt = indentSpace. Cspace. notTxt
+        endif
+        let curDepth -= 1
+    endwhile
+    if curDepth == 0
+        " curdepth is  0
+        if a:hiDepth == curDepth  && a:hiPath == 1
+            let notTxt = self.notTxt.symHighlighter . notTxt
+            let hiBranch = 1
+        else
+            let notTxt = Fspace . notTxt
+        endif
+        let curDepth -= 1
+    endif
+    " adjust space
+    if a:depth > 0
+        let notTxt = Xspace . notTxt
+    endif
+    if hiBranch == 1
+        if a:hiSym == 1
+            let notTxt = self.notTxt.hiSymbolMarker . notTxt
+        else
+            let notTxt = self.notTxt.hiBranchMarker . notTxt
+        endif
+    else
+            let notTxt = Sspace . notTxt
+    endif
+    return notTxt
+endfunction
+
+"}}}
+" {{{ Preview window Folding
+function! CCTreeFoldExpr(line)
+    if !exists('b:displayTree') || v:lnum > len(b:displayTree.entries)
+        return 0
+    endif
+
+    let lvl = b:displayTree.entries[v:lnum-1].level
+    if lvl == 0
+        let lvl = 1
+    endif
+    return '>'.lvl
+endfunction
+
+
+function! CCTreeFoldText()
+    if s:CCTreeUseConceal == 1
+        let line = substitute(getline(v:foldstart), '[!@#]', '' , 'g')
+    else
+        let line = substitute(getline(v:foldstart), '[!@#]', ' ' , 'g')
+    endif
+    return line. " (+". (v:foldend - v:foldstart).
+                \  ')'. repeat(" ", winwidth(0))
+endfunction
+" }}}
+" {{{ Syntax coloring definitions
+"Standard display
+highlight default link CCTreeSymbol  Function
+highlight default link CCTreeMarkers LineNr
+highlight default link CCTreeArrow CCTreeMarkers
+highlight default link CCTreePathMark CCTreeArrow
+highlight default link CCTreeHiPathMark CCTreePathMark
+
+" highlighted display
+highlight default link CCTreeHiKeyword Macro
+highlight default link CCTreeHiSymbol  TODO
+highlight default link CCTreeHiMarkers NonText
+highlight default link CCTreeHiArrow  CCTreeHiMarkers
+highlight default link CCTreeUpArrowBlock CCTreeHiArrow
+
+highlight default link CCTreeMarkExcl Ignore
+highlight default link CCTreeMarkTilde Ignore
+"}}}
+" {{{  CCTree global state
+
+let s:CCTreePreviewState = {
+                    \ 'keyword':'',
+                    \ 'direction': '',
+                    \ 'depth' : ''
+                    \}
+
+function! s:CCTreePreviewState.mCreate()
+    let state = deepcopy(s:CCTreePreviewState)
+    unlet state.mCreate
+
+    return state
+endfunction
+
+function! s:CCTreePreviewState.mStore(symbol, direction)
+    let self.keyword = a:symbol
+    let self.direction = a:direction
+endfunction
+" }}}
+" {{{ CCTree global objects
+
+let s:CCTreeGlobals = {
+                        \ 'XRefDb': {},
+                        \ 'DbList': s:CCTreeDBList.mCreate(),
+                        \ 'PreviewState': s:CCTreePreviewState.mCreate(),
+                        \ 'Window': s:CCTreeWindow.mCreate()
+                        \}
+
+let g:CCTreeGlobals = s:CCTreeGlobals
+
+function! s:CCTreeGlobals.mEnable(opt) dict
+    if (has_key(s:CCTreeOptions, a:opt))
+        call s:CCTreeOptions[a:opt](1)
+    else
+        call s:CCTreeUtils.mWarningMsg('Invalid option')
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mDisable(opt) dict
+    if (has_key(s:CCTreeOptions, a:opt))
+        call s:CCTreeOptions[a:opt](0)
+    else
+        call s:CCTreeUtils.mWarningMsg('Invalid option')
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mToggle(opt) dict
+    if (has_key(s:CCTreeOptions, a:opt))
+        call s:CCTreeOptions[a:opt](-1)
+    else
+        call s:CCTreeUtils.mWarningMsg('Invalid option')
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mGetSymNames(lead) dict
+    call self.XRefDb.mInitState()
+    let syms = self.XRefDb.mGetSymbolNames(a:lead)
+    call self.XRefDb.mRestoreState()
+    return syms
+endfunction
+
+
+function! s:CCTreeGlobals.mGetCallsForSymbol(name, depth, direction) dict
+    let pbar = s:ProgressBarRoll.mCreate(['-','\','|','/'], '*')
+    call s:StatusLine.mSetInfo('Building ')
+    redrawstatus!
+    " Create tracer
+    let xtracer = s:XRefTracer.mCreate(self.XRefDb)
+    call xtracer.mInitTracing()
+    let symid = self.XRefDb.mGetSymbolIdFromName(a:name)
+    let xrefs = xtracer.mBuildForSymbol(symid,
+                      \ a:depth, self.PreviewState.depth, a:direction, pbar)
+    call xtracer.mDoneTracing()
+    return xrefs
+endfunction
+
+function! s:CCTreeGlobals.mShowLoadedDBs() dict
+    call self.DbList.mShowLoaded()
+endfunction
+
+function! s:CCTreeGlobals.mUnLoadDBs() dict
+    call s:CCTreeGlobals.Window.mClose()
+    if !empty(s:CCTreeGlobals.XRefDb)
+        call s:CCTreeGlobals.XRefDb.mClear()
+    endif
+    call s:CCTreeGlobals.DbList.mClearAll()
+endfunction
+
+function! s:CCTreeGlobals.mSetPreviewState(name, depth, direction) dict
+    let self.PreviewState.keyword = a:name
+    let self.PreviewState.direction = a:direction
+    let self.PreviewState.depth = a:depth
+endfunction
+
+function! s:CCTreeGlobals.mUpdateForCurrentSymbol() dict
+    if self.DbList.mIsEmpty() == s:CCTreeRC.True
+        return s:CCTreeRC.Error
+    endif
+    if self.PreviewState.keyword != ''
+        let swatch = s:StopWatch.mCreate()
+        " Move this function to globals?
+        call s:StatusLine.mInit()
+        let atree = self.mGetCallsForSymbol(self.PreviewState.keyword,
+                        \ 0,
+                        \ self.PreviewState.direction)
+        call s:StatusLine.mRestore()
+        call self.Window.mDisplayTree(atree, self.PreviewState.direction)
+
+        call swatch.mSnapElapsed()
+    endif
+endfunction
+
+
+function! s:CCTreeGlobals.mGetPreviewTreeSymbols()
+        " REVIST
+        if exists('b:displayTree')
+            return self.Window.mExtractTreeSymbols(b:displayTree)
+        end
+        return {}
+endfunction
+
+function! s:CCTreeGlobals.mSanitizeCallDepth() dict
+    let error = 0
+    if self.PreviewState.depth >= s:calltreemaxdepth
+        self.PreviewState.depth = s:calltreemaxdepth
+        let error = 1
+    elseif self.PreviewState.depth < 1
+        let self.PreviewState.depth = 1
+        let error = 1
+    endif
+
+    if error == 1
+        call s:CCTreeUtils.mWarningMsg('Depth out of bounds')
+    endif
+    return error
+endfunction
+
+function! s:CCTreeGlobals.mRecursiveDepthIncrease() dict
+    let self.PreviewState.depth += 1
+    if self.mSanitizeCallDepth() == 0
+        call self.mUpdateForCurrentSymbol()
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mRecursiveDepthDecrease() dict
+    let self.PreviewState.depth -= 1
+    if self.mSanitizeCallDepth() == 0
+        call self.mUpdateForCurrentSymbol()
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mDisplayToggle() dict
+    call self.Window.mDisplayToggle()
+endfunction
+
+function! s:CCTreeGlobals.mSetupAutoCmds() dict
+    augroup CCTreeGeneral
+        au!
+    augroup END
+    call s:CCTreeGlobals.mSetupCursorMoveAutoCmd(g:CCTreeHilightCallTree)
+    call s:CCTreeGlobals.mSetupEncodingChangeAutoCmd(g:CCTreeUseUTF8Symbols)
+endfunction
+
+function! s:CCTreeGlobals.mSetupCursorMoveAutoCmd(enable) dict
+        if a:enable == 1
+            exec 'autocmd CCTreeGeneral CursorMoved '.s:windowtitle.' call s:CCTreeGlobals.mCursorHoldHandleEvent()'
+        else
+            exec 'autocmd! CCTreeGeneral CursorMoved '.s:windowtitle
+        endif
+endfunction
+
+function! s:CCTreeGlobals.mSetupEncodingChangeAutoCmd(enable) dict
+        return
+        if a:enable == 1
+            autocmd CCTreeGeneral EncodingChanged * call s:CCTreeGlobals.mEncodingChangedHandleEvent()
+        else
+            autocmd! CCTreeGeneral EncodingChanged *
+        endif
+endfunction
+
+function! s:CCTreeGlobals.mPreviewSave() dict
+    let rtitle = s:CCTreeGlobals.Window.mBuildStatusLine(
+                \ s:CCTreeGlobals.PreviewState,
+                \ s:windowsavetitle,
+                \ {'depth':'', 'direction':''}
+                \)
+
+    if self.Window.mPreviewSave(rtitle) == s:CCTreeRC.Success
+        call s:CCTreeUtils.mInfoMsg('Window saved as '. rtitle .
+                    \ '. New window will be opened on next usage.')
+    else
+        call s:CCTreeUtils.mWarningMsg('No active window found to be saved.')
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mWriteXRefDbToFile(fname) dict
+    " create db serializer and writer
+    let gDbSz = s:GenericDbSerializer.mCreate(self.XRefDb)
+    let gDbWriter = s:CCTreeTagDbWriter.mCreate(
+                                \ s:CCTreeGetXRefDbMaps('Compress', 'Alpha'))
+    call gDbSz.mWriteXRefDbToFile(a:fname, gDbWriter)
+endfunction
+
+function! s:CCTreeGlobals.mReadToXRefDb(fname) dict
+    call s:StatusLine.mInit()
+    call s:StatusLine.mSetInfo('Reading XRefDb')
+    let vDbFile = s:vFile.mCreate(a:fname, "r")
+    if vDbFile.mIsLargeFile() == 1
+            call s:StatusLine.mSetExtraInfo('Xref DB '
+                    \.' >'.g:CCTreeDbFileMaxSize .' bytes. Splitting '.
+                    \'into smaller chunks... (this may take some time)')
+    endif
+    try
+        if vDbFile.mOpen() == 0
+            call s:TagFile.mReadToXRefDb(self.XRefDb, vDbFile)
+        endif
+    finally
+        call vDbFile.mClose()
+        call s:StatusLine.mRestore()
+        call self.DbList.mAddDbToList(a:fname, s:DBStorage.memory)
+    endtry
+endfunction
+
+function! s:CCTreeGlobals.mCursorHoldHandleEvent() dict
+    if self.Window.mGetKeywordAtCursor() != s:CCTreeRC.Error
+       setlocal modifiable
+       call self.Window.mClearMarks(b:displayTree)
+       call self.Window.mMarkCallTree(b:displayTree,
+                            \ self.Window.hiKeyword)
+       setlocal nomodifiable
+    endif
+endfunction
+
+function! s:CCTreeGlobals.mEncodingChangedHandleEvent() dict
+    let self.Window.treeMarkers = s:CCTreeMarkers.mCreate()
+    if self.Window.mIsOpen() == s:CCTreeRC.True
+        call self.Window.mClose()
+        call self.mUpdateForCurrentSymbol()
+    endif
+endfunction
+
+
+function! s:CCTreeGlobals.mInit() dict
+    call self.mSetupAutoCmds()
+endfunction
+
+" }}}
+" {{{ CCTree options
+function! s:CCTreeSetUseCallTreeHiLights(val)
+    if a:val == -1
+        let g:CCTreeHilightCallTree = !g:CCTreeHilightCallTree
+    else
+        let g:CCTreeHilightCallTree = a:val
+    endif
+    call s:CCTreeGlobals.mSetupAutoCmds()
+endfunction
+
+function! s:CCTreeSetUseUtf8Symbols(val)
+    if a:val == -1
+        let g:CCTreeUseUTF8Symbols = !g:CCTreeUseUTF8Symbols
+    else
+        let g:CCTreeUseUTF8Symbols = a:val
+    endif
+    call s:CCTreeGlobals.mEncodingChangedHandleEvent()
+endfunction
+
+function! s:CCTreeSetUseConceal(val)
+    if a:val == -1
+        let s:CCTreeUseConceal = !s:CCTreeUseConceal
+    else
+        let s:CCTreeUseConceal = a:val
+    endif
+    if !has('conceal')
+        call s:CCTreeUtils.mWarningMsg('+conceal feature not available')
+        let s:CCTreeUseConceal = 0
+    endif
+endfunction
+
+function! s:CCTreeSetEnhancedSymbolProcessing(val)
+    if a:val == -1
+        let g:CCTreeEnhancedSymbolProcessing = !g:CCTreeEnhancedSymbolProcessing
+    else
+        let g:CCTreeEnhancedSymbolProcessing = a:val
+    endif
+endfunction
+
+function! s:CCTreeOptionsList(arglead, cmdline, cursorpos)
+    let opts = keys(s:CCTreeOptions)
+    if a:arglead == ''
+        return opts
+    else
+        return filter(opts, 'v:val =~? a:arglead')
+    endif
+endfunction
+
+let s:CCTreeOptions = {'UseUnicodeSymbols': function('s:CCTreeSetUseUtf8Symbols'),
+            \ 'DynamicTreeHiLights': function('s:CCTreeSetUseCallTreeHiLights'),
+            \ 'UseConceal': function('s:CCTreeSetUseConceal'),
+            \ 'EnhancedSymbolProcessing': function('s:CCTreeSetEnhancedSymbolProcessing')
+            \}
+
+" }}}
+" {{{ Vim tags interface
+
+" CCTreeCompleteKwd
+" Command line completion function to return names from the db
+function! s:CCTreeCompleteKwd(arglead, cmdline, cursorpos)
+    let syms = s:CCTreeGlobals.mGetSymNames(a:arglead)
+    if a:arglead == ''
+        return syms
+    else
+        return filter(syms, 'v:val =~? a:arglead')
+    endif
+endfunction
+
+function! s:CCTreeTraceTreeForSymbol(sym_arg, direction)
+    if s:CCTreeGlobals.DbList.mIsEmpty() == s:CCTreeRC.True
+        call s:CCTreeUtils.mWarningMsg('No database loaded')
+        return
+    endif
+
+    let symbol = a:sym_arg
+    if symbol == ''
+        let symbol = input('Trace symbol: ', expand('<cword>'),
+                    \ 'customlist,<SNR>' . s:sid . 'CCTreeCompleteKwd')
+        if symbol == ''
+            return
+        endif
+    endif
+    let symmatch = s:CCTreeGlobals.mGetSymNames(symbol)
+    if len(symmatch) > 0 && index(symmatch, symbol) >= 0
+        call s:CCTreeGlobals.mSetPreviewState(symbol,
+                                            \ g:CCTreeRecursiveDepth,
+                                            \ a:direction)
+        call s:CCTreeGlobals.mUpdateForCurrentSymbol()
+    else
+        call s:CCTreeUtils.mWarningMsg('Symbol not found')
+    endif
+endfunction
+
+
+
+
+function! s:CCTreeGlobals.mLoadBufferFromKeyword()
+    " REVISIT
+    if s:CCTreeGlobals.Window.mGetKeywordAtCursor() == s:CCTreeRC.Error
+        call s:CCTreeUtils.mWarningMsg('No keyword at cursor')
+        return
+    endif
+
+    let hiKeyword = s:CCTreeGlobals.Window.hiKeyword
+    try
+        wincmd p
+    catch
+        call s:CCTreeUtils.mWarningMsg('No buffer to load file')
+    finally
+        if (cscope_connection() > 0)
+            try
+                exec "cs find g ". hiKeyword
+            catch
+                " cheap hack
+                exec "cs find f ". hiKeyword
+            endtry
+        else
+            try
+                " Ctags is smart enough to figure the path
+                exec "tag ".fnamemodify(hiKeyword, ":t")
+            catch /^Vim\%((\a\+)\)\=:E433/
+                call s:CCTreeUtils.mWarningMsg('Tag file not found')
+            catch /^Vim\%((\a\+)\)\=:E426/
+                call s:CCTreeUtils.mWarningMsg('Tag '. hiKeyword .' not found')
+                wincmd p
+            endtry
+        endif
+    endtry
+endfunction
+
+function! s:CCTreeGlobals.mPreviewBufferFromKeyword()
+    if self.Window.mGetKeywordAtCursor() == s:CCTreeRC.Error
+        call s:CCTreeUtils.mWarningMsg('No keyword found')
+        return
+    endif
+
+    let hiKeyword = s:CCTreeGlobals.Window.hiKeyword
+    silent! wincmd P
+    if !&previewwindow
+        wincmd p
+    endif
+    try
+        exec "ptag ". hiKeyword
+    catch
+        call s:CCTreeUtils.mWarningMsg('Tag '.hiKeyword. ' not found')
+    endtry
+endfunction
+
+" }}}
+" {{{ Define commands
+command! -nargs=? -complete=file CCTreeLoadXRefDBFromDisk
+                                        \ call s:CCTreeCmdLine.mLoadDBFromDisk(<q-args>)
+command! -nargs=? -complete=file CCTreeLoadDB  call s:CCTreeCmdLine.mLoadDB(<q-args>, s:DBClasses.cscopeid)
+command! -nargs=? -complete=file CCTreeLoadXRefDB  call s:CCTreeCmdLine.mLoadDB(<q-args>, s:DBClasses.cctreexref)
+command! -nargs=? -complete=file CCTreeSaveXRefDB  call s:CCTreeCmdLine.mSaveDB(<q-args>, s:DBClasses.cctreexref)
+command! -nargs=? -complete=file CCTreeAppendDB  call s:CCTreeCmdLine.mMergeDB(<q-args>, s:DBClasses.cscopeid)
+command! -nargs=0 CCTreeUnLoadDB               call s:CCTreeGlobals.mUnLoadDBs()
+command! -nargs=0 CCTreeShowLoadedDBs          call s:CCTreeGlobals.mShowLoadedDBs()
+command! -nargs=? -complete=customlist,s:CCTreeCompleteKwd
+        \ CCTreeTraceForward call s:CCTreeTraceTreeForSymbol(<q-args>, 'c')
+command! -nargs=? -complete=customlist,s:CCTreeCompleteKwd CCTreeTraceReverse
+            \ call s:CCTreeTraceTreeForSymbol(<q-args>, 'p')
+command! -nargs=0 CCTreeLoadBufferUsingTag call s:CCTreeGlobals.mLoadBufferFromKeyword()
+command! -nargs=0 CCTreePreviewBufferUsingTag call s:CCTreeGlobals.mPreviewBufferFromKeyword()
+command! -nargs=0 CCTreeRecurseDepthPlus call s:CCTreeGlobals.mRecursiveDepthIncrease()
+command! -nargs=0 CCTreeRecurseDepthMinus call s:CCTreeGlobals.mRecursiveDepthDecrease()
+" Preview Window
+command! -nargs=0 CCTreeWindowToggle         call s:CCTreeGlobals.mDisplayToggle()
+command! -nargs=0 CCTreeWindowSaveCopy call s:CCTreeGlobals.mPreviewSave()
+" Run-time dynamic options
+command! -nargs=1 -complete=customlist,s:CCTreeOptionsList CCTreeOptsEnable call s:CCTreeGlobals.mEnable(<q-args>)
+command! -nargs=1 -complete=customlist,s:CCTreeOptionsList CCTreeOptsDisable call s:CCTreeGlobals.mDisable(<q-args>)
+command! -nargs=1 -complete=customlist,s:CCTreeOptionsList CCTreeOptsToggle call s:CCTreeGlobals.mToggle(<q-args>)
+"}}}
+" {{{ finish (and init)
+call s:CCTreeGlobals.mInit()
+" restore 'cpo'
+let &cpoptions = s:cpo_save
+unlet s:cpo_save
+" vim: ts=8 sw=4 sts=4 et foldenable foldmethod=marker foldcolumn=1
+" }}}
diff --git a/contrib/ocs b/contrib/ocs
new file mode 100644 (file)
index 0000000..736de94
--- /dev/null
@@ -0,0 +1,308 @@
+#!/bin/sh
+# $Id: ocs,v 1.4 2004/06/21 18:13:21 broeker Exp $
+# This utility maintains the database for cscope on a recursive dir set
+# Author:   donwo      Tue Jun 25 15:36:39 PDT 1996
+# Modified: hops Jan 2000  chg defaults to not update if files exist and force
+#
+# These comments ARE the manual.  What more do you really need?
+# if using unadorned cscope with this use cscope -d so not trash db
+#                    cscope -L -0 <ptn> - to display ptn matches on stdout
+#
+# The lists of files are kept in two forms:
+#      TMP     cscope.tmplst
+#               The list generated by this program
+#              This list will be updated each time this program
+#              is executed.
+#
+#      LST     cscope.lst
+#               The fixed list generated by some other process
+#              This list will be used, if found, rather than
+#              the TMP form generated here.
+# 
+#      CSD     cscope.csd
+#               The fixed list generated by some other process
+#              This list will be used, if found, rather than
+#              the LST or TMP forms.  CSD differs from LST in
+#              that the CSD list is used where the source files
+#              change only seldom.  Cscope is requested not to
+#              check for changed files.  This can be
+#              significantly faster on large source trees.
+#
+#      INC     cscope.inc
+#               This is a list of additional directories
+#              in which to search for include files.
+#
+# Three hierarchies of libraries are supported:
+#      Local   In the current directory        ./
+#              This is most useful for transient projects or
+#              where the information is of no use to others on
+#              the system.  This type is NOT usable on source
+#              directories that are read-only.
+#      Home    In users home directory         $HOME/lib/cs/`pwd`
+#              This is good for items that seldom change but are
+#              of use only the the current user.  This type is
+#              usable on source directories that are read-only.
+#      System  In a global system directory    $SYSDIR/`pwd`
+#              This is for items that are of interest to all accounts.
+#              This option is not available unless the system directory
+#              is writable by the current user.  This type is usable
+#              on source directories that are read-only.
+#
+# If a shell script named ./cscope.rc is found and is
+# executable, the execution of it will be included within this
+# script after defaults_set/cmdline_parse and locating the
+# database.
+#
+# Command line options:
+#      -x      set shell debugging
+#      -f      force
+#                o  Do not ask about regenerating TMP.  Just do it.
+#                o  Allow cscope to regenerate libraries for CSD lists.
+#      -q      Tell cscope to build an inverted index for quick
+#              symbol searching.  There is a SIGNIFICANT
+#              increase in speed with this option however the
+#              disk space used is doubled.  Once the quick
+#              database is generated, cs will detect the files
+#              and continue to use them.
+#      -d      Do not regenerate.  Intended for cscope sub-tasks.
+#      -u      Update/regenerate.
+
+#
+# Here is where we put things
+
+CSCOPE=cscope
+HOMEDIR=${HOME}/lib/cs
+
+#set the default value for SYSDIR 
+if [ -z "${SYSDIR}" ]; then
+   SYSDIR=/usr/local/lib/cs
+   echo setting default sysdir
+fi
+
+#check that SYSDIR exists
+if [ ! -d ${SYSDIR} ]; then
+   echo -n $SYSDIR does not exist. 
+   echo Please create the directory and set SYSDIR appropriately
+   exit 
+fi
+
+# Check that cscope is in PATH
+type cscope 1>/dev/null 2>&1
+
+if [ $? -ne 0 ]
+then
+       echo "ERROR: cscope is not in \$PATH" >&2
+       echo "       Please set \$PATH correctly or make sure cscope is installed" >&2
+       exit 1
+fi
+
+# popup editor 
+#XCS_EDITOR=${HOME}/bin/x_cscope_editor
+XCS_EDITOR=${HOME}/bin/xme
+if [ -n "$DISPLAY" -a -x ${XCS_EDITOR} ]
+then
+       EDITOR=${XCS_EDITOR}
+       export EDITOR
+fi
+unset XCS_EDITOR
+
+#
+# Misc defaults
+
+#FORCE=N
+#NOUPDATE=
+FORCE=Y         # hops - default to force rather than query
+NOUPDATE=-d     # hops - default to no update if files already exist
+QUICK=
+SPECDEST=       # hops - query for files
+
+#
+# Parse the command line
+
+set -- `getopt xfqdu $*`
+
+if [ $? -ne 0 ]
+then
+    echo "Use: cs [-x] [-f] [-q] [-u]" >&2
+    echo " -x debug on " >&2
+    echo " -q quick Index - faster search but larger index" >&2
+    echo " -f ask about about regeneration" >&2
+    echo " -d don't update database (default)" >&2
+    echo " -u update database" >&2
+    echo " -s specify where files go" >&2
+    exit 1
+fi
+
+for arg
+do
+    case $arg in
+       -x )    set -x;     shift       ;;
+       -f )    FORCE=N; NOUPDATE=; shift;;
+       -q )    QUICK=-q;    shift      ;;
+       -d )    NOUPDATE=-d; shift      ;;
+       -u )    NOUPDATE=;   shift      ;;
+       -s )    SPECDEST=Y;   shift     ;;
+    esac
+done
+
+#
+# Here is the security hole.  Execute whatever is needed for
+# this project.  A per-project setup script may be available.
+
+[ -x ./cscope.rc ] && {
+    . ./cscope.rc
+}
+
+#
+# We look hard for appropriate files to scope.  We ignore items
+# containing "SCCS" assuming that these are directories of
+# source code control data.
+
+create_list()
+{
+    LIST=$1
+
+    if [ -f ${LIST} ]
+    then
+       [ -n "${NOUPDATE}" ] && return
+
+       if [ "${FORCE}" != "Y" ]
+       then
+           echo "\n${LIST}"
+           echo "Update the library? <(Y)es, (N)o, (Q)uit> [n] \c"
+           read x y
+           case $x in
+               [Yy]* ) ;;
+               [Qq]* ) exit 1  ;;
+               *)      return  ;;
+           esac
+       fi
+       echo "Updating library:\n  ${LIST} \c"
+    else
+       echo "Creating library:\n  ${LIST} \c"
+    fi
+
+    (
+       find . -follow -type f \( -name \*.[sScChHlyG] -o \
+                                 -name \*.asm -o \
+                                 -name \*.cc -o \
+                                 -name \*.cxx -o \
+                                 -name \*.ccP -o \
+                                 -name \*.hP -o \
+                                 -name \*.inc -o \
+                                 -name \*.ed -o \
+                                 -name vuifile -o \
+                                 -name Gensymvals -o \
+                                 -name \[mM\]ake\* \) \
+                                 -print
+   ) | grep -v SCCS | sort -u > ${LIST}
+
+    echo "\n`cat ${LIST} | wc -l` files listed"
+}
+
+#
+# Expand the include file list into command line arguments
+
+exp_inc()
+{
+    theInc=$1
+
+    if [ -s "${theInc}" ]
+    then
+       for i in `cat ${theInc}`
+       do
+           echo "-I $i \c"
+       done
+    fi
+}
+
+#
+# This routine does not return to the caller
+
+do_cscope()
+{
+    LIST=$1
+    CSLIB=$2
+    INC=$3
+    shift;shift;shift
+    ARGS="$*"
+
+    INCARGS=`exp_inc ${INC}`
+
+    echo "exec cscope"
+    exec $CSCOPE ${ARGS} -p 2 ${INCARGS} -i ${LIST} -f ${CSLIB}
+    echo "exec of $CSCOPE failed" >&2
+    exit 1
+}
+
+#
+# If we have existing libraries, we should use them.
+std_libs()
+{
+    DIR=$1
+    OUT=${DIR}/cscope.out
+    LST=${DIR}/cscope.lst
+    CSD=${DIR}/cscope.csd
+    TMP=${DIR}/cscope.tmplst
+    INC=${DIR}/cscope.inc
+    QCK=${DIR}/cscope.out.po
+
+    [ -s ${QCK} ] && QUICK=-q
+
+    [ -f ${CSD} ] && {
+       if [ "${FORCE}" = "Y" ]
+       then
+           do_cscope ${CSD} ${OUT} ${INC} ${QUICK}
+       else
+           do_cscope ${CSD} ${OUT} ${INC} ${QUICK} -d
+       fi
+    }
+
+    [ -f ${LST} ] && do_cscope ${LST} ${OUT} ${INC} ${QUICK} ${NOUPDATE}
+
+    [ -f ${TMP} ] && {
+       create_list ${TMP}
+       do_cscope ${TMP} ${OUT} ${INC} ${QUICK} ${NOUPDATE}
+    }
+}
+
+#
+# ######## main() #######
+
+umask 0
+PWD=`pwd`
+
+umask 02
+
+#
+# Check for existing libraries
+
+std_libs $PWD
+std_libs ${HOMEDIR}$PWD
+std_libs ${SYSDIR}$PWD
+
+#
+# We may need to create one for this area
+
+DIR=$PWD
+if [ ! -n "${NOUPDATE}" -o -n "${SPECDEST}" ] ; then
+echo "Create new library? <(L)ocal, (H)ome, (S)ystem, (Q)uit> [q] \c"
+read x y
+case $x in
+    [Ll]* )    DIR=$PWD                ;;
+    [Hh]* )    DIR=${HOMEDIR}$PWD      ;;
+    [Ss]* )    DIR=${SYSDIR}$PWD       ;;
+    *)         exit 1                  ;;
+esac
+fi
+[ -d $DIR ] || {
+    mkdir -p $DIR || exit $?
+}
+
+OUT=${DIR}/cscope.out
+TMP=${DIR}/cscope.tmplst
+INC=${DIR}/cscope.inc
+
+create_list ${TMP}
+do_cscope ${TMP} ${OUT} ${INC} ${QUICK}
+
diff --git a/contrib/webcscope/INSTALL b/contrib/webcscope/INSTALL
new file mode 100644 (file)
index 0000000..0ea0d9c
--- /dev/null
@@ -0,0 +1,31 @@
+WebCScope Installation
+
+Quick Install
+
+0. Create a directory called cscope under your /cgi-bin (virtual) directory.
+       Copy all the files in the distribution to this directory.
+
+1. Edit the 'cscope' file and change the following items:
+       - Location to the perl interpreter
+       - Location of the cscope database and other modifiable parameters
+       - Feedback name and email
+       - Location of the syntax highlighter, if you wish to use it
+
+2. Syntax highlighter
+       - The syntax highlighter must be built if you decide to use it.  If you
+               do not want syntax highlighting, you can ignore this step and set the
+               highlighter to /bin/cat.
+       - Compile 'hilite.c' using 'gcc -o hilite hilite.c'
+
+3. Icons
+       - Copy the images from the icons directory into the /icons (virtual)
+               directory on the web server.  You can also replace these images with
+               whatever you choose.
+
+4. Organizing your CScope databases
+       - WebCScope supports multiple databases in $cscopedir
+       - Create a directory for each project or sub-source in $cscopedir and, 
+               generate your cscope database using the following commands.
+               - find /some/source/dir -name '*.[chyls]' -print > cscope.files
+               - cscope -b -q
+       - Repeat the above step for each database you wish to create
diff --git a/contrib/webcscope/LICENSE b/contrib/webcscope/LICENSE
new file mode 100644 (file)
index 0000000..5b6e7c6
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/contrib/webcscope/TODO b/contrib/webcscope/TODO
new file mode 100644 (file)
index 0000000..4e61555
--- /dev/null
@@ -0,0 +1,5 @@
+
+- Better error checking and the like
+- Add a more robust cookie mechanism
+- More efficient way of searching 'all' databases
+- Fix bugs
diff --git a/contrib/webcscope/cgi-lib.pl b/contrib/webcscope/cgi-lib.pl
new file mode 100644 (file)
index 0000000..97d0caa
--- /dev/null
@@ -0,0 +1,471 @@
+# Perl Routines to Manipulate CGI input
+# cgi-lib@pobox.com
+# $Id: cgi-lib.pl,v 1.1 2001/06/29 14:20:16 petr Exp $
+#
+# Copyright (c) 1993-1999 Steven E. Brenner  
+# Unpublished work.
+# Permission granted to use and modify this library so long as the
+# copyright above is maintained, modifications are documented, and
+# credit is given for any use of the library.
+#
+# Thanks are due to many people for reporting bugs and suggestions
+
+# For more information, see:
+#     http://cgi-lib.stanford.edu/cgi-lib/
+
+$cgi_lib'version = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/);
+
+
+# Parameters affecting cgi-lib behavior
+# User-configurable parameters affecting file upload.
+$cgi_lib'maxdata    = 131072;    # maximum bytes to accept via POST - 2^17
+$cgi_lib'writefiles =      0;    # directory to which to write files, or
+                                 # 0 if files should not be written
+$cgi_lib'filepre    = "cgi-lib"; # Prefix of file names, in directory above
+
+# Do not change the following parameters unless you have special reasons
+$cgi_lib'bufsize  =  8192;    # default buffer size when reading multipart
+$cgi_lib'maxbound =   100;    # maximum boundary length to be encounterd
+$cgi_lib'headerout =    0;    # indicates whether the header has been printed
+
+
+# ReadParse
+# Reads in GET or POST data, converts it to unescaped text, and puts
+# key/value pairs in %in, using "\0" to separate multiple selections
+
+# Returns >0 if there was input, 0 if there was no input 
+# undef indicates some failure.
+
+# Now that cgi scripts can be put in the normal file space, it is useful
+# to combine both the form and the script in one place.  If no parameters
+# are given (i.e., ReadParse returns FALSE), then a form could be output.
+
+# If a reference to a hash is given, then the data will be stored in that
+# hash, but the data from $in and @in will become inaccessable.
+# If a variable-glob (e.g., *cgi_input) is the first parameter to ReadParse,
+# information is stored there, rather than in $in, @in, and %in.
+# Second, third, and fourth parameters fill associative arrays analagous to
+# %in with data relevant to file uploads. 
+
+# If no method is given, the script will process both command-line arguments
+# of the form: name=value and any text that is in $ENV{'QUERY_STRING'}
+# This is intended to aid debugging and may be changed in future releases
+
+sub ReadParse {
+  # Disable warnings as this code deliberately uses local and environment
+  # variables which are preset to undef (i.e., not explicitly initialized)
+  local ($perlwarn);
+  $perlwarn = $^W;
+  $^W = 0;
+
+  local (*in) = shift if @_;    # CGI input
+  local (*incfn,                # Client's filename (may not be provided)
+        *inct,                 # Client's content-type (may not be provided)
+        *insfn) = @_;          # Server's filename (for spooled files)
+  local ($len, $type, $meth, $errflag, $cmdflag, $got, $name);
+       
+  binmode(STDIN);   # we need these for DOS-based systems
+  binmode(STDOUT);  # and they shouldn't hurt anything else 
+  binmode(STDERR);
+       
+  # Get several useful env variables
+  $type = $ENV{'CONTENT_TYPE'};
+  $len  = $ENV{'CONTENT_LENGTH'};
+  $meth = $ENV{'REQUEST_METHOD'};
+  
+  if ($len > $cgi_lib'maxdata) { #'
+      &CgiDie("cgi-lib.pl: Request to receive too much data: $len bytes\n");
+  }
+  
+  if (!defined $meth || $meth eq '' || $meth eq 'GET' || 
+      $meth eq 'HEAD' ||
+      $type eq 'application/x-www-form-urlencoded') {
+    local ($key, $val, $i);
+       
+    # Read in text
+    if (!defined $meth || $meth eq '') {
+      $in = $ENV{'QUERY_STRING'};
+      $cmdflag = 1;  # also use command-line options
+    } elsif($meth eq 'GET' || $meth eq 'HEAD') {
+      $in = $ENV{'QUERY_STRING'};
+    } elsif ($meth eq 'POST') {
+        if (($got = read(STDIN, $in, $len) != $len))
+         {$errflag="Short Read: wanted $len, got $got\n";};
+    } else {
+      &CgiDie("cgi-lib.pl: Unknown request method: $meth\n");
+    }
+
+    @in = split(/[&;]/,$in); 
+    push(@in, @ARGV) if $cmdflag; # add command-line parameters
+
+    foreach $i (0 .. $#in) {
+      # Convert plus to space
+      $in[$i] =~ s/\+/ /g;
+
+      # Split into key and value.  
+      ($key, $val) = split(/=/,$in[$i],2); # splits on the first =.
+
+      # Convert %XX from hex numbers to alphanumeric
+      $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
+      $val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
+
+      # Associate key and value
+      $in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator
+      $in{$key} .= $val;
+    }
+
+  } elsif ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) {
+    # for efficiency, compile multipart code only if needed
+$errflag = !(eval <<'END_MULTIPART');
+
+    local ($buf, $boundary, $head, @heads, $cd, $ct, $fname, $ctype, $blen);
+    local ($bpos, $lpos, $left, $amt, $fn, $ser);
+    local ($bufsize, $maxbound, $writefiles) = 
+      ($cgi_lib'bufsize, $cgi_lib'maxbound, $cgi_lib'writefiles);
+
+
+    # The following lines exist solely to eliminate spurious warning messages
+    $buf = ''; 
+
+    ($boundary) = $type =~ /boundary="([^"]+)"/; #";   # find boundary
+    ($boundary) = $type =~ /boundary=(\S+)/ unless $boundary;
+    &CgiDie ("Boundary not provided: probably a bug in your server") 
+      unless $boundary;
+    $boundary =  "--" . $boundary;
+    $blen = length ($boundary);
+
+    if ($ENV{'REQUEST_METHOD'} ne 'POST') {
+      &CgiDie("Invalid request method for  multipart/form-data: $meth\n");
+    }
+
+    if ($writefiles) {
+      local($me);
+      stat ($writefiles);
+      $writefiles = "/tmp" unless  -d _ && -w _;
+      # ($me) = $0 =~ m#([^/]*)$#;
+      $writefiles .= "/$cgi_lib'filepre"; 
+    }
+
+    # read in the data and split into parts:
+    # put headers in @in and data in %in
+    # General algorithm:
+    #   There are two dividers: the border and the '\r\n\r\n' between
+    # header and body.  Iterate between searching for these
+    #   Retain a buffer of size(bufsize+maxbound); the latter part is
+    # to ensure that dividers don't get lost by wrapping between two bufs
+    #   Look for a divider in the current batch.  If not found, then
+    # save all of bufsize, move the maxbound extra buffer to the front of
+    # the buffer, and read in a new bufsize bytes.  If a divider is found,
+    # save everything up to the divider.  Then empty the buffer of everything
+    # up to the end of the divider.  Refill buffer to bufsize+maxbound
+    #   Note slightly odd organization.  Code before BODY: really goes with
+    # code following HEAD:, but is put first to 'pre-fill' buffers.  BODY:
+    # is placed before HEAD: because we first need to discard any 'preface,'
+    # which would be analagous to a body without a preceeding head.
+
+    $left = $len;
+   PART: # find each part of the multi-part while reading data
+    while (1) {
+      die $@ if $errflag;
+
+      $amt = ($left > $bufsize+$maxbound-length($buf) 
+             ?  $bufsize+$maxbound-length($buf): $left);
+      $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
+      die "Short Read: wanted $amt, got $got\n" if $errflag;
+      $left -= $amt;
+
+      $in{$name} .= "\0" if defined $in{$name}; 
+      $in{$name} .= $fn if $fn;
+
+      $name=~/([-\w]+)/;  # This allows $insfn{$name} to be untainted
+      if (defined $1) {
+        $insfn{$1} .= "\0" if defined $insfn{$1}; 
+        $insfn{$1} .= $fn if $fn;
+      }
+     BODY: 
+      while (($bpos = index($buf, $boundary)) == -1) {
+        if ($left == 0 && $buf eq '') {
+         foreach $value (values %insfn) {
+            unlink(split("\0",$value));
+         }
+         &CgiDie("cgi-lib.pl: reached end of input while seeking boundary " .
+                 "of multipart. Format of CGI input is wrong.\n");
+        }
+        die $@ if $errflag;
+        if ($name) {  # if no $name, then it's the prologue -- discard
+          if ($fn) { print FILE substr($buf, 0, $bufsize); }
+          else     { $in{$name} .= substr($buf, 0, $bufsize); }
+        }
+        $buf = substr($buf, $bufsize);
+        $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf);
+        $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
+       die "Short Read: wanted $amt, got $got\n" if $errflag;
+        $left -= $amt;
+      }
+      if (defined $name) {  # if no $name, then it's the prologue -- discard
+        if ($fn) { print FILE substr($buf, 0, $bpos-2); }
+        else     { $in {$name} .= substr($buf, 0, $bpos-2); } # kill last \r\n
+      }
+      close (FILE);
+      last PART if substr($buf, $bpos + $blen, 2) eq "--";
+      substr($buf, 0, $bpos+$blen+2) = '';
+      $amt = ($left > $bufsize+$maxbound-length($buf) 
+             ? $bufsize+$maxbound-length($buf) : $left);
+      $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
+      die "Short Read: wanted $amt, got $got\n" if $errflag;
+      $left -= $amt;
+
+
+      undef $head;  undef $fn;
+     HEAD:
+      while (($lpos = index($buf, "\r\n\r\n")) == -1) { 
+        if ($left == 0  && $buf eq '') {
+         foreach $value (values %insfn) {
+            unlink(split("\0",$value));
+         }
+         &CgiDie("cgi-lib: reached end of input while seeking end of " .
+                 "headers. Format of CGI input is wrong.\n$buf");
+        }
+        die $@ if $errflag;
+        $head .= substr($buf, 0, $bufsize);
+        $buf = substr($buf, $bufsize);
+        $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf);
+        $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt);
+        die "Short Read: wanted $amt, got $got\n" if $errflag;
+        $left -= $amt;
+      }
+      $head .= substr($buf, 0, $lpos+2);
+      push (@in, $head);
+      @heads = split("\r\n", $head);
+      ($cd) = grep (/^\s*Content-Disposition:/i, @heads);
+      ($ct) = grep (/^\s*Content-Type:/i, @heads);
+
+      ($name) = $cd =~ /\bname="([^"]+)"/i; #"; 
+      ($name) = $cd =~ /\bname=([^\s:;]+)/i unless defined $name;  
+
+      ($fname) = $cd =~ /\bfilename="([^"]*)"/i; #"; # filename can be null-str
+      ($fname) = $cd =~ /\bfilename=([^\s:;]+)/i unless defined $fname;
+      $incfn{$name} .= (defined $in{$name} ? "\0" : "") . 
+        (defined $fname ? $fname : "");
+
+      ($ctype) = $ct =~ /^\s*Content-type:\s*"([^"]+)"/i;  #";
+      ($ctype) = $ct =~ /^\s*Content-Type:\s*([^\s:;]+)/i unless defined $ctype;
+      $inct{$name} .= (defined $in{$name} ? "\0" : "") . $ctype;
+
+      if ($writefiles && defined $fname) {
+        $ser++;
+       $fn = $writefiles . ".$$.$ser";
+       open (FILE, ">$fn") || &CgiDie("Couldn't open $fn\n");
+        binmode (FILE);  # write files accurately
+      }
+      substr($buf, 0, $lpos+4) = '';
+      undef $fname;
+      undef $ctype;
+    }
+
+1;
+END_MULTIPART
+    if ($errflag) {
+      local ($errmsg, $value);
+      $errmsg = $@ || $errflag;
+      foreach $value (values %insfn) {
+        unlink(split("\0",$value));
+      }
+      &CgiDie($errmsg);
+    } else {
+      # everything's ok.
+    }
+  } else {
+    &CgiDie("cgi-lib.pl: Unknown Content-type: $ENV{'CONTENT_TYPE'}\n");
+  }
+
+  # no-ops to avoid warnings
+  $insfn = $insfn;
+  $incfn = $incfn;
+  $inct  = $inct;
+
+  $^W = $perlwarn;
+
+  return ($errflag ? undef :  scalar(@in)); 
+}
+
+
+# PrintHeader
+# Returns the magic line which tells WWW that we're an HTML document
+
+sub PrintHeader {
+  return "Content-type: text/html\n\n";
+}
+
+
+# HtmlTop
+# Returns the <head> of a document and the beginning of the body
+# with the title and a body <h1> header as specified by the parameter
+
+sub HtmlTop
+{
+  local ($title) = @_;
+
+  return <<END_OF_TEXT;
+<html>
+<head>
+<title>$title</title>
+</head>
+<body>
+<h1>$title</h1>
+END_OF_TEXT
+}
+
+
+# HtmlBot
+# Returns the </body>, </html> codes for the bottom of every HTML page
+
+sub HtmlBot
+{
+  return "</body>\n</html>\n";
+}
+
+
+# SplitParam
+# Splits a multi-valued parameter into a list of the constituent parameters
+
+sub SplitParam
+{
+  local ($param) = @_;
+  local (@params) = split ("\0", $param);
+  return (wantarray ? @params : $params[0]);
+}
+
+
+# MethGet
+# Return true if this cgi call was using the GET request, false otherwise
+
+sub MethGet {
+  return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "GET");
+}
+
+
+# MethPost
+# Return true if this cgi call was using the POST request, false otherwise
+
+sub MethPost {
+  return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "POST");
+}
+
+
+# MyBaseUrl
+# Returns the base URL to the script (i.e., no extra path or query string)
+sub MyBaseUrl {
+  local ($ret, $perlwarn);
+  $perlwarn = $^W; $^W = 0;
+  $ret = 'http://' . $ENV{'SERVER_NAME'} .  
+         ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') .
+         $ENV{'SCRIPT_NAME'};
+  $^W = $perlwarn;
+  return $ret;
+}
+
+
+# MyFullUrl
+# Returns the full URL to the script (i.e., with extra path or query string)
+sub MyFullUrl {
+  local ($ret, $perlwarn);
+  $perlwarn = $^W; $^W = 0;
+  $ret = 'http://' . $ENV{'SERVER_NAME'} .  
+         ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') .
+         $ENV{'SCRIPT_NAME'} . $ENV{'PATH_INFO'} .
+         (length ($ENV{'QUERY_STRING'}) ? "?$ENV{'QUERY_STRING'}" : '');
+  $^W = $perlwarn;
+  return $ret;
+}
+
+
+# MyURL
+# Returns the base URL to the script (i.e., no extra path or query string)
+# This is obsolete and will be removed in later versions
+sub MyURL  {
+  return &MyBaseUrl;
+}
+
+
+# CgiError
+# Prints out an error message which which containes appropriate headers,
+# markup, etcetera.
+# Parameters:
+#  If no parameters, gives a generic error message
+#  Otherwise, the first parameter will be the title and the rest will 
+#  be given as different paragraphs of the body
+
+sub CgiError {
+  local (@msg) = @_;
+  local ($i,$name);
+
+  if (!@msg) {
+    $name = &MyFullUrl;
+    @msg = ("Error: script $name encountered fatal error\n");
+  };
+
+  if (!$cgi_lib'headerout) { #')
+    print &PrintHeader;        
+    print "<html>\n<head>\n<title>$msg[0]</title>\n</head>\n<body>\n";
+  }
+  print "<h1>$msg[0]</h1>\n";
+  foreach $i (1 .. $#msg) {
+    print "<p>$msg[$i]</p>\n";
+  }
+
+  $cgi_lib'headerout++;
+}
+
+
+# CgiDie
+# Identical to CgiError, but also quits with the passed error message.
+
+sub CgiDie {
+  local (@msg) = @_;
+  &CgiError (@msg);
+  die @msg;
+}
+
+
+# PrintVariables
+# Nicely formats variables.  Three calling options:
+# A non-null associative array - prints the items in that array
+# A type-glob - prints the items in the associated assoc array
+# nothing - defaults to use %in
+# Typical use: &PrintVariables()
+
+sub PrintVariables {
+  local (*in) = @_ if @_ == 1;
+  local (%in) = @_ if @_ > 1;
+  local ($out, $key, $output);
+
+  $output =  "\n<dl compact>\n";
+  foreach $key (sort keys(%in)) {
+    foreach (split("\0", $in{$key})) {
+      ($out = $_) =~ s/\n/<br>\n/g;
+      $output .=  "<dt><b>$key</b>\n <dd>:<i>$out</i>:<br>\n";
+    }
+  }
+  $output .=  "</dl>\n";
+
+  return $output;
+}
+
+# PrintEnv
+# Nicely formats all environment variables and returns HTML string
+sub PrintEnv {
+  &PrintVariables(*ENV);
+}
+
+
+# The following lines exist only to avoid warning messages
+$cgi_lib'writefiles =  $cgi_lib'writefiles;
+$cgi_lib'bufsize    =  $cgi_lib'bufsize ;
+$cgi_lib'maxbound   =  $cgi_lib'maxbound;
+$cgi_lib'version    =  $cgi_lib'version;
+$cgi_lib'filepre    =  $cgi_lib'filepre;
+
+1; #return true 
+
diff --git a/contrib/webcscope/cscope b/contrib/webcscope/cscope
new file mode 100644 (file)
index 0000000..1ed2e5c
--- /dev/null
@@ -0,0 +1,450 @@
+#!/usr/bin/perl
+
+# $Id: cscope,v 1.2 2007/01/07 12:34:01 broeker Exp $
+#
+# WebCscope: A web interface to the cscope application
+# Copyright (C) 2001, Ragho Mahalingam <ragho@mahalingam.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# Change History:
+# 
+# $Log: cscope,v $
+# Revision 1.2  2007/01/07 12:34:01  broeker
+# Direct attention to security issues with webcscope.
+#
+# Revision 1.1  2001/06/29 14:20:16  petr
+# Added webcscope to contribs.
+#
+# Revision 1.3.4.1  2001/02/05 15:14:34  rmahalin
+# initial release with some bug fixes
+#
+# Revision 1.3.3.1  2001/01/22 22:21:23  rmahalin
+# added multi-database support
+# fixed cookie support for trivial functions; removed global trivials
+# added syntax highlighting for files displayed on browser
+#
+# Revision 1.3.1.1  2001/01/11 22:17:30  rmahalin
+# added direct download with mime-type 'text/c-source' and made cosmetic changes
+#
+# Revision 1.3  2001/01/11 21:36:39  rmahalin
+# *** empty log message ***
+#
+# Revision 1.2  2001/01/11 21:34:13  rmahalin
+# incorporated draft feedback changes
+#
+# Revision 1.1  2001/01/11 21:19:32  rmahalin
+# Initial revision
+#
+
+require "cgi-lib.pl";
+
+# current code version being used
+$version = "iSOS 2.5/int16";
+# full path to the cscope binary
+$cscopecmd = "/usr/global/bin/cscope";
+# cscope working directory, where all the in/out and db files are stored
+$cscopedir = "/usr/local/cscope";
+# trivial functions not to display, one per line in the trivs file
+$trivs = "/usr/local/htdocs/cscope/trivials";
+# temporary storage directory
+$tmpdir = "/tmp";
+$tmpinfile = $tmpdir . "/cscopein.$$";
+$tmpoutfile = $tmpdir . "/cscopeout.$$";
+$showfile = $tmpdir . "/showfile.$$";
+# C syntax highlighting application or uncomment the line beneath to just cat
+#$hiliter = "/bin/cat";
+$hiliter = "/usr/local/cgi-bin/cscope/hilite";
+($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time+1000000);
+$cookie_exp = sprintf("%s %02d-%s-%s %02d:%02d:%02d GMT", $wday, $mday, $mon, $year, $hour, $min, $sec);
+
+# standard images, from the apache distribution
+$img{openfile} = "/icons/folder.gif";
+$img{downloadfile} = "/icons/folder.open.gif";
+$img{csymbol} = "/icons/c.gif";
+$img{upfunc} = "/icons/up.gif";
+$img{downfunc} = "/icons/down.gif";
+$img{globalfunc} = "/icons/world2.gif";
+$img{trashfunc} = "/icons/bomb.gif";
+$img{untrashfunc} = "/icons/back.gif";
+$img{back} = "/icons/left.gif";
+
+# feedback details
+$comment{name} = "Ragho Mahalingam";
+$comment{email} = "ragho\@mahalingam.com";
+
+# operations allowed
+@oper = ( "Find this C symbol",
+"Find this global symbol",
+"Find functions called by",
+"Find functions calling",
+"Find this text string",
+"---------------------",
+"Find this egrep pattern",
+"Find this file",
+"Find files #including this file" );
+
+# -- removed global trivial function list in favor of customized trivials
+#open(TRIVIAL_FUNC, $trivs);
+#@trivial = <TRIVIAL_FUNC>;
+#close(TRIVIAL_FUNC);
+@trivial = ();
+
+MAIN:
+
+{
+   $starttime = time;
+
+       if (&ReadParse(*input)) {
+               &ProcessCookie;
+               &ProcessForm;
+       } else {
+               &PrintForm;
+       }
+}
+
+sub ProcessCookie {
+
+       if ( defined $ENV{HTTP_COOKIE} ) {
+               ($var, $val) = split('=',$ENV{HTTP_COOKIE});
+               $Cookie{$var} = $val;
+      if ( defined $Cookie{'cs-trivf'} ) {
+         # do nothing, else initialize it to null
+      } else {
+         $Cookie{'cs-trivf'} = "defined";
+      }
+      @loc_trivial = split(',', $Cookie{'cs-trivf'});
+      @trivial = ( @loc_trivial );
+
+       }
+}
+
+sub ProcessTrashForm {
+
+               if ( defined $input{'trash'} ) {
+                               @trivial = (@trivial, $input{'func'});
+      } else {
+                               @tmptriv = ();
+                               for ($i=0; $i <= $#trivial; $i++) {
+                       $fhash = unpack('H*', $input{'func'});
+                       $thash = unpack('H*', $trivial[$i]);
+                       if ( $fhash != $thash ) { 
+                                               @tmptriv = ( @tmptriv, $trivial[$i] );
+                                       }
+                               }
+                               @trivial = @tmptriv;
+               }
+
+               $Cookie{'cs-trivf'} = join(',',@trivial);
+
+               print "Content-type: text/html\n";
+               print "Set-Cookie: cs-trivf=$Cookie{'cs-trivf'}; path=$ENV{SCRIPT_NAME}; expires $cookie_exp\n\n";
+               print &HtmlTop("Your WebCScope Trivial Functions");
+               print "<ul>";
+               for ($i=0; $i <= $#trivial; $i++) {
+                       print "<li><a href=\"$ENV{SCRIPT_NAME}?untrash=&func=$trivial[$i]\"><img src=$img{untrashfunc} border=0></a>&nbsp; $trivial[$i]";
+               }
+               print "</ul><hr>\n";
+               print "Click <a href=\"#\" onClick=\"history.back();\"><img src=$img{back} border=0></a> to go back.\n";
+               print &HtmlBot;
+
+}
+
+sub ProcessForm {
+   
+   chdir $cscopedir;
+   opendir(DIRLIST,$cscopedir);
+   @dirlist = readdir(DIRLIST);
+   closedir(DIRLIST);
+
+       if ( $input{'db'} eq "all" ) {
+               @csdirs = ();
+               for ($i=0; $i <= $#dirlist; $i++ ) {
+        if ( ($dirlist[$i] ne ".") && ($dirlist[$i] ne "..") && ( -d $dirlist[$i] ) ) {
+            @csdirs = ( @csdirs, $dirlist[$i] );
+        }
+      }
+       } else {
+               @csdirs = ( $input{'db'} );
+       }
+
+   $op = $input{'op'};
+   $arg = $input{'arg'};
+   $shtriv = $input{'triv'};
+       $db = $input{'db'};
+
+   if ( defined $input{'fshow'} ) { &ShowFileForm; exit; }
+   if ( defined $input{'load'} ) { &DownloadFileForm; exit; }
+   if ( (defined $input{'trash'}) || (defined $input{'untrash'}) ) { 
+                       &ProcessTrashForm; exit; }
+
+       print &PrintHeader;
+       print &HtmlTop ("WebCscope");
+   print <<ENDOFHDR;
+<h3>Instructions</h3><p>
+<ul>
+<li><img src=$img{csymbol}> will find a symbol with this name<br>
+<li><img src=$img{upfunc}> will find functions <i>calling</i> this function<br>
+<li><img src=$img{downfunc}> will find functions <i>called</i> by this 
+function<br>
+<li><img src=$img{globalfunc}> will locate a global definition of this name<br>
+<li><img src=$img{openfile}> will display this file and highlight 
+the fragment line<br>
+<li><img src=$img{downloadfile}> will download this file with mimetype "text/c-source"<br>
+<li><img src=$img{trashfunc}> will add this symbol/function to your trivial list<br>
+</ul>
+<p><hr>
+ENDOFHDR
+
+ foreach $index ( 0 .. $#csdirs ) {
+
+       unlink $tmpinfile, $tmpoutfile;
+       open(CSCOPEIN, ">$tmpinfile");
+       print CSCOPEIN "$op$arg\n";
+       print CSCOPEIN "exit\n";
+       close(CSCOPEIN);
+
+       $dbdir = $cscopedir . "/" . $csdirs[$index];
+       chdir($dbdir);
+
+       $syscmd = "cd $dbdir; $cscopecmd -d -l < $tmpinfile > $tmpoutfile;";
+       system($syscmd);
+
+   $count = 1;
+       open(CSCOPEIN, "$tmpoutfile");
+
+       $line = <CSCOPEIN>;
+       @temp =  split(' ',$line);
+       $numresult = $temp[2];
+
+       print <<ENDOFHDRs;
+<h2>Search Results from <b>$csdirs[$index]</b></h2>
+<font size=+1>$oper[$op]: <b>$arg</b></font><br>
+Matches: $numresult<p>
+<table border=1 cellpadding=2 cellspacing=2>
+<tr><td><b>Num</b></td><td><b>File</b></td><td><b>Function</b></td>
+<td><b>Line</b></td><td><b>Fragment</b></td></tr>
+ENDOFHDRs
+
+       $trivs_rm = 0;
+
+   for ($i=0; $i < $numresult; $i++ ) {
+       $line = <CSCOPEIN>;
+       @fields = split(' ',$line);
+       $file = shift @fields;
+       $fshowfile = $file;
+       $func = shift @fields;
+       $lnum = shift @fields;
+       @filef = split('/',$file);
+       $file = $filef[$#filef];
+       $frag = join(' ',@fields);
+
+        if ( ! $shtriv ) {
+               for ( $j=0; $j <= $#trivial; $j++ )
+      {
+          $fhash = unpack('H*', $func);
+          $thash = unpack('H*', $trivial[$j]);
+          if ( $fhash == $thash ) { $trivs_rm++; goto done; }
+      }
+    }
+
+    if ( $func ne "<global>" && $func ne "<unknown>" ) {
+              print <<ENDOFBODY1;
+<tr><td>$count</td>
+<td><a href="$ENV{SCRIPT_NAME}?fshow=1&fshowfile=$fshowfile&line=$lnum&db=$db">
+<img src=$img{openfile} border=0></a> $file
+ <a href="$ENV{SCRIPT_NAME}?load=1&file=$fshowfile&db=$db">
+<img src=$img{downloadfile} border=0></a>
+</td>
+<td><a href="$ENV{SCRIPT_NAME}?op=0&triv=$shtriv&arg=$func&db=$db">
+<img src=$img{csymbol} border=0></a>
+<a href="$ENV{SCRIPT_NAME}?op=3&triv=$shtriv&arg=$func&db=$db">
+<img src=$img{upfunc} border=0></a>
+$func
+<a href="$ENV{SCRIPT_NAME}?op=2&triv=$shtriv&arg=$func&db=$db">
+<img src=$img{downfunc} border=0></a>
+<a href="$ENV{SCRIPT_NAME}?op=1&triv=$shtriv&arg=$func&db=$db">
+<img src=$img{globalfunc} border=0></a>
+<a href="$ENV{SCRIPT_NAME}?trash=&func=$func&db=$db">
+<img src=$img{trashfunc} border=0></a>
+</td>
+<td>$lnum</td>
+<td>$frag</td></tr>
+ENDOFBODY1
+
+} else {
+                        $func =~ tr/<>/[]/;
+              print <<ENDOFBODY2;
+<tr><td>$count</td>
+<td><a href="$ENV{SCRIPT_NAME}?fshow=1&fshowfile=$fshowfile&line=$lnum&db=$db">
+<img src=$img{openfile} border=0></a> $file
+ <a href="$ENV{SCRIPT_NAME}?load=1&file=$fshowfile&db=$db">
+<img src=$img{downloadfile} border=0></a>
+</td>
+<td>$func</td>
+<td>$lnum</td>
+<td><$frag</td></tr>
+ENDOFBODY2
+
+}
+
+       $count++;
+done:
+   
+   }
+
+       close(CSCOPEIN);
+   print "</table>\n";
+   print "<br>Eliminated $trivs_rm line item(s) as trivial functions<p><hr>\n";
+   unlink $tmpinfile, $tmpoutfile;
+
+}
+
+   print &OperationTime;
+   print &Feedback;
+   print &HtmlBot;
+
+}
+
+sub DownloadFileForm {
+    $file = $input{'file'};
+    print "Content-type: text/c-source\n\n";
+    open(SHOWFILE, $file);
+    while (<SHOWFILE>) { print; }
+    close(SHOWFILE);
+}
+
+sub ShowFileForm {
+
+    $file = $input{'fshowfile'};
+    $lnum = $input{'line'};
+   
+       print &PrintHeader;
+       print &HtmlTop ("WebCscope");
+   print "<b>Note</b>: Click <a href=#ref><img src=$img{downfunc} border=0></a> to go to the reference line<p><hr>\n";
+   print "<hr>";
+
+       unlink $showfile;
+   system("$hiliter $file > $showfile");
+       open(SHOWFILE, $showfile);
+
+   $curline = 1;  
+   while ( <SHOWFILE> ) {
+       $line = $_;
+       if ( $curline == $lnum ) {
+          print "<a name=ref><blink>$line</blink>";
+       } else {
+          print $line;
+       }
+       $curline++;
+   }
+
+   close (SHOWFILE);
+
+   
+
+   print &OperationTime;
+   print &Feedback;
+   print &HtmlBot;
+}
+
+sub PrintForm {
+
+   chdir $cscopedir;
+   opendir(DIRLIST,$cscopedir);
+   @dirlist = readdir(DIRLIST);
+   closedir(DIRLIST);
+
+       @csdirs = ();
+   for ($i=0; $i <= $#dirlist; $i++ ) {
+       if ( ($dirlist[$i] ne ".") && ($dirlist[$i] ne "..") && ( -d $dirlist[$i] ) ) {
+          @csdirs = ( @csdirs, $dirlist[$i] );
+       }
+   }
+
+       print &PrintHeader;
+       print &HtmlTop ("Web-CScope");
+
+       print <<ENDOFTEXTA;
+<p style="color:red">Be aware that this webfrontend is insecure and allows viewing ALL apache readable files, including your configuration!</p>   
+Select an operation below and enter a symbol, function or text to search in
+the database.  The active version is $version.  Input is case-sensitive,
+so if your search returns no results, check the case and the symbol name.<hr>
+<form method="get" action="$ENV{SCRIPT_NAME}">
+<table border=0 cellpadding=2 cellspacing=2>
+<tr>
+<td>Operation:</td>
+<td>
+<select name="op">
+ENDOFTEXTA
+
+       foreach $opi ( 0 .. $#oper ) {
+          print "<option value=$opi>$oper[$opi]";
+       }
+
+       print <<ENDOFTEXTB;
+</select>
+</td>
+</tr>
+<tr>
+<td>CScope Database:</td>
+<td>
+<select name="db">
+       <option selected value="all">All Databases
+ENDOFTEXTB
+
+       for ($i=0; $i <= $#csdirs; $i++) {
+               print "   <option value=\"$csdirs[$i]\">$csdirs[$i]\n";
+       }
+
+       print <<ENDOFTEXT2;
+</select>
+<tr>
+<td>Symbol, function or text:</td>
+<td><input name="arg" size=30></td>
+</tr>
+<tr>
+<td></td>
+<td halign=center>Show trivial functions: 
+<input type=radio name="triv" value=1>Yes
+<input type=radio name="triv" value=0 checked>No
+<br><br>
+<input type="submit" value="Scope It!"></td>
+</tr>
+</table>
+<hr>
+</form>
+ENDOFTEXT2
+
+   print &Feedback;  
+       print &HtmlBot;
+}
+
+sub Feedback {
+
+  $feedback  = "<font size=-1>";
+  $feedback .= '$Id: cscope,v 1.2 2007/01/07 12:34:01 broeker Exp $<br>';
+  $feedback .= "$comment{name}<i>&lt;";
+  $feedback .= "<a href=\"mailto:$comment{email}\">";
+  $feedback .= "$comment{email}</a>&gt;</i></font>";
+  return $feedback;
+}
+
+sub OperationTime {
+
+   $deltime = time - $starttime;
+   return "Operation took $deltime second(s)<br>";
+
+}
diff --git a/contrib/webcscope/hilite.c b/contrib/webcscope/hilite.c
new file mode 100644 (file)
index 0000000..4f5af07
--- /dev/null
@@ -0,0 +1,360 @@
+/*
+ CopyRight (C) 1999, Dmitry Obukhov, dso@usa.net
+ mailto: dso@usa.net
+ http://www.EmbeddedStuff.com
+
+ ----------------------------------------------
+ Last modified 6 Apr 97
+ ----------------------------------------------
+ Converts C (C++) source to HTML code fragment
+ with syntax highlighting.
+ Since program written for personal purpose
+ the <TABLE> tags generated. This is optional
+ page format specific thing.
+
+ Usage: CTHM <input_file>. All output is done
+ to STDOUTPUT, error messages to STDERR.
+ For HTML fragment generation:
+     CHTM file.c > file.htm
+
+ - Some input convertion required to use this
+   code as CGI module. Will be done soon.
+ - Optimization required for blocks of EOL
+   comments
+*/
+
+#include <stdio.h>
+
+// ------------------- Decoding status values
+
+#define START        0
+#define INLINE       1
+#define DEFINE       2
+// ------------------- Decoding Remark
+#define REM1        20
+#define REM2        21
+#define REM_END     22
+#define REM_STAR    23
+#define REM_STAR_1  24
+#define STRING      25 // String is "like" remark
+
+
+// ------------------- HTML TAG Generation
+#define ON  1
+#define OFF 0
+
+// ------------------- HTML TAG type
+#define MODE_KEYWORD     0
+#define MODE_REMARK      2
+#define MODE_REMARK_EOL  4
+#define MODE_DEFINE      6
+#define MODE_STRING      8
+
+
+int is_delimeter(char c)
+{
+    int ii=0;
+    char dlms[] =
+    "\t\r\n (){}[]+-*/%\"'&|^~:;<>.,";
+    //--------------------------------
+    while (dlms[ii])
+    {
+        if (c==dlms[ii++]) return 1;
+    }
+    return 0;
+}
+
+int is_keyword(char * str)
+{
+    char * kwords[] =
+    {
+        "asm",          "auto",
+        "break",        "case",
+        "cdecl",        "char",
+        "class",        "const",
+        "continue",     "default",
+        "delete",       "do",
+        "double",       "else",
+        "enum",         "extern",
+        "far",          "float",
+        "for",          "friend",
+        "goto",         "huge",
+        "if",           "inline",
+        "int",          "interrupt",
+        "long",         "near",
+        "new",          "operator",
+        "pascal",       "private",
+        "protected",    "public",
+        "register",     "return",
+        "short",        "signed",
+        "sizeof",       "static",
+        "struct",       "switch",
+        "template",     "this",
+        "typedef",      "union",
+        "unsigned",     "virtual",
+        "void",         "volatile",
+        "while",        NULL
+    };
+    int ii=0;
+    int jj;
+    int check;
+
+    while (kwords[ii])
+    {
+        jj = 0;
+        check = 1;
+        while (kwords[ii][jj] && check)
+        {
+            if (str[jj] != kwords[ii][jj])
+            {
+               check = 0;
+            }
+            jj++;
+        }
+        if (check) return 1;
+        ii++;
+    }
+    return 0;
+}
+
+
+void set_mode(int on_off, int mode)
+{
+    char * tags[] =
+    {
+        //-------------------- KEYWORD
+        "<strong>",
+        "</strong>",
+        //-------------------- Classic remarks
+        "<font color=\"#336600\">",
+        "</font>",
+        //-------------------- EOL Remarks
+        "<font color=\"#336600\">",
+        "</font>",
+        //-------------------- #DEFINE
+        "<font color=\"#663300\"><strong>",
+        "</strong></font>",
+        //-------------------- "string"
+        "<font color=\"#0000CC\">",
+        "</font>",
+        NULL,  NULL
+    };
+    fprintf(stdout,tags[mode + 1 - on_off]);
+}
+
+void print_char_html(char c)
+{
+    switch (c)
+    {
+        case '<':
+             fprintf(stdout,"&lt;");
+             break;
+        case '>':
+             fprintf(stdout,"&gt;");
+             break;
+        case '"':
+             fprintf(stdout,"&quot;");
+             break;
+        case '&':
+             fprintf(stdout,"&amp;");
+             break;
+        case '|':
+             fprintf(stdout,"&brvbar;");
+             break;
+        default:
+             fprintf(stdout,"%c",c);
+    }
+}
+
+
+
+int main(int _argc, char** _argv)
+{
+   FILE *in, *out;
+   char c;
+   int  mode;
+   char buf[80];
+   int  bufidx = 0;
+   int  progress = 1;
+   int  echo;
+   int  saved_mode;
+   int  kw;
+   char tmpc;
+   char prevc;
+
+   if (_argc < 2)
+   {
+      fprintf(stderr,
+      "USAGE: c2html <file>\n");
+      return 1;
+   }
+
+
+   if ((in = fopen(_argv[1], "rt")) == NULL)
+   {
+      fprintf(stderr,
+      "Cannot open input file.\n");
+      return 1;
+   }
+
+       fprintf(stdout, "<pre>");
+   mode = START;
+
+   while (!feof(in) && progress)
+   {
+        echo = 1;
+        prevc = c;
+        c = fgetc(in);
+
+        if (c=='/' && (mode < REM1))
+        {
+            saved_mode = mode;
+            mode = REM1;
+        }
+
+        switch (mode)
+        {
+            case REM1:
+                 echo = 0;
+                 mode = REM2;
+                 break;
+
+            case REM2:
+                 if (c=='/')
+                 {
+                    if (saved_mode == DEFINE)
+                    {
+                      set_mode(OFF, MODE_DEFINE);
+                    }
+                    mode = REM_END;
+                    set_mode(ON, MODE_REMARK_EOL);
+                 }
+                 else if (c=='*')
+                 {
+                    if (saved_mode == DEFINE)
+                    {
+                      set_mode(OFF, MODE_DEFINE);
+                    }
+                    mode = REM_STAR;
+                    set_mode(ON, MODE_REMARK);
+                 }
+                 else
+                 {
+                    mode = saved_mode;
+                 }
+                 printf("/");
+                 break;
+
+            case REM_END:
+                 if (c=='\n')
+                 {
+                   set_mode(OFF, MODE_REMARK_EOL);
+                 }
+                 break;
+
+            case REM_STAR:
+                 if (c=='*')
+                 {
+                    mode = REM_STAR_1;
+                 }
+                 break;
+
+            case REM_STAR_1:
+                 if (c=='/')
+                 {
+                    mode = INLINE;
+                    fprintf(stdout,"/");
+                    echo = 0;
+                    set_mode(OFF, MODE_REMARK);
+                 }
+                 else mode = REM_STAR;
+                 break;
+
+            case START:
+                 if (c=='#')
+                 {
+                    mode = DEFINE;
+                    set_mode(ON, MODE_DEFINE);
+                    break;
+                 }
+                 else if (c==' ') break;
+
+                 mode = INLINE;
+                 // and continue in next case
+
+            case INLINE:
+                 if (c=='"' &&        //
+                     prevc != 0x27 && //
+                     prevc != '\\')   //
+                 {
+                    set_mode(ON, MODE_STRING);
+                    mode = STRING;
+                 }
+                 break;
+
+            case STRING:
+                 if (c=='"' && prevc != '\\')
+                 {
+                    print_char_html('"');
+                    set_mode(OFF, MODE_STRING);
+                    echo = 0;
+                    mode = INLINE;
+                 }
+                 break;
+
+            case DEFINE:
+                 if (c=='\n')
+                 {
+                    set_mode(OFF, MODE_DEFINE);
+                 }
+                 break;
+
+        }
+
+        if (echo && //
+            (mode == INLINE || //
+             (mode!=INLINE &&  //
+              bufidx)))        //
+        {
+            buf[bufidx++] = c;
+            buf[bufidx]   = 0;
+            if (is_delimeter(c))
+            {
+                kw = 0;
+                if (bufidx>2)
+                {
+                  kw = is_keyword(buf);
+                }
+                if (kw)
+                {
+                  set_mode(ON, MODE_KEYWORD);
+                }
+                tmpc = buf[bufidx-1];
+                buf[bufidx-1] = 0;
+                fprintf(stdout,"%s",buf);
+                if (kw)
+                {
+                  set_mode(OFF, MODE_KEYWORD);
+                }
+                print_char_html(tmpc);
+                bufidx = 0;
+                buf[0] = 0;
+            }
+        }
+        else if (echo) print_char_html(c);
+
+        if (c=='\n' && mode != REM_STAR)
+        {
+            mode = START;
+        }
+   }
+
+   fclose(in);
+   fprintf(stdout,"</pre>\n");
+   fprintf(stdout,
+   "<!-- == Generated by CHTM convertor -->\n");
+   fprintf(stdout,
+   "<!-- == CopyRight (C) 1999, Dmitry Obukhov, dso@usa.net -->\n");
+
+   return 0;
+}
diff --git a/contrib/webcscope/icons/back.gif b/contrib/webcscope/icons/back.gif
new file mode 100644 (file)
index 0000000..a694ae1
Binary files /dev/null and b/contrib/webcscope/icons/back.gif differ
diff --git a/contrib/webcscope/icons/bomb.gif b/contrib/webcscope/icons/bomb.gif
new file mode 100644 (file)
index 0000000..270fdb1
Binary files /dev/null and b/contrib/webcscope/icons/bomb.gif differ
diff --git a/contrib/webcscope/icons/c.gif b/contrib/webcscope/icons/c.gif
new file mode 100644 (file)
index 0000000..7555b6c
Binary files /dev/null and b/contrib/webcscope/icons/c.gif differ
diff --git a/contrib/webcscope/icons/down.gif b/contrib/webcscope/icons/down.gif
new file mode 100644 (file)
index 0000000..a354c87
Binary files /dev/null and b/contrib/webcscope/icons/down.gif differ
diff --git a/contrib/webcscope/icons/folder.gif b/contrib/webcscope/icons/folder.gif
new file mode 100644 (file)
index 0000000..4826460
Binary files /dev/null and b/contrib/webcscope/icons/folder.gif differ
diff --git a/contrib/webcscope/icons/folder.open.gif b/contrib/webcscope/icons/folder.open.gif
new file mode 100644 (file)
index 0000000..30979cb
Binary files /dev/null and b/contrib/webcscope/icons/folder.open.gif differ
diff --git a/contrib/webcscope/icons/left.gif b/contrib/webcscope/icons/left.gif
new file mode 100644 (file)
index 0000000..279e671
Binary files /dev/null and b/contrib/webcscope/icons/left.gif differ
diff --git a/contrib/webcscope/icons/up.gif b/contrib/webcscope/icons/up.gif
new file mode 100644 (file)
index 0000000..6d6d6d1
Binary files /dev/null and b/contrib/webcscope/icons/up.gif differ
diff --git a/contrib/webcscope/icons/world2.gif b/contrib/webcscope/icons/world2.gif
new file mode 100644 (file)
index 0000000..e3203f7
Binary files /dev/null and b/contrib/webcscope/icons/world2.gif differ
diff --git a/contrib/xcscope/cscope-indexer b/contrib/xcscope/cscope-indexer
new file mode 100644 (file)
index 0000000..13c0ae2
--- /dev/null
@@ -0,0 +1,166 @@
+#! /bin/sh
+###############################################################################
+#
+# File:         cscope-indexer
+# RCS:          $Header: /cvsroot/cscope/cscope/contrib/xcscope/cscope-indexer,v 1.2 2001/06/28 04:39:47 darrylo Exp $
+# Description:  Script to index files for cscope
+#
+#              This script generates a list of files to index
+#              (cscope.out), which is then (optionally) used to
+#              generate a cscope database.  You can use this script
+#              to just build a list of files, or it can be used to
+#              build a list and database.  This script is not used to
+#              just build a database (skipping the list of files
+#              step), as this can be simply done by just calling
+#              "cscope -b".
+#
+#              Normally, cscope will do its own indexing, but this
+#              script can be used to force indexing.  This is useful
+#              if you need to recurse into subdirectories, or have
+#              many files to index (you can run this script from a
+#              cron job, during the night).  It is especially useful
+#              for large projects, which can contstantly have source
+#              files added and deleted; by using this script, the
+#              changing sources files are automatically handled.
+#
+#              Currently, any paths containing "/CVS/" or "/RCS/" are
+#              stripped out (ignored).
+#
+#              This script is written to use only basic shell features, as
+#              not all shells have advanced features.
+#
+# Author:       Darryl Okahata
+# Created:      Thu Apr 27 17:12:14 2000
+# Modified:     Tue Jun 19 09:47:45 2001 (Darryl Okahata) darrylo@soco.agilent.com
+# Language:     Shell-script
+# Package:      N/A
+# Status:       Experimental
+#
+# (C) Copyright 2000, Darryl Okahata, all rights reserved.
+#
+###############################################################################
+#
+# Usage:
+#
+#     cscope-indexer [ -v ] [-f database_file ] [-i list_file ] [ -l ] [ -r ]
+#
+# where:
+#
+#     -f database_file
+#          Specifies the cscope database file (default: cscope.out).
+#
+#     -i list_file
+#          Specifies the name of the file into which the list of files
+#          to index is placed (default: cscope.files).
+#
+#     -l
+#          Suppress the generation/updating of the cscope database
+#          file.  Only a list of files is generated.
+#
+#     -r
+#          Recurse into subdirectories to locate files to index.
+#          Without this option, only the current directory is
+#          searched.
+#
+#     -v
+#          Be verbose.  Output simple progress messages.
+#
+#
+###############################################################################
+set -e
+
+# May have to edit this:
+PATH="/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin:$PATH"
+export PATH
+
+LIST_ONLY=
+DIR='.'
+LIST_FILE='cscope.files'
+DATABASE_FILE='cscope.out'
+RECURSE=
+VERBOSE=
+export DIR RECURSE                     # Need to pass these to subprocesses
+
+while [ -n "$1" ]
+do
+    case "$1" in
+    -f)
+       if [ "X$2" = "X" ]
+       then
+           echo "$0: No database file specified" >&2
+           exit 1
+       fi
+       DATABASE_FILE="$2"
+       shift
+       ;;
+    -i)
+       if [ "X$2" = "X" ]
+       then
+           echo "$0: No list file specified" >&2
+           exit 1
+       fi
+       LIST_FILE="$2"
+       shift
+       ;;
+    -l)
+       LIST_ONLY=1
+       ;;
+    -r)
+       RECURSE=1
+       ;;
+    -v)
+       VERBOSE=1
+       ;;
+    *)
+       DIR="$1"
+       ;;
+    esac
+    shift
+done
+
+cd $DIR
+
+if [ "X$VERBOSE" != "X" ]
+then
+    echo "Creating list of files to index ..."
+fi
+
+(
+    if [ "X$RECURSE" = "X" ]
+    then
+       # Ugly, inefficient, but it works.
+       for f in *
+       do
+           echo "$DIR/$f"
+       done
+    else
+       find $DIR \( -type f -o -type l \)
+    fi
+) | \
+    egrep -i '\.([chly](xx|pp)*|cc|hh)$' | \
+    sed -e '/\/CVS\//d' -e '/\/RCS\//d' -e 's/^\.\///' | \
+    sort > $LIST_FILE
+
+if [ "X$VERBOSE" != "X" ]
+then
+    echo "Creating list of files to index ... done"
+fi
+
+if [ "X$LIST_ONLY" != "X" ]
+then
+    exit 0
+fi
+
+if [ "X$VERBOSE" != "X" ]
+then
+    echo "Indexing files ..."
+fi
+
+cscope -b -i $LIST_FILE -f $DATABASE_FILE
+
+if [ "X$VERBOSE" != "X" ]
+then
+    echo "Indexing files ... done"
+fi
+
+exit 0
diff --git a/contrib/xcscope/xcscope.el b/contrib/xcscope/xcscope.el
new file mode 100644 (file)
index 0000000..ce382a4
--- /dev/null
@@ -0,0 +1,2463 @@
+; -*-Emacs-Lisp-*-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; File:         xcscope.el
+; RCS:          $RCSfile: xcscope.el,v $ $Revision: 1.14 $ $Date: 2002/04/10 16:59:00 $ $Author: darrylo $
+; Description:  cscope interface for (X)Emacs
+; Author:       Darryl Okahata
+; Created:      Wed Apr 19 17:03:38 2000
+; Modified:     Thu Apr  4 17:22:22 2002 (Darryl Okahata) darrylo@soco.agilent.com
+; Language:     Emacs-Lisp
+; Package:      N/A
+; Status:       Experimental
+;
+; (C) Copyright 2000, 2001, 2002, Darryl Okahata <darrylo@sonic.net>,
+;     all rights reserved.
+; GNU Emacs enhancements (C) Copyright 2001,
+;         Triet H. Lai <thlai@mail.usyd.edu.au>
+; Fuzzy matching and navigation code (C) Copyright 2001,
+;         Steven Elliott <selliott4@austin.rr.com>
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; ALPHA VERSION 0.96
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; This is a cscope interface for (X)Emacs.
+;; It currently runs under Unix only.
+;;
+;; Using cscope, you can easily search for where symbols are used and defined.
+;; Cscope is designed to answer questions like:
+;;
+;;         Where is this variable used?
+;;         What is the value of this preprocessor symbol?
+;;         Where is this function in the source files?
+;;         What functions call this function?
+;;         What functions are called by this function?
+;;         Where does the message "out of space" come from?
+;;         Where is this source file in the directory structure?
+;;         What files include this header file?
+;;
+;; Send comments to one of:     darrylo@soco.agilent.com
+;;                              darryl_okahata@agilent.com
+;;                              darrylo@sonic.net
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; ***** INSTALLATION *****
+;;
+;; * NOTE: this interface currently runs under Unix only.
+;;
+;; This module needs a shell script called "cscope-indexer", which
+;; should have been supplied along with this emacs-lisp file.  The
+;; purpose of "cscope-indexer" is to create and optionally maintain
+;; the cscope databases.  If all of your source files are in one
+;; directory, you don't need this script; it's very nice to have,
+;; though, as it handles recursive subdirectory indexing, and can be
+;; used in a nightly or weekly cron job to index very large source
+;; repositories.  See the beginning of the file, "cscope-indexer", for
+;; usage information.
+;;
+;; Installation steps:
+;;
+;; 0. (It is, of course, assumed that cscope is already properly
+;;    installed on the current system.)
+;;
+;; 1. Install the "cscope-indexer" script into some convenient
+;;    directory in $PATH.  The only real constraint is that (X)Emacs
+;;    must be able to find and execute it.  You may also have to edit
+;;    the value of PATH in the script, although this is unlikely; the
+;;    majority of people should be able to use the script, "as-is".
+;;
+;; 2. Make sure that the "cscope-indexer" script is executable.  In
+;;    particular, if you had to ftp this file, it is probably no
+;;    longer executable.
+;;
+;; 3. Put this emacs-lisp file somewhere where (X)Emacs can find it.  It
+;;    basically has to be in some directory listed in "load-path".
+;;
+;; 4. Edit your ~/.emacs file to add the line:
+;;
+;;      (require 'xcscope)
+;;
+;; 5. If you intend to use xcscope.el often you can optionally edit your
+;;    ~/.emacs file to add keybindings that reduce the number of keystrokes
+;;    required.  For example, the following will add "C-f#" keybindings, which
+;;    are easier to type than the usual "C-c s" prefixed keybindings.  Note
+;;    that specifying "global-map" instead of "cscope:map" makes the
+;;    keybindings available in all buffers:
+;;
+;;     (define-key global-map [(control f3)]  'cscope-set-initial-directory)
+;;     (define-key global-map [(control f4)]  'cscope-unset-initial-directory)
+;;     (define-key global-map [(control f5)]  'cscope-find-this-symbol)
+;;     (define-key global-map [(control f6)]  'cscope-find-global-definition)
+;;     (define-key global-map [(control f7)]
+;;       'cscope-find-global-definition-no-prompting)
+;;     (define-key global-map [(control f8)]  'cscope-pop-mark)
+;;     (define-key global-map [(control f9)]  'cscope-next-symbol)
+;;     (define-key global-map [(control f10)] 'cscope-next-file)
+;;     (define-key global-map [(control f11)] 'cscope-prev-symbol)
+;;     (define-key global-map [(control f12)] 'cscope-prev-file)
+;;      (define-key global-map [(meta f9)]  'cscope-display-buffer)
+;;      (defin-ekey global-map [(meta f10)] 'cscope-display-buffer-toggle)
+;;
+;; 6. Restart (X)Emacs.  That's it.
+;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; ***** USING THIS MODULE *****
+;;
+;; * Basic usage:
+;;
+;; If all of your C/C++/lex/yacc source files are in the same
+;; directory, you can just start using this module.  If your files are
+;; spread out over multiple directories, see "Advanced usage", below.
+;;
+;; Just edit a source file, and use the pull-down or pop-up (button 3)
+;; menus to select one of:
+;;
+;;         Find symbol
+;;         Find global definition
+;;         Find called functions
+;;         Find functions calling a function
+;;         Find text string
+;;         Find egrep pattern
+;;         Find a file
+;;         Find files #including a file
+;;
+;; The cscope database will be automatically created in the same
+;; directory as the source files (assuming that you've never used
+;; cscope before), and a buffer will pop-up displaying the results.
+;; You can then use button 2 (the middle button) on the mouse to edit
+;; the selected file, or you can move the text cursor over a selection
+;; and press [Enter].
+;;
+;; Hopefully, the interface should be fairly intuitive.
+;;
+;;
+;; * Locating the cscope databases:
+;;
+;; This module will first use the variable, `cscope-database-regexps',
+;; to search for a suitable database directory.  If a database location
+;; cannot be found using this variable then a search is begun at the
+;; variable, `cscope-initial-directory', if set, or the current
+;; directory otherwise.  If the directory is not a cscope database
+;; directory then the directory's parent, parent's parent, etc. is
+;; searched until a cscope database directory is found, or the root
+;; directory is reached.  If the root directory is reached, the current
+;; directory will be used.
+;;
+;; A cscope database directory is one in which EITHER a cscope database
+;; file (e.g., "cscope.out") OR a cscope file list (e.g.,
+;; "cscope.files") exists.  If only "cscope.files" exists, the
+;; corresponding "cscope.out" will be automatically created by cscope
+;; when a search is done.  By default, the cscope database file is called
+;; "cscope.out", but this can be changed (on a global basis) via the
+;; variable, `cscope-database-file'.  There is limited support for cscope
+;; databases that are named differently than that given by
+;; `cscope-database-file', using the variable, `cscope-database-regexps'.
+;;
+;; Note that the variable, `cscope-database-regexps', is generally not
+;; needed, as the normal hierarchical database search is sufficient
+;; for placing and/or locating the cscope databases.  However, there
+;; may be cases where it makes sense to place the cscope databases
+;; away from where the source files are kept; in this case, this
+;; variable is used to determine the mapping.  One use for this
+;; variable is when you want to share the database file with other
+;; users; in this case, the database may be located in a directory
+;; separate from the source files.  
+;;
+;; Setting the variable, `cscope-initial-directory', is useful when a
+;; search is to be expanded by specifying a cscope database directory
+;; that is a parent of the directory that this module would otherwise
+;; use.  For example, consider a project that contains the following
+;; cscope database directories:
+;;
+;;     /users/jdoe/sources
+;;     /users/jdoe/sources/proj1
+;;     /users/jdoe/sources/proj2
+;;
+;; If a search is initiated from a .c file in /users/jdoe/sources/proj1
+;; then (assuming the variable, `cscope-database-regexps', is not set)
+;; /users/jdoe/sources/proj1 will be used as the cscope data base directory.
+;; Only matches in files in /users/jdoe/sources/proj1 will be found.  This
+;; can be remedied by typing "C-c s a" and then "M-del" to remove single
+;; path element in order to use a cscope database directory of
+;; /users/jdoe/sources.  Normal searching can be restored by typing "C-c s A".
+;;
+;;
+;; * Keybindings:
+;;
+;; All keybindings use the "C-c s" prefix, but are usable only while
+;; editing a source file, or in the cscope results buffer:
+;;
+;;      C-c s s         Find symbol.
+;;      C-c s d         Find global definition.
+;;      C-c s g         Find global definition (alternate binding).
+;;      C-c s G         Find global definition without prompting.
+;;      C-c s c         Find functions calling a function.
+;;      C-c s C         Find called functions (list functions called
+;;                      from a function).
+;;      C-c s t         Find text string.
+;;      C-c s e         Find egrep pattern.
+;;      C-c s f         Find a file.
+;;      C-c s i         Find files #including a file.
+;;
+;; These pertain to navigation through the search results:
+;;
+;;      C-c s b         Display *cscope* buffer.
+;;      C-c s B         Auto display *cscope* buffer toggle.
+;;      C-c s n         Next symbol.
+;;      C-c s N         Next file.
+;;      C-c s p         Previous symbol.
+;;      C-c s P         Previous file.
+;;      C-c s u         Pop mark.
+;;
+;; These pertain to setting and unsetting the variable,
+;; `cscope-initial-directory', (location searched for the cscope database
+;;  directory):
+;;
+;;      C-c s a         Set initial directory.
+;;      C-c s A         Unset initial directory.
+;;
+;; These pertain to cscope database maintenance:
+;;
+;;      C-c s L         Create list of files to index.
+;;      C-c s I         Create list and index.
+;;      C-c s E         Edit list of files to index.
+;;      C-c s W         Locate this buffer's cscope directory
+;;                      ("W" --> "where").
+;;      C-c s S         Locate this buffer's cscope directory.
+;;                      (alternate binding: "S" --> "show").
+;;      C-c s T         Locate this buffer's cscope directory.
+;;                      (alternate binding: "T" --> "tell").
+;;      C-c s D         Dired this buffer's directory.
+;;
+;;
+;; * Advanced usage:
+;;
+;; If the source files are spread out over multiple directories,
+;; you've got a few choices:
+;;
+;; [ NOTE: you will need to have the script, "cscope-indexer",
+;;   properly installed in order for the following to work.  ]
+;;
+;; 1. If all of the directories exist below a common directory
+;;    (without any extraneous, unrelated subdirectories), you can tell
+;;    this module to place the cscope database into the top-level,
+;;    common directory.  This assumes that you do not have any cscope
+;;    databases in any of the subdirectories.  If you do, you should
+;;    delete them; otherwise, they will take precedence over the
+;;    top-level database.
+;;
+;;    If you do have cscope databases in any subdirectory, the
+;;    following instructions may not work right.
+;;
+;;    It's pretty easy to tell this module to use a top-level, common
+;;    directory:
+;;
+;;    a. Make sure that the menu pick, "Cscope/Index recursively", is
+;;       checked (the default value).
+;;
+;;    b. Select the menu pick, "Cscope/Create list and index", and
+;;       specify the top-level directory.  This will run the script,
+;;       "cscope-indexer", in the background, so you can do other
+;;       things if indexing takes a long time.  A list of files to
+;;       index will be created in "cscope.files", and the cscope
+;;       database will be created in "cscope.out".
+;;
+;;    Once this has been done, you can then use the menu picks
+;;    (described in "Basic usage", above) to search for symbols.
+;;
+;;    Note, however, that, if you add or delete source files, you'll
+;;    have to either rebuild the database using the above procedure,
+;;    or edit the file, "cscope.files" to add/delete the names of the
+;;    source files.  To edit this file, you can use the menu pick,
+;;    "Cscope/Edit list of files to index".
+;;
+;;
+;; 2. If most of the files exist below a common directory, but a few
+;;    are outside, you can use the menu pick, "Cscope/Create list of
+;;    files to index", and specify the top-level directory.  Make sure
+;;    that "Cscope/Index recursively", is checked before you do so,
+;;    though.  You can then edit the list of files to index using the
+;;    menu pick, "Cscope/Edit list of files to index".  Just edit the
+;;    list to include any additional source files not already listed.
+;;
+;;    Once you've created, edited, and saved the list, you can then
+;;    use the menu picks described under "Basic usage", above, to
+;;    search for symbols.  The first time you search, you will have to
+;;    wait a while for cscope to fully index the source files, though.
+;;    If you have a lot of source files, you may want to manually run
+;;    cscope to build the database:
+;;
+;;            cd top-level-directory    # or wherever
+;;            rm -f cscope.out          # not always necessary
+;;            cscope -b
+;;
+;;
+;; 3. If the source files are scattered in many different, unrelated
+;;    places, you'll have to manually create cscope.files and put a
+;;    list of all pathnames into it.  Then build the database using:
+;;
+;;            cd some-directory         # wherever cscope.files exists
+;;            rm -f cscope.out          # not always necessary
+;;            cscope -b
+;;
+;;    Next, read the documentation for the variable,
+;;    "cscope-database-regexps", and set it appropriately, such that
+;;    the above-created cscope database will be referenced when you
+;;    edit a related source file.
+;;
+;;    Once this has been done, you can then use the menu picks
+;;    described under "Basic usage", above, to search for symbols.
+;;
+;;
+;; * Interesting configuration variables:
+;;
+;; "cscope-truncate-lines"
+;;      This is the value of `truncate-lines' to use in cscope
+;;      buffers; the default is the current setting of
+;;      `truncate-lines'.  This variable exists because it can be
+;;      easier to read cscope buffers with truncated lines, while
+;;      other buffers do not have truncated lines.
+;;
+;; "cscope-use-relative-paths"
+;;      If non-nil, use relative paths when creating the list of files
+;;      to index.  The path is relative to the directory in which the
+;;      cscope database will be created.  If nil, absolute paths will
+;;      be used.  Absolute paths are good if you plan on moving the
+;;      database to some other directory (if you do so, you'll
+;;      probably also have to modify `cscope-database-regexps').
+;;      Absolute paths may also be good if you share the database file
+;;      with other users (you'll probably want to specify some
+;;      automounted network path for this).
+;;
+;; "cscope-index-recursively"
+;;      If non-nil, index files in the current directory and all
+;;      subdirectories.  If nil, only files in the current directory
+;;      are indexed.  This variable is only used when creating the
+;;      list of files to index, or when creating the list of files and
+;;      the corresponding cscope database.
+;;
+;; "cscope-name-line-width"
+;;      The width of the combined "function name:line number" field in
+;;      the cscope results buffer.  If negative, the field is
+;;      left-justified.
+;;
+;; "cscope-do-not-update-database"
+;;      If non-nil, never check and/or update the cscope database when
+;;      searching.  Beware of setting this to non-nil, as this will
+;;      disable automatic database creation, updating, and
+;;      maintenance.
+;;
+;; "cscope-display-cscope-buffer" 
+;;      If non-nil, display the *cscope* buffer after each search
+;;      (default).  This variable can be set in order to reduce the
+;;      number of keystrokes required to navigate through the matches.
+;;
+;; "cscope-database-regexps"
+;;     List to force directory-to-cscope-database mappings.
+;;     This is a list of `(REGEXP DBLIST [ DBLIST ... ])', where:
+;;
+;;     REGEXP is a regular expression matched against the current buffer's
+;;     current directory.  The current buffer is typically some source file,
+;;     and you're probably searching for some symbol in or related to this
+;;     file.  Basically, this regexp is used to relate the current directory
+;;     to a cscope database.  You need to start REGEXP with "^" if you want
+;;     to match from the beginning of the current directory.
+;;
+;;     DBLIST is a list that contains one or more of:
+;;
+;;         ( DBDIR )
+;;         ( DBDIR ( OPTIONS ) )
+;;         ( t )
+;;         t
+;;
+;;     Here, DBDIR is a directory (or a file) that contains a cscope
+;;     database.  If DBDIR is a directory, then it is expected that the
+;;     cscope database, if present, has the filename given by the variable,
+;;     `cscope-database-file'; if DBDIR is a file, then DBDIR is the path
+;;     name to a cscope database file (which does not have to be the same as
+;;     that given by `cscope-database-file').  If only DBDIR is specified,
+;;     then that cscope database will be searched without any additional
+;;     cscope command-line options.  If OPTIONS is given, then OPTIONS is a
+;;     list of strings, where each string is a separate cscope command-line
+;;     option.
+;;
+;;     In the case of "( t )", this specifies that the search is to use the
+;;     normal hierarchical database search.  This option is used to
+;;     explicitly search using the hierarchical database search either before
+;;     or after other cscope database directories.
+;;
+;;     If "t" is specified (not inside a list), this tells the searching
+;;     mechanism to stop searching if a match has been found (at the point
+;;     where "t" is encountered).  This is useful for those projects that
+;;     consist of many subprojects.  You can specify the most-used
+;;     subprojects first, followed by a "t", and then followed by a master
+;;     cscope database directory that covers all subprojects.  This will
+;;     cause the most-used subprojects to be searched first (hopefully
+;;     quickly), and the search will then stop if a match was found.  If not,
+;;     the search will continue using the master cscope database directory.
+;;
+;;     Here, `cscope-database-regexps' is generally not used, as the normal
+;;     hierarchical database search is sufficient for placing and/or locating
+;;     the cscope databases.  However, there may be cases where it makes
+;;     sense to place the cscope databases away from where the source files
+;;     are kept; in this case, this variable is used to determine the
+;;     mapping.
+;;
+;;     This module searches for the cscope databases by first using this
+;;     variable; if a database location cannot be found using this variable,
+;;     then the current directory is searched, then the parent, then the
+;;     parent's parent, until a cscope database directory is found, or the
+;;     root directory is reached.  If the root directory is reached, the
+;;     current directory will be used.
+;;
+;;     A cscope database directory is one in which EITHER a cscope database
+;;     file (e.g., "cscope.out") OR a cscope file list (e.g.,
+;;     "cscope.files") exists.  If only "cscope.files" exists, the
+;;     corresponding "cscope.out" will be automatically created by cscope
+;;     when a search is done.  By default, the cscope database file is called
+;;     "cscope.out", but this can be changed (on a global basis) via the
+;;     variable, `cscope-database-file'.  There is limited support for cscope
+;;     databases that are named differently than that given by
+;;     `cscope-database-file', using the variable, `cscope-database-regexps'.
+;;
+;;     Here is an example of `cscope-database-regexps':
+;;
+;;             (setq cscope-database-regexps
+;;                   '(
+;;                     ( "^/users/jdoe/sources/proj1"
+;;                       ( t )
+;;                       ( "/users/jdoe/sources/proj2")
+;;                       ( "/users/jdoe/sources/proj3/mycscope.out")
+;;                       ( "/users/jdoe/sources/proj4")
+;;                       t
+;;                       ( "/some/master/directory" ("-d" "-I/usr/local/include") )
+;;                       )
+;;                     ( "^/users/jdoe/sources/gnome/"
+;;                       ( "/master/gnome/database" ("-d") )
+;;                       )
+;;                     ))
+;;
+;;     If the current buffer's directory matches the regexp,
+;;     "^/users/jdoe/sources/proj1", then the following search will be
+;;     done:
+;;
+;;         1. First, the normal hierarchical database search will be used to
+;;            locate a cscope database.
+;;
+;;         2. Next, searches will be done using the cscope database
+;;            directories, "/users/jdoe/sources/proj2",
+;;            "/users/jdoe/sources/proj3/mycscope.out", and
+;;            "/users/jdoe/sources/proj4".  Note that, instead of the file,
+;;            "cscope.out", the file, "mycscope.out", will be used in the
+;;            directory "/users/jdoe/sources/proj3".
+;;
+;;         3. If a match was found, searching will stop.
+;;
+;;         4. If a match was not found, searching will be done using
+;;            "/some/master/directory", and the command-line options "-d"
+;;            and "-I/usr/local/include" will be passed to cscope.
+;;
+;;     If the current buffer's directory matches the regexp,
+;;     "^/users/jdoe/sources/gnome", then the following search will be
+;;     done:
+;;
+;;         The search will be done only using the directory,
+;;         "/master/gnome/database".  The "-d" option will be passed to
+;;         cscope.
+;;
+;;     If the current buffer's directory does not match any of the above
+;;     regexps, then only the normal hierarchical database search will be
+;;     done.
+;;
+;;
+;; * Other notes:
+;;
+;; 1. The script, "cscope-indexer", uses a sed command to determine
+;;    what is and is not a C/C++/lex/yacc source file.  It's idea of a
+;;    source file may not correspond to yours.
+;;
+;; 2. This module is called, "xcscope", because someone else has
+;;    already written a "cscope.el" (although it's quite old).
+;;
+;;
+;; * KNOWN BUGS:
+;;
+;; 1. Cannot handle whitespace in directory or file names.
+;;
+;; 2. By default, colored faces are used to display results.  If you happen
+;;    to use a black background, part of the results may be invisible
+;;    (because the foreground color may be black, too).  There are at least
+;;    two solutions for this:
+;;
+;;    2a. Turn off colored faces, by setting `cscope-use-face' to `nil',
+;;        e.g.:
+;;
+;;            (setq cscope-use-face nil)
+;;
+;;    2b. Explicitly set colors for the faces used by cscope.  The faces
+;;        are:
+;;
+;;            cscope-file-face
+;;            cscope-function-face
+;;            cscope-line-number-face
+;;            cscope-line-face
+;;            cscope-mouse-face
+;;
+;;        The face most likely to cause problems (e.g., black-on-black
+;;        color) is `cscope-line-face'.
+;;
+;; 3. The support for cscope databases different from that specified by
+;;    `cscope-database-file' is quirky.  If the file does not exist, it
+;;    will not be auto-created (unlike files names by
+;;    `cscope-database-file').  You can manually force the file to be
+;;    created by using touch(1) to create a zero-length file; the
+;;    database will be created the next time a search is done.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(require 'easymenu)
+
+
+(defgroup cscope nil
+  "Cscope interface for (X)Emacs.
+Using cscope, you can easily search for where symbols are used and defined.
+It is designed to answer questions like:
+
+        Where is this variable used?
+        What is the value of this preprocessor symbol?
+        Where is this function in the source files?
+        What functions call this function?
+        What functions are called by this function?
+        Where does the message \"out of space\" come from?
+        Where is this source file in the directory structure?
+        What files include this header file?
+"
+  :prefix "cscope-"
+  :group 'tools)
+
+
+(defcustom cscope-do-not-update-database nil
+  "*If non-nil, never check and/or update the cscope database when searching.
+Beware of setting this to non-nil, as this will disable automatic database
+creation, updating, and maintenance."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-database-regexps nil
+  "*List to force directory-to-cscope-database mappings.
+This is a list of `(REGEXP DBLIST [ DBLIST ... ])', where:
+
+REGEXP is a regular expression matched against the current buffer's
+current directory.  The current buffer is typically some source file,
+and you're probably searching for some symbol in or related to this
+file.  Basically, this regexp is used to relate the current directory
+to a cscope database.  You need to start REGEXP with \"^\" if you want
+to match from the beginning of the current directory.
+
+DBLIST is a list that contains one or more of:
+
+    ( DBDIR )
+    ( DBDIR ( OPTIONS ) )
+    ( t )
+    t
+
+Here, DBDIR is a directory (or a file) that contains a cscope database.
+If DBDIR is a directory, then it is expected that the cscope database,
+if present, has the filename given by the variable,
+`cscope-database-file'; if DBDIR is a file, then DBDIR is the path name
+to a cscope database file (which does not have to be the same as that
+given by `cscope-database-file').  If only DBDIR is specified, then that
+cscope database will be searched without any additional cscope
+command-line options.  If OPTIONS is given, then OPTIONS is a list of
+strings, where each string is a separate cscope command-line option.
+
+In the case of \"( t )\", this specifies that the search is to use the
+normal hierarchical database search.  This option is used to
+explicitly search using the hierarchical database search either before
+or after other cscope database directories.
+
+If \"t\" is specified (not inside a list), this tells the searching
+mechanism to stop searching if a match has been found (at the point
+where \"t\" is encountered).  This is useful for those projects that
+consist of many subprojects.  You can specify the most-used
+subprojects first, followed by a \"t\", and then followed by a master
+cscope database directory that covers all subprojects.  This will
+cause the most-used subprojects to be searched first (hopefully
+quickly), and the search will then stop if a match was found.  If not,
+the search will continue using the master cscope database directory.
+
+Here, `cscope-database-regexps' is generally not used, as the normal
+hierarchical database search is sufficient for placing and/or locating
+the cscope databases.  However, there may be cases where it makes
+sense to place the cscope databases away from where the source files
+are kept; in this case, this variable is used to determine the
+mapping.
+
+This module searches for the cscope databases by first using this
+variable; if a database location cannot be found using this variable,
+then the current directory is searched, then the parent, then the
+parent's parent, until a cscope database directory is found, or the
+root directory is reached.  If the root directory is reached, the
+current directory will be used.
+
+A cscope database directory is one in which EITHER a cscope database
+file (e.g., \"cscope.out\") OR a cscope file list (e.g.,
+\"cscope.files\") exists.  If only \"cscope.files\" exists, the
+corresponding \"cscope.out\" will be automatically created by cscope
+when a search is done.  By default, the cscope database file is called
+\"cscope.out\", but this can be changed (on a global basis) via the
+variable, `cscope-database-file'.  There is limited support for cscope
+databases that are named differently than that given by
+`cscope-database-file', using the variable, `cscope-database-regexps'.
+
+Here is an example of `cscope-database-regexps':
+
+        (setq cscope-database-regexps
+              '(
+                ( \"^/users/jdoe/sources/proj1\"
+                  ( t )
+                  ( \"/users/jdoe/sources/proj2\")
+                  ( \"/users/jdoe/sources/proj3/mycscope.out\")
+                  ( \"/users/jdoe/sources/proj4\")
+                  t
+                  ( \"/some/master/directory\" (\"-d\" \"-I/usr/local/include\") )
+                  )
+                ( \"^/users/jdoe/sources/gnome/\"
+                  ( \"/master/gnome/database\" (\"-d\") )
+                  )
+                ))
+
+If the current buffer's directory matches the regexp,
+\"^/users/jdoe/sources/proj1\", then the following search will be
+done:
+
+    1. First, the normal hierarchical database search will be used to
+       locate a cscope database.
+
+    2. Next, searches will be done using the cscope database
+       directories, \"/users/jdoe/sources/proj2\",
+       \"/users/jdoe/sources/proj3/mycscope.out\", and
+       \"/users/jdoe/sources/proj4\".  Note that, instead of the file,
+       \"cscope.out\", the file, \"mycscope.out\", will be used in the
+       directory \"/users/jdoe/sources/proj3\".
+
+    3. If a match was found, searching will stop.
+
+    4. If a match was not found, searching will be done using
+       \"/some/master/directory\", and the command-line options \"-d\"
+       and \"-I/usr/local/include\" will be passed to cscope.
+
+If the current buffer's directory matches the regexp,
+\"^/users/jdoe/sources/gnome\", then the following search will be
+done:
+
+    The search will be done only using the directory,
+    \"/master/gnome/database\".  The \"-d\" option will be passed to
+    cscope.
+
+If the current buffer's directory does not match any of the above
+regexps, then only the normal hierarchical database search will be
+done.
+
+"
+  :type '(repeat (list :format "%v"
+                      (choice :value ""
+                              (regexp :tag "Buffer regexp")
+                              string)
+                      (choice :value ""
+                              (directory :tag "Cscope database directory")
+                              string)
+                      (string :value ""
+                              :tag "Optional cscope command-line arguments")
+                      ))
+  :group 'cscope)
+(defcustom cscope-name-line-width -30
+  "*The width of the combined \"function name:line number\" field in the
+cscope results buffer.  If negative, the field is left-justified."
+  :type 'integer
+  :group 'cscope)
+
+
+(defcustom cscope-truncate-lines truncate-lines
+  "*The value of `truncate-lines' to use in cscope buffers.
+This variable exists because it can be easier to read cscope buffers
+with truncated lines, while other buffers do not have truncated lines."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-display-times t
+  "*If non-nil, display how long each search took.
+The elasped times are in seconds.  Floating-point support is required
+for this to work."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-program "cscope"
+  "*The pathname of the cscope executable to use."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-index-file "cscope.files"
+  "*The name of the cscope file list file."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-database-file "cscope.out"
+  "*The name of the cscope database file."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-edit-single-match t
+  "*If non-nil and only one match is output, edit the matched location."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-display-cscope-buffer t
+  "*If non-nil automatically display the *cscope* buffer after each search."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-stop-at-first-match-dir nil
+  "*If non-nil, stop searching through multiple databases if a match is found.
+This option is useful only if multiple cscope database directories are being
+used.  When multiple databases are searched, setting this variable to non-nil
+will cause searches to stop when a search outputs anything; no databases after
+this one will be searched."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-use-relative-paths t
+  "*If non-nil, use relative paths when creating the list of files to index.
+The path is relative to the directory in which the cscope database
+will be created.  If nil, absolute paths will be used.  Absolute paths
+are good if you plan on moving the database to some other directory
+(if you do so, you'll probably also have to modify
+\`cscope-database-regexps\').  Absolute paths  may also be good if you
+share the database file with other users (you\'ll probably want to
+specify some automounted network path for this)."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-index-recursively t
+  "*If non-nil, index files in the current directory and all subdirectories.
+If nil, only files in the current directory are indexed.  This
+variable is only used when creating the list of files to index, or
+when creating the list of files and the corresponding cscope database."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-no-mouse-prompts nil
+  "*If non-nil, use the symbol under the cursor instead of prompting.
+Do not prompt for a value, except for when seaching for a egrep pattern
+or a file."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-suppress-empty-matches t
+  "*If non-nil, delete empty matches.")
+
+
+(defcustom cscope-indexing-script "cscope-indexer"
+  "*The shell script used to create cscope indices."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-symbol-chars "A-Za-z0-9_"
+  "*A string containing legal characters in a symbol.
+The current syntax table should really be used for this."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-filename-chars "-.,/A-Za-z0-9_~!@#$%&+=\\\\"
+  "*A string containing legal characters in a symbol.
+The current syntax table should really be used for this."
+  :type 'string
+  :group 'cscope)
+
+
+(defcustom cscope-allow-arrow-overlays t
+  "*If non-nil, use an arrow overlay to show target lines.
+Arrow overlays are only used when the following functions are used:
+
+    cscope-show-entry-other-window
+    cscope-show-next-entry-other-window
+    cscope-show-prev-entry-other-window
+
+The arrow overlay is removed when other cscope functions are used.
+Note that the arrow overlay is not an actual part of the text, and can
+be removed by quitting the cscope buffer."
+  :type 'boolean
+  :group 'cscope)
+
+
+(defcustom cscope-overlay-arrow-string "=>"
+  "*The overlay string to use when displaying arrow overlays."
+  :type 'string
+  :group 'cscope)
+
+
+(defvar cscope-minor-mode-hooks nil
+  "List of hooks to call when entering cscope-minor-mode.")
+
+
+(defconst cscope-separator-line
+  "-------------------------------------------------------------------------------\n"
+  "Line of text to use as a visual separator.
+Must end with a newline.")
+
+
+;;;;
+;;;; Faces for fontification
+;;;;
+
+(defcustom cscope-use-face t
+  "*Whether to use text highlighting (à la font-lock) or not."
+  :group 'cscope
+  :type '(boolean))
+
+
+(defface cscope-file-face
+  '((((class color) (background dark))
+     (:foreground "yellow"))
+    (((class color) (background light))
+     (:foreground "blue"))
+    (t (:bold t)))
+  "Face used to highlight file name in the *cscope* buffer."
+  :group 'cscope)
+
+
+(defface cscope-function-face
+  '((((class color) (background dark))
+     (:foreground "cyan"))
+    (((class color) (background light))
+     (:foreground "magenta"))
+    (t (:bold t)))
+  "Face used to highlight function name in the *cscope* buffer."
+  :group 'cscope)
+
+
+(defface cscope-line-number-face
+  '((((class color) (background dark))
+     (:foreground "red"))
+    (((class color) (background light))
+     (:foreground "red"))
+    (t (:bold t)))
+  "Face used to highlight line number in the *cscope* buffer."
+  :group 'cscope)
+
+
+(defface cscope-line-face
+  '((((class color) (background dark))
+     (:foreground "green"))
+    (((class color) (background light))
+     (:foreground "black"))
+    (t (:bold nil)))
+  "Face used to highlight the rest of line in the *cscope* buffer."
+  :group 'cscope)
+
+
+(defface cscope-mouse-face
+  '((((class color) (background dark))
+     (:foreground "white" :background "blue"))
+    (((class color) (background light))
+     (:foreground "white" :background "blue"))
+    (t (:bold nil)))
+  "Face used when mouse pointer is within the region of an entry."
+  :group 'cscope)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Probably, nothing user-customizable past this point.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defconst cscope-running-in-xemacs (string-match "XEmacs\\|Lucid" emacs-version))
+
+(defvar cscope-list-entry-keymap nil
+  "The keymap used in the *cscope* buffer which lists search results.")
+(if cscope-list-entry-keymap
+    nil
+  (setq cscope-list-entry-keymap (make-keymap))
+  (suppress-keymap cscope-list-entry-keymap)
+  ;; The following section does not appear in the "Cscope" menu.
+  (if cscope-running-in-xemacs
+      (define-key cscope-list-entry-keymap [button2] 'cscope-mouse-select-entry-other-window)
+    (define-key cscope-list-entry-keymap [mouse-2] 'cscope-mouse-select-entry-other-window))
+  (define-key cscope-list-entry-keymap [return] 'cscope-select-entry-other-window)
+  (define-key cscope-list-entry-keymap " " 'cscope-show-entry-other-window)
+  (define-key cscope-list-entry-keymap "o" 'cscope-select-entry-one-window)
+  (define-key cscope-list-entry-keymap "q" 'cscope-bury-buffer)
+  (define-key cscope-list-entry-keymap "Q" 'cscope-quit)
+  (define-key cscope-list-entry-keymap "h" 'cscope-help)
+  (define-key cscope-list-entry-keymap "?" 'cscope-help)
+  ;; The following line corresponds to be beginning of the "Cscope" menu.
+  (define-key cscope-list-entry-keymap "s" 'cscope-find-this-symbol)
+  (define-key cscope-list-entry-keymap "d" 'cscope-find-this-symbol)
+  (define-key cscope-list-entry-keymap "g" 'cscope-find-global-definition)
+  (define-key cscope-list-entry-keymap "G"
+    'cscope-find-global-definition-no-prompting)
+  (define-key cscope-list-entry-keymap "c" 'cscope-find-functions-calling-this-function)
+  (define-key cscope-list-entry-keymap "C" 'cscope-find-called-functions)
+  (define-key cscope-list-entry-keymap "t" 'cscope-find-this-text-string)
+  (define-key cscope-list-entry-keymap "e" 'cscope-find-egrep-pattern)
+  (define-key cscope-list-entry-keymap "f" 'cscope-find-this-file)
+  (define-key cscope-list-entry-keymap "i" 'cscope-find-files-including-file)
+  ;; --- (The '---' indicates that this line corresponds to a menu separator.)
+  (define-key cscope-list-entry-keymap "n" 'cscope-next-symbol)
+  (define-key cscope-list-entry-keymap "N" 'cscope-next-file)
+  (define-key cscope-list-entry-keymap "p" 'cscope-prev-symbol)
+  (define-key cscope-list-entry-keymap "P" 'cscope-prev-file)
+  (define-key cscope-list-entry-keymap "u" 'cscope-pop-mark)
+  ;; ---
+  (define-key cscope-list-entry-keymap "a" 'cscope-set-initial-directory)
+  (define-key cscope-list-entry-keymap "A" 'cscope-unset-initial-directory)
+  ;; ---
+  (define-key cscope-list-entry-keymap "L" 'cscope-create-list-of-files-to-index)
+  (define-key cscope-list-entry-keymap "I" 'cscope-index-files)
+  (define-key cscope-list-entry-keymap "E" 'cscope-edit-list-of-files-to-index)
+  (define-key cscope-list-entry-keymap "W" 'cscope-tell-user-about-directory)
+  (define-key cscope-list-entry-keymap "S" 'cscope-tell-user-about-directory)
+  (define-key cscope-list-entry-keymap "T" 'cscope-tell-user-about-directory)
+  (define-key cscope-list-entry-keymap "D" 'cscope-dired-directory)
+  ;; The previous line corresponds to be end of the "Cscope" menu.
+  )
+
+
+(defvar cscope-list-entry-hook nil
+  "*Hook run after cscope-list-entry-mode entered.")
+
+
+(defun cscope-list-entry-mode ()
+  "Major mode for jumping/showing entry from the list in the *cscope* buffer.
+
+\\{cscope-list-entry-keymap}"
+  (use-local-map cscope-list-entry-keymap)
+  (setq buffer-read-only t
+       mode-name "cscope"
+       major-mode 'cscope-list-entry-mode
+       overlay-arrow-string cscope-overlay-arrow-string)
+  (or overlay-arrow-position
+      (setq overlay-arrow-position (make-marker)))
+  (run-hooks 'cscope-list-entry-hook))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar cscope-output-buffer-name "*cscope*"
+  "The name of the cscope output buffer.")
+
+
+(defvar cscope-info-buffer-name "*cscope-info*"
+  "The name of the cscope information buffer.")
+
+
+(defvar cscope-process nil
+  "The current cscope process.")
+(make-variable-buffer-local 'cscope-process)
+
+
+(defvar cscope-process-output nil
+  "A buffer for holding partial cscope process output.")
+(make-variable-buffer-local 'cscope-process-output)
+
+
+(defvar cscope-command-args nil
+  "Internal variable for holding major command args to pass to cscope.")
+(make-variable-buffer-local 'cscope-command-args)
+
+
+(defvar cscope-start-directory nil
+  "Internal variable used to save the initial start directory.
+The results buffer gets reset to this directory when a search has
+completely finished.")
+(make-variable-buffer-local 'cscope-start-directory)
+
+
+(defvar cscope-search-list nil
+  "A list of (DIR . FLAGS) entries.
+This is a list of database directories to search.  Each entry in the list
+is a (DIR . FLAGS) cell.  DIR is the directory to search, and FLAGS are the
+flags to pass to cscope when using this database directory.  FLAGS can be
+nil (meaning, \"no flags\").")
+(make-variable-buffer-local 'cscope-search-list)
+
+
+(defvar cscope-searched-dirs nil
+  "The list of database directories already searched.")
+(make-variable-buffer-local 'cscope-searched-dirs)
+
+
+(defvar cscope-filter-func nil
+  "Internal variable for holding the filter function to use (if any) when
+searching.")
+(make-variable-buffer-local 'cscope-filter-func)
+
+
+(defvar cscope-sentinel-func nil
+  "Internal variable for holding the sentinel function to use (if any) when
+searching.")
+(make-variable-buffer-local 'cscope-filter-func)
+
+
+(defvar cscope-last-file nil
+  "The file referenced by the last line of cscope process output.")
+(make-variable-buffer-local 'cscope-last-file)
+
+
+(defvar cscope-start-time nil
+  "The search start time, in seconds.")
+(make-variable-buffer-local 'cscope-start-time)
+
+
+(defvar cscope-first-match nil
+  "The first match result output by cscope.")
+(make-variable-buffer-local 'cscope-first-match)
+
+
+(defvar cscope-first-match-point nil
+  "Buffer location of the first match.")
+(make-variable-buffer-local 'cscope-first-match-point)
+
+
+(defvar cscope-item-start nil
+  "The point location of the start of a search's output, before header info.")
+(make-variable-buffer-local 'cscope-output-start)
+
+
+(defvar cscope-output-start nil
+  "The point location of the start of a search's output.")
+(make-variable-buffer-local 'cscope-output-start)
+
+
+(defvar cscope-matched-multiple nil
+  "Non-nil if cscope output multiple matches.")
+(make-variable-buffer-local 'cscope-matched-multiple)
+
+
+(defvar cscope-stop-at-first-match-dir-meta nil
+  "")
+(make-variable-buffer-local 'cscope-stop-at-first-match-dir-meta)
+
+
+(defvar cscope-symbol nil
+  "The last symbol searched for.")
+
+
+(defvar cscope-adjust t
+  "True if the symbol searched for (cscope-symbol) should be on
+the line specified by the cscope database.  In such cases the point will be
+adjusted if need be (fuzzy matching).")
+
+
+(defvar cscope-adjust-range 1000
+  "How far the point should be adjusted if the symbol is not on the line
+specified by the cscope database.")
+
+
+(defvar cscope-marker nil
+  "The location from which cscope was invoked.")
+
+
+(defvar cscope-marker-window nil
+  "The window which should contain cscope-marker.  This is the window from
+which cscope-marker is set when searches are launched from the *cscope*
+buffer.")
+
+
+(defvar cscope-marker-ring-length 16
+  "Length of the cscope marker ring.")
+
+
+(defvar cscope-marker-ring (make-ring cscope-marker-ring-length)
+  "Ring of markers which are locations from which cscope was invoked.")
+
+
+(defvar cscope-initial-directory nil
+  "When set the directory in which searches for the cscope database
+directory should begin.")
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar cscope:map nil
+  "The cscope keymap.")
+(if cscope:map
+    nil
+  (setq cscope:map (make-sparse-keymap))
+  ;; The following line corresponds to be beginning of the "Cscope" menu.
+  (define-key cscope:map "\C-css" 'cscope-find-this-symbol)
+  (define-key cscope:map "\C-csd" 'cscope-find-global-definition)
+  (define-key cscope:map "\C-csg" 'cscope-find-global-definition)
+  (define-key cscope:map "\C-csG" 'cscope-find-global-definition-no-prompting)
+  (define-key cscope:map "\C-csc" 'cscope-find-functions-calling-this-function)
+  (define-key cscope:map "\C-csC" 'cscope-find-called-functions)
+  (define-key cscope:map "\C-cst" 'cscope-find-this-text-string)
+  (define-key cscope:map "\C-cse" 'cscope-find-egrep-pattern)
+  (define-key cscope:map "\C-csf" 'cscope-find-this-file)
+  (define-key cscope:map "\C-csi" 'cscope-find-files-including-file)
+  ;; --- (The '---' indicates that this line corresponds to a menu separator.)
+  (define-key cscope:map "\C-csb" 'cscope-display-buffer)
+  (define-key cscope:map "\C-csB" 'cscope-display-buffer-toggle)
+  (define-key cscope:map "\C-csn" 'cscope-next-symbol)
+  (define-key cscope:map "\C-csN" 'cscope-next-file)
+  (define-key cscope:map "\C-csp" 'cscope-prev-symbol)
+  (define-key cscope:map "\C-csP" 'cscope-prev-file)
+  (define-key cscope:map "\C-csu" 'cscope-pop-mark)
+  ;; ---
+  (define-key cscope:map "\C-csa" 'cscope-set-initial-directory)
+  (define-key cscope:map "\C-csA" 'cscope-unset-initial-directory)
+  ;; ---
+  (define-key cscope:map "\C-csL" 'cscope-create-list-of-files-to-index)
+  (define-key cscope:map "\C-csI" 'cscope-index-files)
+  (define-key cscope:map "\C-csE" 'cscope-edit-list-of-files-to-index)
+  (define-key cscope:map "\C-csW" 'cscope-tell-user-about-directory)
+  (define-key cscope:map "\C-csS" 'cscope-tell-user-about-directory)
+  (define-key cscope:map "\C-csT" 'cscope-tell-user-about-directory)
+  (define-key cscope:map "\C-csD" 'cscope-dired-directory))
+  ;; The previous line corresponds to be end of the "Cscope" menu.
+
+(easy-menu-define cscope:menu
+                 (list cscope:map cscope-list-entry-keymap)
+                 "cscope menu"
+                 '("Cscope"
+                   [ "Find symbol" cscope-find-this-symbol t ]
+                   [ "Find global definition" cscope-find-global-definition t ]
+                   [ "Find global definition no prompting"
+                     cscope-find-global-definition-no-prompting t ]
+                   [ "Find functions calling a function"
+                     cscope-find-functions-calling-this-function t ]
+                   [ "Find called functions" cscope-find-called-functions t ]
+                   [ "Find text string" cscope-find-this-text-string t ]
+                   [ "Find egrep pattern" cscope-find-egrep-pattern t ]
+                   [ "Find a file" cscope-find-this-file t ]
+                   [ "Find files #including a file"
+                     cscope-find-files-including-file t ]
+                   "-----------"
+                   [ "Display *cscope* buffer" cscope-display-buffer t ]
+                   [ "Auto display *cscope* buffer toggle"
+                     cscope-display-buffer-toggle t ]
+                   [ "Next symbol"             cscope-next-symbol t ]
+                   [ "Next file"               cscope-next-file t ]
+                   [ "Previous symbol"         cscope-prev-symbol t ]
+                   [ "Previous file"           cscope-prev-file t ]
+                   [ "Pop mark"                cscope-pop-mark t ]
+                   "-----------"
+                   ( "Cscope Database"
+                     [ "Set initial directory"
+                       cscope-set-initial-directory t ]
+                     [ "Unset initial directory"
+                       cscope-unset-initial-directory t ]
+                     "-----------"
+                     [ "Create list of files to index"
+                       cscope-create-list-of-files-to-index t ]
+                     [ "Create list and index"
+                       cscope-index-files t ]
+                     [ "Edit list of files to index"
+                       cscope-edit-list-of-files-to-index t ]
+                     [ "Locate this buffer's cscope directory"
+                       cscope-tell-user-about-directory t ]
+                     [ "Dired this buffer's cscope directory"
+                       cscope-dired-directory t ]
+                     )
+                   "-----------"
+                   ( "Options"
+                     [ "Auto edit single match"
+                       (setq cscope-edit-single-match
+                             (not cscope-edit-single-match))
+                       :style toggle :selected cscope-edit-single-match ]
+                     [ "Auto display *cscope* buffer"
+                       (setq cscope-display-cscope-buffer
+                             (not cscope-display-cscope-buffer))
+                       :style toggle :selected cscope-display-cscope-buffer ]
+                     [ "Stop at first matching database"
+                       (setq cscope-stop-at-first-match-dir
+                             (not cscope-stop-at-first-match-dir))
+                       :style toggle
+                       :selected cscope-stop-at-first-match-dir ]
+                     [ "Never update cscope database"
+                       (setq cscope-do-not-update-database
+                             (not cscope-do-not-update-database))
+                       :style toggle :selected cscope-do-not-update-database ]
+                     [ "Index recursively"
+                       (setq cscope-index-recursively
+                             (not cscope-index-recursively))
+                       :style toggle :selected cscope-index-recursively ]
+                     [ "Suppress empty matches"
+                       (setq cscope-suppress-empty-matches
+                             (not cscope-suppress-empty-matches))
+                       :style toggle :selected cscope-suppress-empty-matches ]
+                     [ "Use relative paths"
+                       (setq cscope-use-relative-paths
+                             (not cscope-use-relative-paths))
+                       :style toggle :selected cscope-use-relative-paths ]
+                     [ "No mouse prompts" (setq cscope-no-mouse-prompts
+                                                (not cscope-no-mouse-prompts))
+                       :style toggle :selected cscope-no-mouse-prompts ] 
+                     )
+                   ))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Internal functions and variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar cscope-common-text-plist
+  (let (plist)
+    (setq plist (plist-put plist 'mouse-face 'cscope-mouse-face))
+    plist)
+  "List of common text properties to be added to the entry line.")
+
+
+(defun cscope-insert-with-text-properties (text filename &optional line-number)
+  "Insert an entry with given TEXT, add entry attributes as text properties.
+The text properties to be added:
+- common property: mouse-face,
+- properties are used to open target file and its location: cscope-file,
+  cscope-line-number"
+  (let ((plist cscope-common-text-plist)
+       beg end)
+    (setq beg (point))
+    (insert text)
+    (setq end (point)
+         plist (plist-put plist 'cscope-file filename))
+    (if line-number
+       (progn
+         (if (stringp line-number)
+             (setq line-number (string-to-number line-number)))
+         (setq plist (plist-put plist 'cscope-line-number line-number))
+         ))
+    (add-text-properties beg end plist)
+    ))
+
+
+(if cscope-running-in-xemacs
+    (progn
+      (defalias 'cscope-event-window 'event-window)
+      (defalias 'cscope-event-point 'event-point)
+      (defalias 'cscope-recenter 'recenter)
+      )
+  (defun cscope-event-window (event)
+    "Return the window at which the mouse EVENT occurred."
+    (posn-window (event-start event)))
+  (defun cscope-event-point (event)
+    "Return the point at which the mouse EVENT occurred."
+    (posn-point (event-start event)))
+  (defun cscope-recenter (&optional n window)
+    "Center point in WINDOW and redisplay frame.  With N, put point on line N."
+    (save-selected-window
+      (if (windowp window)
+         (select-window window))
+      (recenter n)))
+  )
+
+
+(defun cscope-show-entry-internal (file line-number 
+                                       &optional save-mark-p window arrow-p)
+  "Display the buffer corresponding to FILE and LINE-NUMBER
+in some window.  If optional argument WINDOW is given,
+display the buffer in that WINDOW instead.  The window is
+not selected.  Save point on mark ring before goto
+LINE-NUMBER if optional argument SAVE-MARK-P is non-nil.
+Put `overlay-arrow-string' if arrow-p is non-nil.
+Returns the window displaying BUFFER."
+  (let (buffer old-pos old-point new-point forward-point backward-point
+              line-end line-length)
+    (if (and (stringp file)
+            (integerp line-number))
+       (progn
+         (unless (file-readable-p file)
+           (error "%s is not readable or exists" file))
+         (setq buffer (find-file-noselect file))
+         (if (windowp window)
+             (set-window-buffer window buffer)
+           (setq window (display-buffer buffer)))
+         (set-buffer buffer)
+         (if (> line-number 0)
+             (progn
+               (setq old-pos (point))
+               (goto-line line-number)
+               (setq old-point (point))
+               (if (and cscope-adjust cscope-adjust-range)
+                   (progn
+                     ;; Calculate the length of the line specified by cscope.
+                     (end-of-line)
+                     (setq line-end (point))
+                     (goto-char old-point)
+                     (setq line-length (- line-end old-point))
+
+                     ;; Search forward and backward for the pattern.
+                     (setq forward-point (search-forward
+                                          cscope-symbol
+                                          (+ old-point
+                                             cscope-adjust-range) t))
+                     (goto-char old-point)
+                     (setq backward-point (search-backward
+                                           cscope-symbol
+                                           (- old-point
+                                              cscope-adjust-range) t))
+                     (if forward-point
+                         (progn
+                           (if backward-point
+                               (setq new-point
+                                     ;; Use whichever of forward-point or
+                                     ;; backward-point is closest to old-point.
+                                     ;; Give forward-point a line-length advantage
+                                     ;; so that if the symbol is on the current
+                                     ;; line the current line is chosen.
+                                     (if (<= (- (- forward-point line-length)
+                                                old-point)
+                                             (- old-point backward-point))
+                                         forward-point
+                                       backward-point))
+                             (setq new-point forward-point)))
+                       (if backward-point
+                           (setq new-point backward-point)
+                         (setq new-point old-point)))
+                     (goto-char new-point)
+                     (beginning-of-line)
+                     (setq new-point (point)))
+                 (setq new-point old-point))
+               (set-window-point window new-point)
+               (if (and cscope-allow-arrow-overlays arrow-p)
+                   (set-marker overlay-arrow-position (point))
+                 (set-marker overlay-arrow-position nil))
+               (or (not save-mark-p)
+                   (= old-pos (point))
+                   (push-mark old-pos))
+               ))
+
+         (if cscope-marker
+             (progn ;; The search was successful.  Save the marker so it
+                     ;; can be returned to by cscope-pop-mark.
+               (ring-insert cscope-marker-ring cscope-marker)
+               ;; Unset cscope-marker so that moving between matches
+               ;; (cscope-next-symbol, etc.) does not fill
+               ;; cscope-marker-ring.
+               (setq cscope-marker nil)))
+          (setq cscope-marker-window window)
+         )
+      (message "No entry found at point."))
+    )
+  window)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; functions in *cscope* buffer which lists the search results
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun cscope-select-entry-other-window ()
+  "Display the entry at point in other window, select the window.
+Push current point on mark ring and select the entry window."
+  (interactive)
+  (let ((file (get-text-property (point) 'cscope-file))
+       (line-number (get-text-property (point) 'cscope-line-number))
+       window)
+    (setq window (cscope-show-entry-internal file line-number t))
+    (if (windowp window)
+       (select-window window))
+    ))
+
+
+(defun cscope-select-entry-one-window ()
+  "Display the entry at point in one window, select the window."
+  (interactive)
+  (let ((file (get-text-property (point) 'cscope-file))
+       (line-number (get-text-property (point) 'cscope-line-number))
+       window)
+    (setq window (cscope-show-entry-internal file line-number t))
+    (if (windowp window)
+       (progn
+         (select-window window)
+         (sit-for 0)   ;; Redisplay hack to allow delete-other-windows
+                       ;; to continue displaying the correct location.
+         (delete-other-windows window)
+         ))
+    ))
+
+
+(defun cscope-select-entry-specified-window (window)
+  "Display the entry at point in a specified window, select the window."
+  (interactive)
+  (let ((file (get-text-property (point) 'cscope-file))
+       (line-number (get-text-property (point) 'cscope-line-number)))
+    (setq window (cscope-show-entry-internal file line-number t window))
+    (if (windowp window)
+         (select-window window))
+    ))
+
+
+(defun cscope-mouse-select-entry-other-window (event)
+  "Display the entry over which the mouse event occurred, select the window."
+  (interactive "e")
+  (let ((ep (cscope-event-point event))
+       (win (cscope-event-window event))
+       buffer file line-number window)
+    (if ep
+        (progn
+          (setq buffer (window-buffer win)
+                file (get-text-property ep 'cscope-file buffer)
+                line-number (get-text-property ep 'cscope-line-number buffer))
+          (select-window win)
+          (setq window (cscope-show-entry-internal file line-number t))
+          (if (windowp window)
+              (select-window window))
+          )
+      (message "No entry found at point.")
+      )
+    ))
+
+
+(defun cscope-show-entry-other-window ()
+  "Display the entry at point in other window.
+Point is not saved on mark ring."
+  (interactive)
+  (let ((file (get-text-property (point) 'cscope-file))
+       (line-number (get-text-property (point) 'cscope-line-number)))
+    (cscope-show-entry-internal file line-number nil nil t)
+    ))
+
+
+(defun cscope-buffer-search (do-symbol do-next)
+  "The body of the following four functions."
+  (let* (line-number old-point point
+                    (search-file (not do-symbol))
+                    (search-prev (not do-next))
+                    (direction (if do-next 1 -1))
+                    (old-buffer (current-buffer))
+                    (old-buffer-window (get-buffer-window old-buffer))
+                    (buffer (get-buffer cscope-output-buffer-name))
+                    (buffer-window (get-buffer-window (or buffer (error "The *cscope* buffer does not exist yet"))))
+                    )
+    (set-buffer buffer)
+    (setq old-point (point))
+    (forward-line direction)
+    (setq point (point))
+    (setq line-number (get-text-property point 'cscope-line-number))
+    (while (or (not line-number)
+              (or (and do-symbol (= line-number -1))
+                  (and search-file  (/= line-number -1))))
+      (forward-line direction)
+      (setq point (point))
+      (if (or (and do-next (>= point (point-max)))
+             (and search-prev (<= point (point-min))))
+         (progn
+           (goto-char old-point)
+           (error "The %s of the *cscope* buffer has been reached"
+                  (if do-next "end" "beginning"))))
+      (setq line-number (get-text-property point 'cscope-line-number)))
+    (if (eq old-buffer buffer) ;; In the *cscope* buffer.
+       (cscope-show-entry-other-window)
+      (cscope-select-entry-specified-window old-buffer-window) ;; else
+      (if (windowp buffer-window)
+         (set-window-point buffer-window point)))
+    (set-buffer old-buffer)
+    ))
+
+
+(defun cscope-display-buffer ()
+  "Display the *cscope* buffer."
+  (interactive)
+  (let ((buffer (get-buffer cscope-output-buffer-name)))
+    (if buffer
+        (pop-to-buffer buffer)
+      (error "The *cscope* buffer does not exist yet"))))
+
+
+(defun cscope-display-buffer-toggle ()
+  "Toggle cscope-display-cscope-buffer, which corresponds to
+\"Auto display *cscope* buffer\"."
+  (interactive)
+  (setq cscope-display-cscope-buffer (not cscope-display-cscope-buffer))
+  (message "The cscope-display-cscope-buffer variable is now %s."
+           (if cscope-display-cscope-buffer "set" "unset")))
+
+
+(defun cscope-next-symbol ()
+  "Move to the next symbol in the *cscope* buffer."
+  (interactive)
+  (cscope-buffer-search t t))
+
+
+(defun cscope-next-file ()
+  "Move to the next file in the *cscope* buffer."
+  (interactive)
+  (cscope-buffer-search nil t))
+
+
+(defun cscope-prev-symbol ()
+  "Move to the previous symbol in the *cscope* buffer."
+  (interactive)
+  (cscope-buffer-search t nil))
+
+
+(defun cscope-prev-file ()
+  "Move to the previous file in the *cscope* buffer."
+  (interactive)
+  (cscope-buffer-search nil nil))
+
+
+(defun cscope-pop-mark ()
+  "Pop back to where cscope was last invoked."
+  (interactive)
+
+  ;; This function is based on pop-tag-mark, which can be found in
+  ;; lisp/progmodes/etags.el.
+
+  (if (ring-empty-p cscope-marker-ring)
+      (error "There are no marked buffers in the cscope-marker-ring yet"))
+  (let* ( (marker (ring-remove cscope-marker-ring 0))
+         (old-buffer (current-buffer))
+         (marker-buffer (marker-buffer marker))
+         marker-window
+         (marker-point (marker-position marker))
+         (cscope-buffer (get-buffer cscope-output-buffer-name)) )
+
+    ;; After the following both cscope-marker-ring and cscope-marker will be
+    ;; in the state they were immediately after the last search.  This way if
+    ;; the user now makes a selection in the previously generated *cscope*
+    ;; buffer things will behave the same way as if that selection had been
+    ;; made immediately after the last search.
+    (setq cscope-marker marker)
+
+    (if marker-buffer
+       (if (eq old-buffer cscope-buffer)
+           (progn ;; In the *cscope* buffer.
+             (set-buffer marker-buffer)
+             (setq marker-window (display-buffer marker-buffer))
+             (set-window-point marker-window marker-point)
+             (select-window marker-window))
+         (switch-to-buffer marker-buffer))
+      (error "The marked buffer has been deleted"))
+    (goto-char marker-point)
+    (set-buffer old-buffer)))
+
+
+(defun cscope-set-initial-directory (cs-id)
+  "Set the cscope-initial-directory variable.  The
+cscope-initial-directory variable, when set, specifies the directory
+where searches for the cscope database directory should begin.  This
+overrides the current directory, which would otherwise be used."
+  (interactive "DCscope Initial Directory: ")
+  (setq cscope-initial-directory cs-id))
+
+
+(defun cscope-unset-initial-directory ()
+  "Unset the cscope-initial-directory variable."
+  (interactive)
+  (setq cscope-initial-directory nil)
+  (message "The cscope-initial-directory variable is now unset."))
+
+
+(defun cscope-help ()
+  (interactive)
+  (message
+   (format "RET=%s, SPC=%s, o=%s, n=%s, p=%s, q=%s, h=%s"
+          "Select"
+          "Show"
+          "SelectOneWin"
+          "ShowNext"
+          "ShowPrev"
+          "Quit"
+          "Help")))
+
+
+(defun cscope-bury-buffer ()
+  "Clean up cscope, if necessary, and bury the buffer."
+  (interactive)
+  (let ()
+    (if overlay-arrow-position
+       (set-marker overlay-arrow-position nil))
+    (setq overlay-arrow-position nil
+         overlay-arrow-string nil)
+    (bury-buffer (get-buffer cscope-output-buffer-name))
+    ))
+
+
+(defun cscope-quit ()
+  (interactive)
+  (cscope-bury-buffer)
+  (kill-buffer cscope-output-buffer-name)
+  )
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun cscope-canonicalize-directory (dir)
+  (or dir
+      (setq dir default-directory))
+  (setq dir (file-name-as-directory
+            (expand-file-name (substitute-in-file-name dir))))
+  dir
+  )
+
+
+(defun cscope-search-directory-hierarchy (directory)
+  "Look for a cscope database in the directory hierarchy.
+Starting from DIRECTORY, look upwards for a cscope database."
+  (let (this-directory database-dir)
+    (catch 'done
+      (if (file-regular-p directory)
+         (throw 'done directory))
+      (setq directory (cscope-canonicalize-directory directory)
+           this-directory directory)
+      (while this-directory
+       (if (or (file-exists-p (concat this-directory cscope-database-file))
+               (file-exists-p (concat this-directory cscope-index-file)))
+           (progn
+             (setq database-dir this-directory)
+             (throw 'done database-dir)
+             ))
+       (if (string-match "^\\(/\\|[A-Za-z]:[\\/]\\)$" this-directory)
+           (throw 'done directory))
+       (setq this-directory (file-name-as-directory
+                             (file-name-directory
+                              (directory-file-name this-directory))))
+       ))
+    ))
+
+
+(defun cscope-find-info (top-directory)
+  "Locate a suitable cscope database directory.
+First, `cscope-database-regexps' is used to search for a suitable
+database directory.  If a database location cannot be found using this
+variable, then the current directory is searched, then the parent,
+then the parent's parent, until a cscope database directory is found,
+or the root directory is reached.  If the root directory is reached,
+the current directory will be used."
+  (let (info regexps dir-regexp this-directory)
+    (setq top-directory (cscope-canonicalize-directory
+                        (or top-directory cscope-initial-directory)))
+    (catch 'done
+      ;; Try searching using `cscope-database-regexps' ...
+      (setq regexps cscope-database-regexps)
+      (while regexps
+       (setq dir-regexp (car (car regexps)))
+       (cond
+        ( (stringp dir-regexp)
+          (if (string-match dir-regexp top-directory)
+              (progn
+                (setq info (cdr (car regexps)))
+                (throw 'done t)
+                )) )
+        ( (and (symbolp dir-regexp) dir-regexp)
+          (progn
+            (setq info (cdr (car regexps)))
+            (throw 'done t)
+            ) ))
+       (setq regexps (cdr regexps))
+       )
+
+      ;; Try looking in the directory hierarchy ...
+      (if (setq this-directory
+               (cscope-search-directory-hierarchy top-directory))
+         (progn
+           (setq info (list (list this-directory)))
+           (throw 'done t)
+           ))
+
+      ;; Should we add any more places to look?
+
+      )                ;; end catch
+    (if (not info)
+       (setq info (list (list top-directory))))
+    info
+    ))
+
+
+(defun cscope-make-entry-line (func-name line-number line)
+  ;; The format of entry line:
+  ;; func-name[line-number]______line
+  ;; <- cscope-name-line-width ->
+  ;; `format' of Emacs doesn't have "*s" spec.
+  (let* ((fmt (format "%%%ds %%s" cscope-name-line-width))
+        (str (format fmt (format "%s[%s]" func-name line-number) line))
+        beg end)
+    (if cscope-use-face
+       (progn
+         (setq end (length func-name))
+         (put-text-property 0 end 'face 'cscope-function-face str)
+         (setq beg (1+ end)
+               end (+ beg (length line-number)))
+         (put-text-property beg end 'face 'cscope-line-number-face str)
+         (setq end (length str)
+               beg (- end (length line)))
+         (put-text-property beg end 'face 'cscope-line-face str)
+         ))
+    str))
+
+
+(defun cscope-process-filter (process output)
+  "Accept cscope process output and reformat it for human readability.
+Magic text properties are added to allow the user to select lines
+using the mouse."
+  (let ( (old-buffer (current-buffer)) )
+    (unwind-protect
+       (progn
+         (set-buffer (process-buffer process))
+         ;; Make buffer-read-only nil
+         (let (buffer-read-only line file function-name line-number moving)
+           (setq moving (= (point) (process-mark process)))
+           (save-excursion
+             (goto-char (process-mark process))
+             ;; Get the output thus far ...
+             (if cscope-process-output
+                 (setq cscope-process-output (concat cscope-process-output
+                                                     output))
+               (setq cscope-process-output output))
+             ;; Slice and dice it into lines.
+             ;; While there are whole lines left ...
+             (while (and cscope-process-output
+                         (string-match "\\([^\n]+\n\\)\\(\\(.\\|\n\\)*\\)"
+                                       cscope-process-output))
+               (setq file                              nil
+                     glimpse-stripped-directory        nil
+                     )
+               ;; Get a line
+               (setq line (substring cscope-process-output
+                                     (match-beginning 1) (match-end 1)))
+               (setq cscope-process-output (substring cscope-process-output
+                                                      (match-beginning 2)
+                                                      (match-end 2)))
+               (if (= (length cscope-process-output) 0)
+                   (setq cscope-process-output nil))
+
+               ;; This should always match.
+               (if (string-match
+                    "^\\([^ \t]+\\)[ \t]+\\([^ \t]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\(.*\\)\n"
+                    line)
+                   (progn
+                     (let (str)
+                       (setq file (substring line (match-beginning 1)
+                                             (match-end 1))
+                             function-name (substring line (match-beginning 2)
+                                                      (match-end 2))
+                             line-number (substring line (match-beginning 3)
+                                                    (match-end 3))
+                             line (substring line (match-beginning 4)
+                                             (match-end 4))
+                             )
+                       ;; If the current file is not the same as the previous
+                       ;; one ...
+                       (if (not (and cscope-last-file
+                                     (string= file cscope-last-file)))
+                           (progn
+                             ;; The current file is different.
+
+                             ;; Insert a separating blank line if
+                             ;; necessary.
+                             (if cscope-last-file (insert "\n"))
+                             ;; Insert the file name
+                             (setq str (concat "*** " file ":"))
+                             (if cscope-use-face
+                                 (put-text-property 0 (length str)
+                                                    'face 'cscope-file-face
+                                                    str))
+                             (cscope-insert-with-text-properties
+                              str
+                              (expand-file-name file)
+                              ;; Yes, -1 is intentional
+                              -1)
+                             (insert "\n")
+                             ))
+                       (if (not cscope-first-match)
+                           (setq cscope-first-match-point (point)))
+                       ;; ... and insert the line, with the
+                       ;; appropriate indentation.
+                       (cscope-insert-with-text-properties
+                        (cscope-make-entry-line function-name
+                                                line-number
+                                                line)
+                        (expand-file-name file)
+                        line-number)
+                       (insert "\n")
+                       (setq cscope-last-file file)
+                       (if cscope-first-match
+                           (setq cscope-matched-multiple t)
+                         (setq cscope-first-match
+                               (cons (expand-file-name file)
+                                     (string-to-number line-number))))
+                       ))
+                 (insert line "\n")
+                 ))
+             (set-marker (process-mark process) (point))
+             )
+           (if moving
+               (goto-char (process-mark process)))
+           (set-buffer-modified-p nil)
+           ))
+      (set-buffer old-buffer))
+    ))
+
+
+(defun cscope-process-sentinel (process event)
+  "Sentinel for when the cscope process dies."
+  (let* ( (buffer (process-buffer process)) window update-window
+         (done t) (old-buffer (current-buffer))
+        (old-buffer-window (get-buffer-window old-buffer)) )
+    (set-buffer buffer)
+    (save-window-excursion
+      (save-excursion
+       (if (or (and (setq window (get-buffer-window buffer))
+                    (= (window-point window) (point-max)))
+               (= (point) (point-max)))
+           (progn
+             (setq update-window t)
+             ))
+       (delete-process process)
+       (let (buffer-read-only continue)
+         (goto-char (point-max))
+         (if (and cscope-suppress-empty-matches
+                  (= cscope-output-start (point)))
+             (delete-region cscope-item-start (point-max))
+           (progn
+             (if (not cscope-start-directory)
+                 (setq cscope-start-directory default-directory))
+             (insert cscope-separator-line)
+             ))
+         (setq continue
+               (and cscope-search-list
+                    (not (and cscope-first-match
+                              cscope-stop-at-first-match-dir
+                              (not cscope-stop-at-first-match-dir-meta)))))
+         (if continue
+             (setq continue (cscope-search-one-database)))
+         (if continue
+             (progn
+               (setq done nil)
+               )
+           (progn
+             (insert "\nSearch complete.")
+             (if cscope-display-times
+                 (let ( (times (current-time)) cscope-stop elapsed-time )
+                   (setq cscope-stop (+ (* (car times) 65536.0)
+                                        (car (cdr times))
+                                        (* (car (cdr (cdr times))) 1.0E-6)))
+                   (setq elapsed-time (- cscope-stop cscope-start-time))
+                   (insert (format "  Search time = %.2f seconds."
+                                   elapsed-time))
+                   ))
+             (setq cscope-process nil)
+             (if cscope-running-in-xemacs
+                 (setq modeline-process ": Search complete"))
+             (if cscope-start-directory
+                 (setq default-directory cscope-start-directory))
+             (if (not cscope-first-match)
+                 (message "No matches were found."))
+             )
+           ))
+       (set-buffer-modified-p nil)
+       ))
+    (if (and done cscope-first-match-point update-window)
+       (if window
+           (set-window-point window cscope-first-match-point)
+         (goto-char cscope-first-match-point))
+      )
+    (cond
+     ( (not done)              ;; we're not done -- do nothing for now
+       (if update-window
+          (if window
+              (set-window-point window (point-max))
+            (goto-char (point-max))))
+       )
+     ( cscope-first-match
+       (if cscope-display-cscope-buffer
+           (if (and cscope-edit-single-match (not cscope-matched-multiple))
+               (cscope-show-entry-internal(car cscope-first-match)
+                                           (cdr cscope-first-match) t))
+         (cscope-select-entry-specified-window old-buffer-window))
+       )
+     )
+    (if (and done (eq old-buffer buffer) cscope-first-match)
+       (cscope-help))
+    (set-buffer old-buffer)
+    ))
+
+
+(defun cscope-search-one-database ()
+  "Pop a database entry from cscope-search-list and do a search there."
+  (let ( next-item options cscope-directory database-file outbuf done
+                  base-database-file-name)
+    (setq outbuf (get-buffer-create cscope-output-buffer-name))
+    (save-excursion
+      (catch 'finished
+       (set-buffer outbuf)
+       (setq options '("-L"))
+       (while (and (not done) cscope-search-list)
+         (setq next-item (car cscope-search-list)
+               cscope-search-list (cdr cscope-search-list)
+               base-database-file-name cscope-database-file
+               )
+         (if (listp next-item)
+             (progn
+               (setq cscope-directory (car next-item))
+               (if (not (stringp cscope-directory))
+                   (setq cscope-directory
+                         (cscope-search-directory-hierarchy
+                          default-directory)))
+               (if (file-regular-p cscope-directory)
+                   (progn
+                     ;; Handle the case where `cscope-directory' is really
+                     ;; a full path name to a cscope database.
+                     (setq base-database-file-name
+                           (file-name-nondirectory cscope-directory)
+                           cscope-directory
+                           (file-name-directory cscope-directory))
+                     ))
+               (setq cscope-directory 
+                     (file-name-as-directory cscope-directory))
+               (if (not (member cscope-directory cscope-searched-dirs))
+                   (progn
+                     (setq cscope-searched-dirs (cons cscope-directory
+                                                      cscope-searched-dirs)
+                           done t)
+                     ))
+               )
+           (progn
+             (if (and cscope-first-match
+                      cscope-stop-at-first-match-dir
+                      cscope-stop-at-first-match-dir-meta)
+                 (throw 'finished nil))
+             ))
+         )
+       (if (not done)
+           (throw 'finished nil))
+       (if (car (cdr next-item))
+           (let (newopts)
+             (setq newopts (car (cdr next-item)))
+             (if (not (listp newopts))
+                 (error (format "Cscope options must be a list: %s" newopts)))
+             (setq options (append options newopts))
+             ))
+       (if cscope-command-args
+           (setq options (append options cscope-command-args)))
+       (setq database-file (concat cscope-directory base-database-file-name)
+             cscope-searched-dirs (cons cscope-directory
+                                        cscope-searched-dirs)
+             )
+
+       ;; The database file and the directory containing the database file
+       ;; must both be writable.
+       (if (or (not (file-writable-p database-file))
+               (not (file-writable-p (file-name-directory database-file)))
+               cscope-do-not-update-database)
+           (setq options (cons "-d" options)))
+
+       (goto-char (point-max))
+       (setq cscope-item-start (point))
+       (if (string= base-database-file-name cscope-database-file)
+           (insert "\nDatabase directory: " cscope-directory "\n"
+                   cscope-separator-line)
+         (insert "\nDatabase directory/file: "
+                 cscope-directory base-database-file-name "\n"
+                 cscope-separator-line))
+       ;; Add the correct database file to search
+       (setq options (cons base-database-file-name options))
+       (setq options (cons "-f" options))
+       (setq cscope-output-start (point))
+       (setq default-directory cscope-directory)
+       (if cscope-filter-func
+           (progn
+             (setq cscope-process-output nil
+                   cscope-last-file nil
+                   )
+             (setq cscope-process
+                   (apply 'start-process "cscope" outbuf
+                          cscope-program options))
+             (set-process-filter cscope-process cscope-filter-func)
+             (set-process-sentinel cscope-process cscope-sentinel-func)
+             (set-marker (process-mark cscope-process) (point))
+             (process-kill-without-query cscope-process)
+             (if cscope-running-in-xemacs
+                 (setq modeline-process ": Searching ..."))
+             (setq buffer-read-only t)
+             )
+         (apply 'call-process cscope-program nil outbuf t options)
+         )
+       t
+       ))
+    ))
+
+
+(defun cscope-call (msg args &optional directory filter-func sentinel-func)
+  "Generic function to call to process cscope requests.
+ARGS is a list of command-line arguments to pass to the cscope
+process.  DIRECTORY is the current working directory to use (generally,
+the directory in which the cscope database is located, but not
+necessarily), if different that the current one.  FILTER-FUNC and
+SENTINEL-FUNC are optional process filter and sentinel, respectively."
+  (let ( (outbuf (get-buffer-create cscope-output-buffer-name))
+         (old-buffer (current-buffer)) )
+    (if cscope-process
+       (error "A cscope search is still in progress -- only one at a time is allowed"))
+    (setq directory (cscope-canonicalize-directory
+                     (or cscope-initial-directory directory)))
+    (if (eq outbuf old-buffer) ;; In the *cscope* buffer.
+       (if cscope-marker-window
+           (progn
+             ;; Assume that cscope-marker-window is the window, from the
+             ;; users perspective, from which the search was launched and the
+             ;; window that should be returned to upon cscope-pop-mark.
+             (set-buffer (window-buffer cscope-marker-window))
+             (setq cscope-marker (point-marker))
+             (set-buffer old-buffer)))
+       (progn ;; Not in the *cscope buffer.
+         ;; Set the cscope-marker-window to whichever window this search
+         ;; was launched from.
+         (setq cscope-marker-window (get-buffer-window old-buffer))
+       (setq cscope-marker (point-marker))))
+    (save-excursion
+      (set-buffer outbuf)
+      (if cscope-display-times
+         (let ( (times (current-time)) )
+           (setq cscope-start-time (+ (* (car times) 65536.0) (car (cdr times))
+                                      (* (car (cdr (cdr times))) 1.0E-6)))))
+      (setq default-directory directory
+           cscope-start-directory nil
+           cscope-search-list (cscope-find-info directory)
+           cscope-searched-dirs nil
+           cscope-command-args args
+           cscope-filter-func filter-func
+           cscope-sentinel-func sentinel-func
+           cscope-first-match nil
+           cscope-first-match-point nil
+           cscope-stop-at-first-match-dir-meta (memq t cscope-search-list)
+           cscope-matched-multiple nil
+           buffer-read-only nil)
+      (buffer-disable-undo)
+      (erase-buffer)
+      (setq truncate-lines cscope-truncate-lines)
+      (if msg
+         (insert msg "\n"))
+      (cscope-search-one-database)
+      )
+    (if cscope-display-cscope-buffer
+       (progn
+         (pop-to-buffer outbuf)
+         (cscope-help))
+      (set-buffer outbuf))
+    (goto-char (point-max))
+    (cscope-list-entry-mode)
+    ))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar cscope-unix-index-process-buffer-name "*cscope-indexing-buffer*"
+  "The name of the buffer to use for displaying indexing status/progress.")
+
+
+(defvar cscope-unix-index-process-buffer nil
+  "The buffer to use for displaying indexing status/progress.")
+
+
+(defvar cscope-unix-index-process nil
+  "The current indexing process.")
+
+
+(defun cscope-unix-index-files-sentinel (process event)
+  "Simple sentinel to print a message saying that indexing is finished."
+  (let (buffer)
+    (save-window-excursion
+      (save-excursion
+       (setq buffer (process-buffer process))
+       (set-buffer buffer)
+       (goto-char (point-max))
+       (insert cscope-separator-line "\nIndexing finished\n")
+       (delete-process process)
+       (setq cscope-unix-index-process nil)
+       (set-buffer-modified-p nil)
+       ))
+    ))
+
+
+(defun cscope-unix-index-files-internal (top-directory header-text args)
+  "Core function to call the indexing script."
+  (let ()
+    (save-excursion
+      (setq top-directory (cscope-canonicalize-directory top-directory))
+      (setq cscope-unix-index-process-buffer
+           (get-buffer-create cscope-unix-index-process-buffer-name))
+      (display-buffer cscope-unix-index-process-buffer)
+      (set-buffer cscope-unix-index-process-buffer)
+      (setq buffer-read-only nil)
+      (setq default-directory top-directory)
+      (buffer-disable-undo)
+      (erase-buffer)
+      (if header-text
+         (insert header-text))
+      (setq args (append args
+                        (list "-v"
+                              "-i" cscope-index-file
+                              "-f" cscope-database-file
+                              (if cscope-use-relative-paths
+                                  "." top-directory))))
+      (if cscope-index-recursively
+         (setq args (cons "-r" args)))
+      (setq cscope-unix-index-process
+           (apply 'start-process "cscope-indexer"
+                  cscope-unix-index-process-buffer
+                  cscope-indexing-script args))
+      (set-process-sentinel cscope-unix-index-process
+                           'cscope-unix-index-files-sentinel)
+      (process-kill-without-query cscope-unix-index-process)
+      )
+    ))
+
+
+(defun cscope-index-files (top-directory)
+  "Index files in a directory.
+This function creates a list of files to index, and then indexes
+the listed files.
+The variable, \"cscope-index-recursively\", controls whether or not
+subdirectories are indexed."
+  (interactive "DIndex files in directory: ")
+  (let ()
+    (cscope-unix-index-files-internal
+     top-directory
+     (format "Creating cscope index `%s' in:\n\t%s\n\n%s"
+            cscope-database-file top-directory cscope-separator-line)
+     nil)
+    ))
+
+
+(defun cscope-create-list-of-files-to-index (top-directory)
+  "Create a list of files to index.
+The variable, \"cscope-index-recursively\", controls whether or not
+subdirectories are indexed."
+  (interactive "DCreate file list in directory: ")
+  (let ()
+    (cscope-unix-index-files-internal
+     top-directory
+     (format "Creating cscope file list `%s' in:\n\t%s\n\n"
+            cscope-index-file top-directory)
+     '("-l"))
+    ))
+
+
+(defun cscope-edit-list-of-files-to-index ()
+  "Search for and edit the list of files to index.
+If this functions causes a new file to be edited, that means that a
+cscope.out file was found without a corresponding cscope.files file."
+  (interactive)
+  (let (info directory file)
+    (setq info (cscope-find-info nil))
+    (if (/= (length info) 1)
+       (error "There is no unique cscope database directory!"))
+    (setq directory (car (car info)))
+    (if (not (stringp directory))
+       (setq directory
+             (cscope-search-directory-hierarchy default-directory)))
+    (setq file (concat (file-name-as-directory directory) cscope-index-file))
+    (find-file file)
+    (message (concat "File: " file))
+    ))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun cscope-tell-user-about-directory ()
+  "Display the name of the directory containing the cscope database."
+  (interactive)
+  (let (info directory)
+    (setq info (cscope-find-info nil))
+    (if (= (length info) 1)
+       (progn
+         (setq directory (car (car info)))
+         (message (concat "Cscope directory: " directory))
+         )
+      (let ( (outbuf (get-buffer-create cscope-info-buffer-name)) )
+       (display-buffer outbuf)
+       (save-excursion
+         (set-buffer outbuf)
+         (buffer-disable-undo)
+         (erase-buffer)
+         (insert "Cscope search directories:\n")
+         (while info
+           (if (listp (car info))
+               (progn
+                 (setq directory (car (car info)))
+                 (if (not (stringp directory))
+                     (setq directory
+                           (cscope-search-directory-hierarchy
+                            default-directory)))
+                 (insert "\t" directory "\n")
+                 ))
+           (setq info (cdr info))
+           )
+         )
+       ))
+    ))
+
+
+(defun cscope-dired-directory ()
+  "Run dired upon the cscope database directory.
+If possible, the cursor is moved to the name of the cscope database
+file."
+  (interactive)
+  (let (info directory buffer p1 p2 pos)
+    (setq info (cscope-find-info nil))
+    (if (/= (length info) 1)
+       (error "There is no unique cscope database directory!"))
+    (setq directory (car (car info)))
+    (if (not (stringp directory))
+       (setq directory
+             (cscope-search-directory-hierarchy default-directory)))
+    (setq buffer (dired-noselect directory nil))
+    (switch-to-buffer buffer)
+    (set-buffer buffer)
+    (save-excursion
+      (goto-char (point-min))
+      (setq p1 (search-forward cscope-index-file nil t))
+      (if p1
+         (setq p1 (- p1 (length cscope-index-file))))
+      )
+    (save-excursion
+      (goto-char (point-min))
+      (setq p2 (search-forward cscope-database-file nil t))
+      (if p2
+         (setq p2 (- p2 (length cscope-database-file))))
+      )
+    (cond
+     ( (and p1 p2)
+       (if (< p1 p2)
+          (setq pos p1)
+        (setq pos p2))
+       )
+     ( p1
+       (setq pos p1)
+       )
+     ( p2
+       (setq pos p2)
+       )
+     )
+    (if pos
+       (set-window-point (get-buffer-window buffer) pos))
+    ))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun cscope-extract-symbol-at-cursor (extract-filename)
+  (let* ( (symbol-chars (if extract-filename
+                           cscope-filename-chars
+                         cscope-symbol-chars))
+         (symbol-char-regexp (concat "[" symbol-chars "]"))
+         )
+    (save-excursion
+      (buffer-substring-no-properties
+       (progn
+        (if (not (looking-at symbol-char-regexp))
+            (re-search-backward "\\w" nil t))
+        (skip-chars-backward symbol-chars)
+        (point))
+       (progn
+        (skip-chars-forward symbol-chars)
+        (point)
+        )))
+    ))
+
+
+(defun cscope-prompt-for-symbol (prompt extract-filename)
+  "Prompt the user for a cscope symbol."
+  (let (sym)
+    (setq sym (cscope-extract-symbol-at-cursor extract-filename))
+    (if (or (not sym)
+           (string= sym "")
+           (not (and cscope-running-in-xemacs
+                     cscope-no-mouse-prompts current-mouse-event
+                     (or (mouse-event-p current-mouse-event)
+                         (misc-user-event-p current-mouse-event))))
+           ;; Always prompt for symbol in dired mode.
+           (eq major-mode 'dired-mode)
+           )
+       (setq sym (read-from-minibuffer prompt sym))
+      sym)
+    ))
+
+
+(defun cscope-find-this-symbol (symbol)
+  "Locate a symbol in source code."
+  (interactive (list
+               (cscope-prompt-for-symbol "Find this symbol: " nil)
+               ))
+  (let ( (cscope-adjust t) )    ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding symbol: %s" symbol)
+                (list "-0" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-global-definition (symbol)
+  "Find a symbol's global definition."
+  (interactive (list
+               (cscope-prompt-for-symbol "Find this global definition: " nil)
+               ))
+  (let ( (cscope-adjust t) )    ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding global definition: %s" symbol)
+                (list "-1" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-global-definition-no-prompting ()
+  "Find a symbol's global definition without prompting."
+  (interactive)
+  (let ( (symbol (cscope-extract-symbol-at-cursor nil))
+        (cscope-adjust t) )     ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding global definition: %s" symbol)
+                (list "-1" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-called-functions (symbol)
+  "Display functions called by a function."
+  (interactive (list
+               (cscope-prompt-for-symbol
+                "Find functions called by this function: " nil)
+               ))
+  (let ( (cscope-adjust nil) )  ;; Disable fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding functions called by: %s" symbol)
+                (list "-2" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-functions-calling-this-function (symbol)
+  "Display functions calling a function."
+  (interactive (list
+               (cscope-prompt-for-symbol
+                "Find functions calling this function: " nil)
+               ))
+  (let ( (cscope-adjust t) )    ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding functions calling: %s" symbol)
+                (list "-3" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-this-text-string (symbol)
+  "Locate where a text string occurs."
+  (interactive (list
+               (cscope-prompt-for-symbol "Find this text string: " nil)
+               ))
+  (let ( (cscope-adjust t) )    ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding text string: %s" symbol)
+                (list "-4" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-egrep-pattern (symbol)
+  "Run egrep over the cscope database."
+  (interactive (list
+               (let (cscope-no-mouse-prompts)
+                 (cscope-prompt-for-symbol "Find this egrep pattern: " nil))
+               ))
+  (let ( (cscope-adjust t) )    ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding egrep pattern: %s" symbol)
+                (list "-6" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-this-file (symbol)
+  "Locate a file."
+  (interactive (list
+               (let (cscope-no-mouse-prompts)
+                 (cscope-prompt-for-symbol "Find this file: " t))
+               ))
+  (let ( (cscope-adjust nil) )  ;; Disable fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding file: %s" symbol)
+                (list "-7" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+(defun cscope-find-files-including-file (symbol)
+  "Locate all files #including a file."
+  (interactive (list
+               (let (cscope-no-mouse-prompts)
+                 (cscope-prompt-for-symbol
+                  "Find files #including this file: " t))
+               ))
+  (let ( (cscope-adjust t) )   ;; Use fuzzy matching.
+    (setq cscope-symbol symbol)
+    (cscope-call (format "Finding files #including file: %s" symbol)
+                (list "-8" symbol) nil 'cscope-process-filter
+                'cscope-process-sentinel)
+    ))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar cscope-minor-mode nil
+  "")
+(make-variable-buffer-local 'cscope-minor-mode)
+(put 'cscope-minor-mode 'permanent-local t)
+
+
+(defun cscope-minor-mode (&optional arg)
+  ""
+  (progn
+    (setq cscope-minor-mode (if (null arg) t (car arg)))
+    (if cscope-minor-mode
+       (progn
+         (easy-menu-add cscope:menu cscope:map)
+         (run-hooks 'cscope-minor-mode-hooks)
+         ))
+    cscope-minor-mode
+    ))
+
+
+(defun cscope:hook ()
+  ""
+  (progn
+    (cscope-minor-mode)
+    ))
+
+
+(or (assq 'cscope-minor-mode minor-mode-map-alist)
+    (setq minor-mode-map-alist (cons (cons 'cscope-minor-mode cscope:map)
+                                    minor-mode-map-alist)))
+
+(add-hook 'c-mode-hook (function cscope:hook))
+(add-hook 'c++-mode-hook (function cscope:hook))
+(add-hook 'dired-mode-hook (function cscope:hook))
+
+(provide 'xcscope)
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..bd0ac08
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,688 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2011-12-04.11; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+              s/^ *//
+              s/ \\*$//
+              s/$/:/
+              p
+            }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/      \1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/        /
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..5d45d42
--- /dev/null
@@ -0,0 +1,4 @@
+## Process this file with automake to produce Makefile.in
+
+man_MANS = cscope.1
+EXTRA_DIST = $(man_MANS) xcscope.1
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..f35b72e
--- /dev/null
@@ -0,0 +1,426 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
+CURSES_LIBS = @CURSES_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gnome1 = @gnome1@
+gnome2 = @gnome2@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = cscope.1
+EXTRA_DIST = $(man_MANS) xcscope.1
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-man1: $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       { for i in $$list; do echo "$$i"; done; \
+       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+         sed -n '/\.1[a-z]*$$/p'; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+         sed -n '/\.1[a-z]*$$/p'; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @list='$(MANS)'; if test -n "$$list"; then \
+         list=`for p in $$list; do \
+           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+         if test -n "$$list" && \
+           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+           echo "       typically \`make maintainer-clean' will remove them" >&2; \
+           exit 1; \
+         else :; fi; \
+       else :; fi
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-man1 install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+       uninstall-am uninstall-man uninstall-man1
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/cscope.1 b/doc/cscope.1
new file mode 100644 (file)
index 0000000..6a3a86b
--- /dev/null
@@ -0,0 +1,591 @@
+.PU
+.TH CSCOPE "1" "January 2007" "The Santa Cruz Operation"
+.SH NAME
+cscope - interactively examine a C program 
+.SH SYNOPSIS
+.B cscope
+.B [\-bCcdehkLlqRTUuVv]
+.BI [\-F symfile ]
+.BI [\-f reffile ]
+.BI [\-I incdir ]
+.BI [\-i namefile ]
+.BI [\-0123456789 pattern ]
+.BI [\-p n ]
+.BI [\-s dir ]
+.BI [ files ]
+.SH DESCRIPTION
+.I cscope
+is an interactive, screen-oriented tool that allows the user to
+browse through C source files for specified elements of code.
+.PP   
+By default, 
+.I cscope
+examines the C (.c and .h), lex (.l), and yacc (.y)
+source files in the current directory.
+.I cscope
+may also be invoked for
+source files named on the command line. In either case, 
+.I cscope
+searches the standard directories for #include files that it does not
+find in the current directory. 
+.I cscope
+uses a symbol cross-reference, called 
+cscope.out by default, to locate functions, function calls, macros,
+variables, and preprocessor symbols in the files.
+.PP   
+.I cscope
+builds the symbol cross-reference the first time it is used on
+the source files for the program being browsed. On a subsequent
+invocation, 
+.I cscope
+rebuilds the cross-reference only if a source file
+has changed or the list of source files is different. When the
+cross-reference is rebuilt, the data for the unchanged files are
+copied from the old cross-reference, which makes rebuilding faster
+than the initial build.
+.SH OPTIONS  
+Some command line arguments can only occur as the only argument in
+the execution of cscope.  They cause the program to just print out
+some output and exit immediately:
+.TP
+.B -h
+View the long usage help display.
+.TP
+.B -V
+Print on the first line of screen the version number of cscope.
+.TP
+.B --help
+Same as
+.B -h
+.TP
+.B --version
+Same as
+.B -V
+
+.PP
+The following options can appear in any combination:
+.TP
+.B -b
+Build the cross-reference only.
+.TP
+.B -C
+Ignore letter case when searching.
+.TP
+.B -c
+Use only ASCII characters in the cross-reference file, that is,
+do not compress the data.
+.TP
+.B -d
+Do not update the cross-reference.
+.TP
+.B -e
+Suppress the <Ctrl>-e command prompt between files.
+.TP
+.BI -F symfile
+Read symbol reference lines from 
+.I symfile. 
+(A symbol reference
+file is created by > and >>, and can also be read using the <
+command, described under ``Issuing Subsequent Requests'',
+below.)
+.TP
+.BI -f reffile
+Use 
+.I reffile 
+as the cross-reference file name instead of the default "cscope.out".
+.TP
+.BI -I incdir
+Look in 
+.I incdir 
+(before looking in $INCDIR, the standard place
+for header files, normally /usr/include) for any #include files
+whose names do not begin with ``/'' and that are not specified
+on the command line or in 
+.I namefile 
+below. (The #include files
+may be specified with either double quotes or angle brackets.)
+The incdir directory is searched in addition to the current
+directory (which is searched first) and the standard list
+(which is searched last). If more than one occurrence of -I
+appears, the directories are searched in the order they appear
+on the command line.
+.TP
+.BI -i namefile
+Browse through all source files whose names are listed in 
+.I namefile
+(file names separated by spaces, tabs, or new-lines) instead of the
+default name list file, which is called cscope.files. If this option
+is specified, cscope ignores any file names appearing on the command
+line. The argument namefile can be set to ``-'' to accept a list of
+files from the standard input.  Filenames in the namefile that contain
+whitespace have to be enclosed in "double quotes".  Inside such quoted
+filenames, any double-quote and backslash characters have to be
+escaped by backslashes.
+.TP
+.B -k
+``Kernel Mode'', turns off the use of the default include dir
+(usually /usr/include) when building the database, since kernel
+source trees generally do not use it.
+.TP
+.B -L
+Do a single search with line-oriented output when used with the
+-num pattern option.
+.TP
+.B -l
+Line-oriented interface (see ``Line-Oriented Interface''
+below).
+.TP
+.BI -[ "0-9" ] pattern
+Go to input field 
+.I num 
+(counting from 0) and find 
+.I pattern.
+.TP
+.BI -P path
+Prepend 
+.I path 
+to relative file names in a pre-built cross-reference file so you do
+not have to change to the directory where the cross-reference file was
+built. This option is only valid with the -d option.
+.TP
+.BI -p n
+Display the last
+.I n 
+file path components instead of the default (1). Use 
+.I 0 
+not to display the file name at all.
+.TP
+.B -q
+Enable fast symbol lookup via an inverted index. This option
+causes cscope to create 2 more files (default names
+``cscope.in.out'' and ``cscope.po.out'') in addition to the normal
+database. This allows a faster symbol search algorithm that
+provides noticeably faster lookup performance for large projects.
+.TP
+.B -R
+Recurse subdirectories during search for source files.
+.TP
+.BI -s dir
+Look in
+.I dir
+for additional source files. This option is ignored if source files
+are given on the command line.
+.TP
+.B -T
+Use only the first eight characters to match against C symbols.
+A regular expression containing special characters other than a
+period (.) will not match any symbol if its minimum length is
+greater than eight characters.
+.TP
+.B -U
+Check file time stamps. This option will update the time stamp
+on the database even if no files have changed.
+.TP
+.B -u
+Unconditionally build the cross-reference file (assume that all
+files have changed).
+.TP
+.B -v
+Be more verbose in line-oriented mode.  Output progress updates during
+database building and searches.
+.TP
+.I files
+A list of file names to operate on.
+.PP
+The -I, -c, -k, -p, -q, and -T options can also be in the cscope.files file.
+.PP
+.SS Requesting the initial search
+.PP
+After the cross-reference is ready, cscope will display this menu:
+.PP
+.B Find this C symbol:
+.PD 0
+.TP
+.B  Find this function definition:
+.TP
+.B  Find functions called by this function:
+.TP
+.B  Find functions calling this function:
+.TP
+.B  Find this text string:
+.TP
+.B  Change this text string:
+.TP
+.B  Find this egrep pattern:
+.TP
+.B  Find this file:
+.TP
+.B  Find files #including this file:
+.PD 1
+.PP
+Press the <Up> or <Down> keys repeatedly to move to the desired input
+field, type the text to search for, and then press the <Return> key.
+.PP
+.SS "Issuing subsequent requests"
+If the search is successful, any of these single-character commands
+can be used:
+.TP
+.B 0-9a-zA-Z
+Edit the file referenced by the given line number.
+.TP
+.B <Space>
+Display next set of matching lines.
+.TP
+.B <Tab>
+Alternate between the menu and the list of matching lines
+.TP
+.B <Up>
+Move to the previous menu item (if the cursor is in the menu)
+or move to the previous matching line (if the cursor is in the
+matching line list.)
+.TP
+.B <Down>
+Move to the next menu item (if the cursor is in the menu)
+or move to the next matching line (if the cursor is in the
+matching line list.)
+.TP
+.B +
+Display next set of matching lines.
+.TP
+.B - 
+Display previous set of matching lines.
+.TP
+.B ^e
+Edit displayed files in order.
+.TP
+.B >
+Write the displayed list of lines to a file.
+.TP
+.B >>
+Append the displayed list of lines to a file.
+.TP
+.B <
+Read lines from a file that is in symbol reference format
+(created by > or >>), just like the -F option.
+.TP
+.B ^
+Filter all lines through a shell command and display the
+resulting lines, replacing the lines that were already there.
+.TP
+.B |
+Pipe all lines to a shell command and display them without
+changing them.
+.PP
+At any time these single-character commands can also be used:
+.TP
+.B <Return>
+Move to next input field.
+.TP
+.B ^n
+Move to next input field.
+.TP
+.B ^p
+Move to previous input field.
+.TP
+.B ^y
+Search with the last text typed.
+.TP
+.B ^b
+Move to previous input field and search pattern.
+.TP
+.B ^f
+Move to next input field and search pattern.
+.TP
+.B ^c
+Toggle ignore/use letter case when searching. (When ignoring
+letter case, search for ``FILE'' will match ``File'' and
+``file''.)
+.TP
+.B ^r
+Rebuild the cross-reference.
+.TP
+.B !
+Start an interactive shell (type ^d to return to cscope).
+.TP
+.B ^l
+Redraw the screen.
+.TP
+.B ?
+Give help information about cscope commands.
+.TP
+.B ^d
+Exit cscope.
+.PP
+.PP   
+.B NOTE: If the first character of the text to be searched for matches
+.B one of the above commands, escape it by typing a  (backslash) first.
+.PP
+.B Substituting new text for old text
+.PP
+After the text to be changed has been typed, cscope will prompt for
+the new text, and then it will display the lines containing the old
+text. Select the lines to be changed with these single-character
+commands:
+.PP
+.TP
+.B 0-9a-zA-Z
+Mark or unmark the line to be changed.
+.TP
+.B * 
+Mark or unmark all displayed lines to be changed.
+.TP
+.B <Space>
+Display next set of lines.
+.TP
+.B +
+Display next set of lines.
+.TP
+.B - 
+Display previous set of lines.
+.TP
+.B a
+Mark or unmark all lines to be changed.
+.TP
+.B ^d
+Change the marked lines and exit.
+.TP
+.B <Esc>
+Exit without changing the marked lines.
+.TP
+.B !
+Start an interactive shell (type ^d to return to cscope).
+.TP
+.B ^l
+Redraw the screen.
+.TP
+.B ?
+Give help information about cscope commands.
+.TP
+.B  Special keys
+If your terminal has arrow keys that work in vi, you can use them
+to move around the input fields. The up-arrow key is useful to move to
+the previous
+input field instead of using the <Tab> key repeatedly. If you have
+<CLEAR>, <NEXT>, or <PREV> keys they will act as the ^l, +, and -
+commands, respectively.
+.PP   
+.SS Line-Oriented interface
+.PP  
+The -l option lets you use cscope where a screen-oriented interface
+would not be useful, for example, from another screen-oriented
+program.
+.PP  
+cscope will prompt with >> when it is ready for an input line starting
+with the field number (counting from 0) immediately followed by the
+search pattern, for example, ``lmain'' finds the definition of the
+main function.
+.PP   
+If you just want a single search, instead of the -l option use the -L
+and -num pattern options, and you won't get the >> prompt.
+.PP 
+For -l, cscope outputs the number of reference lines
+cscope: 2 lines
+.PP  
+For each reference found, cscope outputs a line consisting of the file
+name, function name, line number, and line text, separated by spaces,
+for example,
+main.c main 161 main(argc, argv)
+.PP
+Note that the editor is not called to display a single reference,
+unlike the screen-oriented interface.
+.PP
+You can use the c command to toggle ignore/use letter case when
+searching. (When ignoring letter case, search for ``FILE'' will match
+``File'' and ``file''.)
+.PP
+You can use the r command to rebuild the database.
+.PP
+cscope will quit when it detects end-of-file, or when the first
+character of an input line is ``^d'' or ``q''.
+.PP   
+.SH "ENVIRONMENT VARIABLES"
+.TP
+.B CSCOPE_EDITOR
+Overrides the EDITOR and VIEWER variables. Use this if you wish to use
+a different editor with cscope than that specified by your
+EDITOR/VIEWER variables.
+.TP
+.B CSCOPE_LINEFLAG
+Format of the line number flag for your editor. By default, cscope
+invokes your editor via the equivalent of ``editor +N file'', where
+``N'' is the line number that the editor should jump to. This format
+is used by both emacs and vi. If your editor needs something
+different, specify it in this variable, with ``%s'' as a placeholder
+for the line number.  Ex: if your editor needs to be invoked as
+``editor -#103 file'' to go to line 103, set this variable to
+``-#%s''.
+.TP
+.B CSCOPE_LINEFLAG_AFTER_FILE
+Set this variable to ``yes'' if your editor needs to be invoked with
+the line number option after the filename to be edited. To continue
+the example from CSCOPE_LINEFLAG, above: if your editor needs to see
+``editor file -#number'', set this environment variable. Users of most
+standard editors (vi, emacs) do not need to set this variable.
+.TP
+.B EDITOR
+Preferred editor, which defaults to vi.
+.TP
+.B HOME
+Home directory, which is automatically set at login.
+.TP
+.B INCLUDEDIRS
+Colon-separated list of directories to search for #include
+files.
+.TP
+.B SHELL
+Preferred shell, which defaults to sh.
+.TP
+.B SOURCEDIRS
+Colon-separated list of directories to search for additional
+source files.
+.TP
+.B TERM
+Terminal type, which must be a screen terminal.
+.TP
+.B TERMINFO
+Terminal information directory full path name. If your terminal
+is not in the standard terminfo directory, see curses
+and terminfo for how to make your own terminal description.
+.TP
+.B TMPDIR
+Temporary file directory, which defaults to /var/tmp.
+.TP
+.B VIEWER
+Preferred file display program (such as less), which overrides
+EDITOR (see above).
+.TP
+.B VPATH
+A colon-separated list of directories, each of which has the
+same directory structure below it. If VPATH is set, cscope
+searches for source files in the directories specified; if it
+is not set, cscope searches only in the current directory.
+.PP
+.SH FILES
+.TP
+.B cscope.files
+Default files containing -I, -p, -q, and -T options and the
+list of source files (overridden by the -i option).
+.TP
+.B cscope.out
+Symbol cross-reference file (overridden by the -f option),
+which is put in the home directory if it cannot be created in
+the current directory.
+.TP
+.PD 0
+.B cscope.in.out
+.TP
+.B cscope.po.out
+.PD 1
+Default files containing the inverted index used for quick
+symbol searching (-q option). If you use the -f option to
+rename the cross-reference file (so it's not cscope.out), the
+names for these inverted index files will be created by adding
+ .in and .po to the name you supply with -f. For example, if you
+indicated -f xyz, then these files would be named xyz.in and
+xyz.po.
+.TP
+.B INCDIR
+Standard directory for #include files (usually /usr/include).
+.SH Notices
+.I cscope
+recognizes function definitions of the form:
+.PD 0
+.TP
+fname blank ( args ) white arg_decs white {
+.PD 1 
+.TP
+where:
+.I fname
+is the function name
+.TP
+.I blank
+is zero or more spaces, tabs, vtabs, form feeds or carriage returns,
+not including newlines
+.TP
+.I args
+is any string that does not contain a ``"'' or a newline
+.TP
+.I white
+is zero or more spaces, tabs, vtabs, form feeds, carriage returns or newlines
+.TP
+.I arg_decs
+are zero or more argument declarations (arg_decs may include
+comments and white space)
+.PP
+It is not necessary for a function declaration to start at the
+beginning of a line. The return type may precede the function name;
+cscope will still recognize the declaration. Function definitions that
+deviate from this form will not be recognized by cscope.
+.PP
+The ``Function'' column of the search output for the menu option Find
+functions called by this function: input field will only display the
+first function called in the line, that is, for this function
+.PP
+ e()
+ {
+         return (f() + g());
+ }
+.PP
+the display would be
+.PP
+   Functions called by this function: e
+   File Function Line
+   a.c f 3 return(f() + g());
+.PP   
+Occasionally, a function definition or call may not be recognized
+because of braces inside #if statements. Similarly, the use of a
+variable may be incorrectly recognized as a definition.
+.PP
+A 
+.B typedef
+name preceding a preprocessor statement will be incorrectly
+recognized as a global definition, for example,
+.PP
+ LDFILE  *
+ #if AR16WR
+.PP
+Preprocessor statements can also prevent the recognition of a global
+definition, for example,
+.PP
+ char flag
+ #ifdef ALLOCATE_STORAGE
+      = -1
+ #endif
+ ;
+.PP
+A function declaration inside a function is incorrectly recognized as
+a function call, for example,
+.PP
+ f()
+ {
+         void g();
+ }
+.PP
+is incorrectly recognized as a call to g.
+.PP   
+.I cscope
+recognizes C++ classes by looking for the class keyword, but
+doesn't recognize that a struct is also a class, so it doesn't
+recognize inline member function definitions in a structure. It also
+doesn't expect the class keyword in a
+.I typedef
+, so it incorrectly
+recognizes X as a definition in
+.PP
+ typedef class X  *  Y;
+.PP
+It also doesn't recognize operator function definitions
+.PP
+ Bool Feature::operator==(const Feature & other)
+ {
+   ...
+ }
+.PP
+Nor does it recognize function definitions with a function pointer
+argument
+.PP
+ ParseTable::Recognize(int startState, char *pattern,
+   int finishState, void (*FinalAction)(char *))
+ {
+   ...
+ }
diff --git a/doc/xcscope.1 b/doc/xcscope.1
new file mode 100644 (file)
index 0000000..fa4199c
--- /dev/null
@@ -0,0 +1,574 @@
+'\" t
+.\" The xcscope.el man page
+.\" Origionally written by Darryl Okahata, Apr 2000
+.\" 
+.\" Converted to a man page July 20, 2004 by Neil Horman <nhorman@redhat.com>
+.\"
+
+.de EX
+.sp
+.nf
+.ft CW
+..
+.de EE
+.ft R
+.fi
+.sp
+..
+
+.TH XCSCOPE.EL "1" "April 2000" "Darryl Okahata"
+.SH NAME
+xcscope.el - xemacs cscope lisp support package
+.SH DESCRIPTION
+xcscope is a lisp package for use in integrating cscope 
+functionality into xemacs
+.SH INSTALLATION
+.P
+ Installation steps:
+
+.P
+ 0. (It is, of course, assumed that cscope is already properly
+    installed on the current system.)
+.P
+ 1. Ensure that the location of cscope-indexer is located in your path
+
+.P
+ 2. Ensure that the location of xcscope.el is in the xemacs module load path
+
+.P
+ 3. Edit your ~/.emacs file to add the line:
+.P
+.BI      (require 'xcscope)
+
+.P
+5. If you intend to use xcscope.el often you can optionally edit your
+~/.emacs file to add keybindings that reduce the number of keystrokes
+required.  For example, the following will add "C-f#" keybindings,
+which are easier to type than the usual "C-c s" prefixed keybindings.
+Note that specifying "global-map" instead of "cscope:map" makes the
+keybindings available in all buffers:
+.EX
+       (define-key global-map [(ctrl f3)]  'cscope-set-initial-directory)
+       (define-key global-map [(ctrl f4)]  'cscope-unset-initial-directory)
+       (define-key global-map [(ctrl f5)]  'cscope-find-this-symbol)
+       (define-key global-map [(ctrl f6)]  'cscope-find-global-definition)
+       (define-key global-map [(ctrl f7)]
+               cscope-find-global-definition-no-prompting)
+       (define-key global-map [(ctrl f8)]  'cscope-pop-mark)
+       (define-key global-map [(ctrl f9)]  'cscope-next-symbol)
+       (define-key global-map [(ctrl f10)] 'cscope-next-file)
+       (define-key global-map [(ctrl f11)] 'cscope-prev-symbol)
+       (define-key global-map [(ctrl f12)] 'cscope-prev-file)
+       (define-key global-map [(meta f9)]  'cscope-display-buffer)
+       (define-key global-map [(meta f10)] 'cscope-display-buffer-toggle)
+.EE
+
+.P
+ 6. Restart (X)Emacs.  That's it.
+
+
+.SH USING THIS MODULE
+
+.SS * Basic usage:
+
+.P
+ If all of your C/C++/lex/yacc source files are in the same
+ directory, you can just start using this module.  If your files are
+ spread out over multiple directories, see "Advanced usage", below.
+
+.P
+ Just edit a source file, and use the pull-down or pop-up (button 3)
+ menus to select one of:
+
+.EX
+       Find symbol
+       Find global definition
+       Find called functions
+       Find functions calling a function
+       Find text string
+       Find egrep pattern
+       Find a file
+       Find files #including a file
+.EE
+
+.P
+The cscope database will be automatically created in the same directory 
+as the source files (assuming that you've never used cscope before), and
+a buffer will pop-up displaying the results.  You can then use button 2
+(the middle button) on the mouse to edit the selected file, or you can
+move the text cursor over a selection and press [Enter].
+
+.P
+Hopefully, the interface should be fairly intuitive.
+
+.SS * Locating the cscope databases:
+
+.P
+This module will first use the variable, `cscope-database-regexps',
+to search for a suitable database directory.  If a database location
+cannot be found using this variable then a search is begun at the
+variable, `cscope-initial-directory', if set, or the current
+directory otherwise.  If the directory is not a cscope database
+directory then the directory's parent, parent's parent, etc. is
+searched until a cscope database directory is found, or the root
+directory is reached.  If the root directory is reached, the current
+directory will be used.
+
+.P
+A cscope database directory is one in which EITHER a cscope database
+file (e.g., "cscope.out") OR a cscope file list (e.g.,
+"cscope.files") exists.  If only "cscope.files" exists, the
+corresponding "cscope.out" will be automatically created by cscope
+when a search is done.  By default, the cscope database file is called
+"cscope.out", but this can be changed (on a global basis) via the
+variable, `cscope-database-file'.  There is limited support for cscope
+databases that are named differently than that given by
+`cscope-database-file', using the variable, `cscope-database-regexps'.
+
+.P
+Note that the variable, `cscope-database-regexps', is generally not
+needed, as the normal hierarchical database search is sufficient
+for placing and/or locating the cscope databases.  However, there
+may be cases where it makes sense to place the cscope databases
+away from where the source files are kept; in this case, this
+variable is used to determine the mapping.  One use for this
+variable is when you want to share the database file with other
+users; in this case, the database may be located in a directory
+separate from the source files.  
+
+.P
+Setting the variable, `cscope-initial-directory', is useful when a
+search is to be expanded by specifying a cscope database directory
+that is a parent of the directory that this module would otherwise
+use.  For example, consider a project that contains the following
+cscope database directories:
+
+.EX
+       /users/jdoe/sources
+       /users/jdoe/sources/proj1
+       /users/jdoe/sources/proj2
+.EE
+
+.P
+If a search is initiated from a .c file in /users/jdoe/sources/proj1
+then (assuming the variable, `cscope-database-regexps', is not set)
+/users/jdoe/sources/proj1 will be used as the cscope data base directory.
+Only matches in files in /users/jdoe/sources/proj1 will be found.  This
+can be remedied by typing "C-c s a" and then "M-del" to remove single
+path element in order to use a cscope database directory of
+/users/jdoe/sources.  Normal searching can be restored by typing "C-c s A".
+
+
+
+.SS * Keybindings:
+
+.P
+All keybindings use the "C-c s" prefix, but are usable only while
+editing a source file, or in the cscope results buffer:
+
+.TS
+lb li.
+C-c s s       Find symbol.
+C-c s d       Find global definition.
+C-c s g       Find global definition (alternate binding).
+C-c s G       Find global definition without prompting.
+C-c s c       Find functions calling a function.
+C-c s C       Find called functions (list functions called
+C-c s t       Find text string.
+C-c s e       Find egrep pattern.
+C-c s f       Find a file.
+C-c s i       Find files #including a file.
+.TE
+
+These pertain to navigation through the search results:
+
+.TS
+lb li.
+C-c s b       Display *cscope* buffer.
+C-c s B       Auto display *cscope* buffer toggle.
+C-c s n       Next symbol.
+C-c s N       Next file.
+C-c s p       Previous symbol.
+C-c s P       Previous file.
+C-c s u       Pop mark.
+.TE
+
+.P
+These pertain to setting and unsetting the variable,
+`cscope-initial-directory', (location searched for the cscope database
+directory):
+
+.TS
+lb li.
+C-c s a       Set initial directory.
+C-c s A       Unset initial directory.
+.TE
+
+.P
+These pertain to cscope database maintenance:
+
+.TS
+lb li.
+C-c s L       Create list of files to index.
+C-c s I       Create list and index.
+C-c s E       Edit list of files to index.
+C-c s W       T{
+Locate this buffer's cscope directory.
+.br
+("W" -> "where")
+T}
+C-c s S       T{
+Locate this buffer's cscope directory.
+.br
+("S" --> "show")
+T}
+C-c s T       T{
+Locate this buffer's cscope directory.
+("T" --> "tell")
+T}
+C-c s D       Dired this buffer's directory.
+.TE
+
+.SS * Advanced usage:
+
+.P
+If the source files are spread out over multiple directories,
+you've got a few choices:
+
+.P
+[ NOTE: you will need to have the script, "cscope-indexer",
+properly installed in order for the following to work.  ]
+
+.P
+1. If all of the directories exist below a common directory
+(without any extraneous, unrelated subdirectories), you can tell
+this module to place the cscope database into the top-level,
+common directory.  This assumes that you do not have any cscope
+databases in any of the subdirectories.  If you do, you should
+delete them; otherwise, they will take precedence over the
+top-level database.
+
+.P
+If you do have cscope databases in any subdirectory, the
+following instructions may not work right.
+
+.P
+It's pretty easy to tell this module to use a top-level, common
+directory:
+
+.HP
+a. Make sure that the menu pick, "Cscope/Index recursively", is
+checked (the default value).
+
+.HP
+b. Select the menu pick, "Cscope/Create list and index", and
+specify the top-level directory.  This will run the script,
+"cscope-indexer", in the background, so you can do other
+things if indexing takes a long time.  A list of files to
+index will be created in "cscope.files", and the cscope
+database will be created in "cscope.out".
+
+.HP
+Once this has been done, you can then use the menu picks
+(described in "Basic usage", above) to search for symbols.
+
+.HP
+Note, however, that, if you add or delete source files, you'll
+have to either rebuild the database using the above procedure,
+or edit the file, "cscope.files" to add/delete the names of the
+source files.  To edit this file, you can use the menu pick,
+"Cscope/Edit list of files to index".
+
+.P
+2. If most of the files exist below a common directory, but a few
+are outside, you can use the menu pick, "Cscope/Create list of
+files to index", and specify the top-level directory.  Make sure
+that "Cscope/Index recursively", is checked before you do so,
+though.  You can then edit the list of files to index using the
+menu pick, "Cscope/Edit list of files to index".  Just edit the
+list to include any additional source files not already listed.
+
+.P
+Once you've created, edited, and saved the list, you can then
+use the menu picks described under "Basic usage", above, to
+search for symbols.  The first time you search, you will have to
+wait a while for cscope to fully index the source files, though.
+If you have a lot of source files, you may want to manually run
+cscope to build the database:
+
+.EX
+     cd top-level-directory    # or wherever
+     rm -f cscope.out          # not always necessary
+     cscope -b
+.EE
+
+.P
+ 3. If the source files are scattered in many different, unrelated
+    places, you'll have to manually create cscope.files and put a
+    list of all pathnames into it.  Then build the database using:
+
+.EX
+     cd some-directory         # wherever cscope.files exists
+     rm -f cscope.out          # not always necessary
+     cscope -b
+.EE
+
+.P
+Next, read the documentation for the variable,
+"cscope-database-regexps", and set it appropriately, such that
+the above-created cscope database will be referenced when you
+edit a related source file.
+
+.P
+Once this has been done, you can then use the menu picks
+described under "Basic usage", above, to search for symbols.
+
+.SS * Interesting configuration variables:
+
+.P
+.B "cscope-truncate-lines"
+.P
+This is the value of `truncate-lines' to use in cscope
+buffers; the default is the current setting of
+`truncate-lines'.  This variable exists because it can be
+easier to read cscope buffers with truncated lines, while
+other buffers do not have truncated lines.
+
+.P
+.B "cscope-use-relative-paths"
+.P
+If non-nil, use relative paths when creating the list of files
+to index.  The path is relative to the directory in which the
+cscope database will be created.  If nil, absolute paths will
+be used.  Absolute paths are good if you plan on moving the
+database to some other directory (if you do so, you'll
+probably also have to modify `cscope-database-regexps').
+Absolute paths may also be good if you share the database file
+with other users (you'll probably want to specify some
+automounted network path for this).
+
+.P
+.B "cscope-index-recursively"
+.P
+If non-nil, index files in the current directory and all
+subdirectories.  If nil, only files in the current directory
+are indexed.  This variable is only used when creating the
+list of files to index, or when creating the list of files and
+the corresponding cscope database.
+
+.P
+.B "cscope-name-line-width"
+.P
+The width of the combined "function name:line number" field in
+the cscope results buffer.  If negative, the field is
+left-justified.
+
+.P
+.B "cscope-do-not-update-database"
+.P
+If non-nil, never check and/or update the cscope database when
+searching.  Beware of setting this to non-nil, as this will
+disable automatic database creation, updating, and
+maintenance.
+
+.P
+.B "cscope-display-cscope-buffer" 
+.P
+If non-nil, display the *cscope* buffer after each search
+(default).  This variable can be set in order to reduce the
+number of keystrokes required to navigate through the matches.
+
+.P
+.B "cscope-database-regexps"
+.P
+List to force directory-to-cscope-database mappings.
+This is a list of `(REGEXP DBLIST [ DBLIST ... ])', where:
+
+.P
+.B "REGEXP" 
+is a regular expression matched against the current buffer's
+current directory.  The current buffer is typically some source file,
+and you're probably searching for some symbol in or related to this
+file.  Basically, this regexp is used to relate the current directory
+to a cscope database.  You need to start REGEXP with "^" if you want
+to match from the beginning of the current directory.
+
+.P
+.B "DBLIST" 
+is a list that contains one or more of:
+
+.EX
+     ( DBDIR )
+     ( DBDIR ( OPTIONS ) )
+     ( t )
+     t
+.EE
+
+.P
+Here, 
+.B DBDIR 
+is a directory (or a file) that contains a cscope
+database.  If DBDIR is a directory, then it is expected that the
+cscope database, if present, has the filename given by the variable,
+`cscope-database-file'; if DBDIR is a file, then DBDIR is the path
+name to a cscope database file (which does not have to be the same as
+that given by `cscope-database-file').  If only DBDIR is specified,
+then that cscope database will be searched without any additional
+cscope command-line options.  If OPTIONS is given, then OPTIONS is a
+list of strings, where each string is a separate cscope command-line
+option.
+
+.P
+ In the case of "( t )", this specifies that the search is to use the
+ normal hierarchical database search.  This option is used to
+ explicitly search using the hierarchical database search either before
+ or after other cscope database directories.
+
+.P
+ If "t" is specified (not inside a list), this tells the searching
+ mechanism to stop searching if a match has been found (at the point
+ where "t" is encountered).  This is useful for those projects that
+ consist of many subprojects.  You can specify the most-used
+ subprojects first, followed by a "t", and then followed by a master
+ cscope database directory that covers all subprojects.  This will
+ cause the most-used subprojects to be searched first (hopefully
+ quickly), and the search will then stop if a match was found.  If not,
+ the search will continue using the master cscope database directory.
+
+.P
+ Here, `cscope-database-regexps' is generally not used, as the normal
+ hierarchical database search is sufficient for placing and/or locating
+ the cscope databases.  However, there may be cases where it makes
+ sense to place the cscope databases away from where the source files
+ are kept; in this case, this variable is used to determine the
+ mapping.
+
+.P
+ This module searches for the cscope databases by first using this
+ variable; if a database location cannot be found using this variable,
+ then the current directory is searched, then the parent, then the
+ parent's parent, until a cscope database directory is found, or the
+ root directory is reached.  If the root directory is reached, the
+ current directory will be used.
+
+.P
+A cscope database directory is one in which EITHER a cscope database
+file (e.g., "cscope.out") OR a cscope file list (e.g.,
+"cscope.files") exists.  If only "cscope.files" exists, the
+corresponding "cscope.out" will be automatically created by cscope
+when a search is done.  By default, the cscope database file is called
+"cscope.out", but this can be changed (on a global basis) via the
+variable, `cscope-database-file'.  There is limited support for cscope
+databases that are named differently than that given by
+`cscope-database-file', using the variable, `cscope-database-regexps'.
+
+.P
+Here is an example of `cscope-database-regexps':
+
+.EX
+       (setq cscope-database-regexps
+             '(
+               ( "^/users/jdoe/sources/proj1"
+                 ( t )
+                 ( "/users/jdoe/sources/proj2")
+                 ( "/users/jdoe/sources/proj3/mycscope.out")
+                 ( "/users/jdoe/sources/proj4")
+                 t
+                 ( "/some/master/directory" ("-d" "-I/usr/local/include") )
+                 )
+               ( "^/users/jdoe/sources/gnome/"
+                 ( "/master/gnome/database" ("-d") )
+                 )
+               ))
+.EE
+
+.P
+If the current buffer's directory matches the regexp,
+"^/users/jdoe/sources/proj1", then the following search will be
+done:
+
+.TP
+1. First, the normal hierarchical database search will be used to
+locate a cscope database.
+
+.TP
+2. Next, searches will be done using the cscope database
+directories, "/users/jdoe/sources/proj2",
+"/users/jdoe/sources/proj3/mycscope.out", and
+"/users/jdoe/sources/proj4".  Note that, instead of the file,
+"cscope.out", the file, "mycscope.out", will be used in the
+directory "/users/jdoe/sources/proj3".
+
+.TP
+3. If a match was found, searching will stop.
+
+.TP
+4. If a match was not found, searching will be done using
+"/some/master/directory", and the command-line options "-d"
+and "-I/usr/local/include" will be passed to cscope.
+
+.TP
+If the current buffer's directory matches the regexp,
+"^/users/jdoe/sources/gnome", then the following search will be
+done:
+
+.TP
+The search will be done only using the directory,
+"/master/gnome/database".  The "-d" option will be passed to
+cscope.
+
+.TP
+If the current buffer's directory does not match any of the above
+regexps, then only the normal hierarchical database search will be
+done.
+
+.P
+.SS * Other notes:
+
+.P
+1. The script, "cscope-indexer", uses a sed command to determine
+what is and is not a C/C++/lex/yacc source file.  It's idea of a
+source file may not correspond to yours.
+
+.P
+2. This module is called, "xcscope", because someone else has
+already written a "cscope.el" (although it's quite old).
+
+.SH KNOWN BUGS:
+
+.P
+1. Cannot handle whitespace in directory or file names.
+
+.P
+2. By default, colored faces are used to display results.  If you happen
+to use a black background, part of the results may be invisible
+(because the foreground color may be black, too).  There are at least
+two solutions for this:
+
+.TP
+.BI    "2a. Turn off colored faces, by setting `cscope-use-face' to `nil', eg:"
+.TP
+.BI            "(setq cscope-use-face nil)"
+
+.TP
+.BI   " 2b. Explicitly set colors for the faces used by cscope.  The faces are"
+
+.EX
+     cscope-file-face
+     cscope-function-face
+     cscope-line-number-face
+     cscope-line-face
+     cscope-mouse-face
+.EE
+
+.TP
+The face most likely to cause problems (e.g., black-on-black
+color) is `cscope-line-face'.
+
+.P
+3. The support for cscope databases different from that specified by
+`cscope-database-file' is quirky.  If the file does not exist, it
+will not be auto-created (unlike files names by
+`cscope-database-file').  You can manually force the file to be
+created by using touch(1) to create a zero-length file; the
+database will be created the next time a search is done.
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..a9244eb
--- /dev/null
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-01-19.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       # Protect names problematic for `test' and other utilities.
+       case $dst_arg in
+         -* | [=\(\)!]) dst_arg=./$dst_arg;;
+       esac
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for `test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for `test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       [-=\(\)!]*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test X"$d" = X && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..86a8fc3
--- /dev/null
+++ b/missing
@@ -0,0 +1,331 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.13; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG=\${$#}
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..4191a45
--- /dev/null
@@ -0,0 +1,162 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2009-04-28.21; # UTC
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" ""       $nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage"
+      exit $?
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit $?
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+  '')
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the `mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because `.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
+    fi
+    ;;
+esac
+
+for file
+do
+  case $file in
+    /*) pathcomp=/ ;;
+    *)  pathcomp= ;;
+  esac
+  oIFS=$IFS
+  IFS=/
+  set fnord $file
+  shift
+  IFS=$oIFS
+
+  for d
+  do
+    test "x$d" = x && continue
+
+    pathcomp=$pathcomp$d
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+      else
+       if test ! -z "$dirmode"; then
+         echo "chmod $dirmode $pathcomp"
+         lasterr=
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
+      fi
+    fi
+
+    pathcomp=$pathcomp/
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/packages/MSDOS/README b/packages/MSDOS/README
new file mode 100644 (file)
index 0000000..e026e05
--- /dev/null
@@ -0,0 +1,74 @@
+
+------------------------------------
+    cscope for DOS using DJGPP
+------------------------------------
+
+*) You need a rather recent DJGPP version and tools
+   installed. For running cscope on DOS, be sure you
+   have:
+
+   * GNU ed for cscope's automated editing of files. It's quite likely
+     you didn't have this installed, unless you're a collector of Unix 
+     tools. 
+
+   * an editor or viewer to be used as a child program when you open
+     a match, inside cscope. DJGPP-compiled versions, if possible.
+     
+     Choose either
+
+     -- `less' if you're content with viewing the file
+     -- some version of `vi' (VIM, Elvis, or NVI) use cscope in it's
+        "classical" way
+     -- GNU Emacs for the full glory :-)
+
+     Set the environment variable CSCOPE_EDITOR or EDITOR to the name
+     of the editor you want to use. You may want to create a [cscope]
+     section in your djgpp.env file, if you know how to do it.
+
+   For more details what cscope is, and how to use it, see the
+   documentation in the root directory of the cscope sources, or the
+   man page.
+
+*) For compiling cscope from sources, you need a much more complete
+   collection of GNU development and commandline tools, in addition
+   to the above, and the obvious GCC and binutils:
+
+   * bash
+   * make
+   * flex
+   * bison
+   * sed
+   * patch
+   * fileutils (cp, ln, ...)
+   * textutils (cat)
+   
+   Optionally, if you plan to modify the sources.
+  
+   * autoconf
+   * automake
+   * Perl
+
+   These are the ones I'm sure you need --- I may have overlooked some.
+
+   The DJGPP source packages is already configured, so you can just
+   run 'make' to get the package. Then 
+
+       make install prefix=d:/djgpp"
+
+   (or wherever else your DJGPP is) to install it.
+
+   Or cd to the top source directory and execute the supplied
+   djmake.bat:
+
+       cd d:\djgpp\contrib\cscope
+       packages\msdos\djmake.bat
+
+   and watch it compile. This will be necessary if you made any
+   substantial changes to the sources.
+
+Have fun with it. In case of problem, mail to djgpp@delorie.com (or the
+attached Usenet newsgroup) or file a bug report at cscope's page on
+Sourceforge.net.
+
+Hans-Bernhard Br"oker (broeker@physik.rwth-aachen.de)
+                      (Hans-Bernhard.Broeker@epost.de)
diff --git a/packages/MSDOS/djmake.bat b/packages/MSDOS/djmake.bat
new file mode 100644 (file)
index 0000000..260bb11
--- /dev/null
@@ -0,0 +1,22 @@
+@echo off\r
+\r
+if exist src\fscanner.l goto dir_okay\r
+echo !!!! Must run this batch file from the main source directory!\r
+exit\r
+\r
+:dir_okay\r
+\r
+echo ---- Start by patching the ylwrap script to avoid problems\r
+echo      with "ln -s":\r
+\r
+if exist src\ylwrap patch -p0 -i packages/MSDOS/ylwrap.pat\r
+if exist ylwrap patch -p1 -i packages/MSDOS/ylwrap.pat\r
+\r
+echo ---- Now configure and make it.\r
+echo -- NOTE --: this assumes you have pdcurses installed!\r
+echo -- NOTE --: Will be using '-f' mode of flex, for faster scanning\r
+bash configure\r
+make CURSES_LIBS=-lpdcurses LFLAGS="-f8B"\r
+\r
+echo ---- You may now call "make install", if desired.\r
+echo -- DONE --\r
diff --git a/packages/MSDOS/ylwrap.pat b/packages/MSDOS/ylwrap.pat
new file mode 100644 (file)
index 0000000..f60049d
--- /dev/null
@@ -0,0 +1,11 @@
+--- src/ylwrap Tue Jun 26 15:23:52 2001
++++ src.DOS/ylwrap     Thu Jun 28 17:39:31 2001
+@@ -80,7 +80,7 @@
+     ;;
+  *)
+     # Make a symbolic link, hard link or hardcopy.
+-    ln -s ../"$input" . > /dev/null 2>&1 || ln ../"$input" . > /dev/null 2>&1 || cp ../"$input" .
++    ln ../"$input" . > /dev/null 2>&1 || cp ../"$input" .
+     ;;
+ esac
+ $prog ${1+"$@"} "$input"
diff --git a/packages/cscope.spec b/packages/cscope.spec
new file mode 100644 (file)
index 0000000..43ac5fa
--- /dev/null
@@ -0,0 +1,63 @@
+Summary: cscope is an interactive, screen-oriented tool that allows the user to browse through C source files for specified elements of code.
+Name: cscope
+Version: 16.0a
+Release: 1
+Epoch: 1
+License: BSD
+Group: Development/Tools
+Source: cscope-16.0a.tar.gz
+URL: http://cscope.sourceforge.net
+Buildroot: %{_tmppath}/%{name}-root
+
+%description
+cscope is an interactive, screen-oriented tool that allows the user to browse through C source files for specified elements of code.
+
+%prep
+%setup -q
+
+%build
+%configure
+make
+
+%install
+rm -rf %{buildroot}
+%makeinstall
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root)
+%doc TODO COPYING ChangeLog AUTHORS README NEWS INSTALL
+%{_bindir}/*
+%{_mandir}/man1/*
+
+%changelog
+* Sun Mar 21 2004 Adam Monsen <adamm@wazamatta.com>
+- updated packages/cscope.spec to use more RPM macros and shell globs.
+  Should be more generic/robust/up-to-date/etc.
+* Mon Jul 2 2001 Cscope development team <cscope-devel@lists.sourceforge.net>
+- Version 15.3 release
+- New flex scanner
+- XEmacs support improvements
+- Vim support improvements
+- 64 bit fixes
+- MSDOS support
+- More editing keys
+- Webcscope added to contrib
+* Wed Nov 20 2000 Cscope development team <cscope-devel@lists.sourceforge.net>
+- Version 15.1 release
+- New menu and line matching interface
+- Support for up to 62 (up from 9) matching lines on screen
+- Numerous fixes
+- Updated documentation
+* Tue May 15 2000 Cscope development team  <cscope-devel@lists.sourceforge.net>
+- Version 15.0bl2 (build 2) pre-alpha release
+- Fixes and enhancements
+- Updated documentation
+- Autoconf/automake support
+- directory restructuring
+* Sun Apr 16 2000 Petr Sorfa <petrs@sco.com>
+- Initial Open Source release
+- Ported to GNU environment
+- Created rpm package
diff --git a/packages/uw7/Prototype b/packages/uw7/Prototype
new file mode 100644 (file)
index 0000000..e301a03
--- /dev/null
@@ -0,0 +1,11 @@
+i pkginfo
+d none /usr ? ? ?
+d none /usr/local 0755 root bin
+d none /usr/local/bin 0755 root bin
+d none /usr/local/man 0755 root bin
+d none /usr/local/man/man1 0755 root bin
+! search /usr/local/bin
+f none /usr/local/bin/cscope 0755 root bin
+f none /usr/local/bin/ocs 0755 root bin
+! search /usr/local/man/man1
+f none /usr/local/man/man1/cscope.1 0644 root bin
diff --git a/packages/uw7/cscope_pkg.sh b/packages/uw7/cscope_pkg.sh
new file mode 100644 (file)
index 0000000..6c0c372
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/sh
+
+#===========================================================================
+# Copyright (c) 1998-2000, The Santa Cruz Operation 
+# All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# *Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# *Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# *Neither name of The Santa Cruz Operation nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission. 
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGE. 
+# =========================================================================*/
+
+# This simple script creates an UW7 pkg for cscope
+# Execute these commands as root
+
+BINDIR=/usr/local/bin/
+LIBDIR=/usr/local/lib/
+MANDIR=/usr/local/man/man1/
+SPOOLDIR=/var/spool/pkg/
+
+# Check that the user is root
+
+if [ `id -un` != "root" ]
+then
+       echo "ERROR: Need to be root to build package" >&2
+       exit 1;
+fi
+
+# Check that cscope has been installed
+if [ ! -f $BINDIR/cscope ]
+then
+       echo "ERROR: cscope not installed" >&2
+       exit 1
+fi
+
+if [ ! -f $BINDIR/ocs ]
+then
+       echo "ERROR: ocs not installed" >&2
+       exit 1
+fi
+
+if [ ! -f $MANDIR/cscope.1 ]
+then
+       echo "ERROR: cscope man page not installed" >&2
+       exit 1
+fi
+
+# Check that there is no current cscope pkg spooled
+
+if [ -d $SPOOLDIR/cscope ]
+then
+       echo "ERROR: cscope is currently spooled in $SPOOLDIR/cscope." >&2
+       echo "       Please remove this directory and its contents to" >&2
+       echo "       continue." >&2
+       exit 1
+fi
+
+# Make the spool dir entry
+# Note that cscope must be already installed
+echo "INFO: Spooling package" >&2
+pkgmk  
+if [ $? -ne 0 ]
+then
+       echo "ERROR: An error occurred during spooling the package" >&2
+       exit 1
+fi
+
+# Install the spool dir cscope entry into the package
+echo "INFO: creating package" >&2
+pkgtrans -s /var/spool/pkg cscope.16.0a.pkg cscope
+if [ $? -ne 0 ]
+then
+       echo "ERROR: An error occurred while creating the package" >&2
+       exit 1
+fi
+
diff --git a/packages/uw7/pkginfo b/packages/uw7/pkginfo
new file mode 100644 (file)
index 0000000..9e7299e
--- /dev/null
@@ -0,0 +1,6 @@
+PKG="cscope"
+NAME="cscope"
+VERSION="16.0a UW7.1.1 07/03/2001"
+CATEGORY="utilities"
+ARCH=i386
+PSTAMP=
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..88f55ad
--- /dev/null
@@ -0,0 +1,55 @@
+## Process this file with automake to produce Makefile.in
+
+if HAS_GNOME
+if USING_GNOME2
+GNOMECFLAGS = `pkg-config --cflags libgnomeui-2.0 libpanelapplet-2.0 libglade-2.0`
+GNOMELINKAGE = `pkg-config --libs libgnomeui-2.0 libpanelapplet-2.0 libglade-2.0|sed -e 's/-lz //'`
+else
+GNOMECFLAGS = `gnome-config --cflags gnomeui applets libglade`
+GNOMELINKAGE = `gnome-config --libs gnomeui applets libglade|sed -e 's/-lz //'`        
+endif
+
+EXTRA_PROGRAMS = gscope
+endif
+bin_PROGRAMS = cscope
+
+if USING_LEX
+LEXER_SOURCE=scanner.l
+else
+LEXER_SOURCE=fscanner.l
+endif
+
+cscope_SOURCES = $(LEXER_SOURCE) egrep.y alloc.c alloc.h basename.c build.c \
+build.h command.c compath.c constants.h crossref.c dir.c display.c edit.c   \
+exec.c find.c global.h help.c history.c input.c invlib.c invlib.h library.h \
+logdir.c lookup.c lookup.h main.c mouse.c mygetenv.c mypopen.c scanner.h    \
+version.h vp.h vpaccess.c vpfopen.c vpinit.c vpopen.c
+
+EXTRA_cscope_SOURCES = scanner.l fscanner.l
+
+LEXLIB = @LEXLIB@
+
+cscope_LDADD =  $(CURSES_LIBS) $(LEXLIB) $(LIBOBJS)
+
+AM_CPPFLAGS = $(CURSES_INCLUDEDIR)
+
+## Hack to clean the generated files and not include them in a "make dist".
+CLEANFILES = scanner.c fscanner.c egrep.c
+#dist-hook:
+#      rm -f $(distdir)/scanner.c $(distdir)/fscanner.c $(distdir)/egrep.c
+
+EXTRA_DIST = emacs.e gmacs.ml
+
+if HAS_GNOME
+GNOME_SWITCH=-DUSING_GNOME_UI
+
+## if we compile gscope under Linux, we need to supply libglade the callback pointers
+if GNOME_LINUX
+GNOME_LINUX_FLAG = "-rdynamic"
+endif
+
+gscope_CFLAGS = $(GNOMECFLAGS) $(GNOME_SWITCH)
+gscope_LDADD =  $(CURSES_LIBS) $(LEXLIB)
+gscope_SOURCES = gscope.c $(cscope_SOURCES)
+gscope_LDFLAGS = $(GNOMELINKAGE) $(GNOME_LINUX_FLAG)
+endif
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..fbf191c
--- /dev/null
@@ -0,0 +1,1029 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAS_GNOME_TRUE@EXTRA_PROGRAMS = gscope$(EXEEXT)
+bin_PROGRAMS = cscope$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in egrep.c \
+       fscanner.c scanner.c snprintf.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__cscope_SOURCES_DIST = fscanner.l scanner.l egrep.y alloc.c alloc.h \
+       basename.c build.c build.h command.c compath.c constants.h \
+       crossref.c dir.c display.c edit.c exec.c find.c global.h \
+       help.c history.c input.c invlib.c invlib.h library.h logdir.c \
+       lookup.c lookup.h main.c mouse.c mygetenv.c mypopen.c \
+       scanner.h version.h vp.h vpaccess.c vpfopen.c vpinit.c \
+       vpopen.c
+@USING_LEX_FALSE@am__objects_1 = fscanner.$(OBJEXT)
+@USING_LEX_TRUE@am__objects_1 = scanner.$(OBJEXT)
+am_cscope_OBJECTS = $(am__objects_1) egrep.$(OBJEXT) alloc.$(OBJEXT) \
+       basename.$(OBJEXT) build.$(OBJEXT) command.$(OBJEXT) \
+       compath.$(OBJEXT) crossref.$(OBJEXT) dir.$(OBJEXT) \
+       display.$(OBJEXT) edit.$(OBJEXT) exec.$(OBJEXT) find.$(OBJEXT) \
+       help.$(OBJEXT) history.$(OBJEXT) input.$(OBJEXT) \
+       invlib.$(OBJEXT) logdir.$(OBJEXT) lookup.$(OBJEXT) \
+       main.$(OBJEXT) mouse.$(OBJEXT) mygetenv.$(OBJEXT) \
+       mypopen.$(OBJEXT) vpaccess.$(OBJEXT) vpfopen.$(OBJEXT) \
+       vpinit.$(OBJEXT) vpopen.$(OBJEXT)
+cscope_OBJECTS = $(am_cscope_OBJECTS)
+am__DEPENDENCIES_1 =
+cscope_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(LIBOBJS)
+am__gscope_SOURCES_DIST = gscope.c fscanner.l scanner.l egrep.y \
+       alloc.c alloc.h basename.c build.c build.h command.c compath.c \
+       constants.h crossref.c dir.c display.c edit.c exec.c find.c \
+       global.h help.c history.c input.c invlib.c invlib.h library.h \
+       logdir.c lookup.c lookup.h main.c mouse.c mygetenv.c mypopen.c \
+       scanner.h version.h vp.h vpaccess.c vpfopen.c vpinit.c \
+       vpopen.c
+@USING_LEX_FALSE@am__objects_2 = gscope-fscanner.$(OBJEXT)
+@USING_LEX_TRUE@am__objects_2 = gscope-scanner.$(OBJEXT)
+am__objects_3 = $(am__objects_2) gscope-egrep.$(OBJEXT) \
+       gscope-alloc.$(OBJEXT) gscope-basename.$(OBJEXT) \
+       gscope-build.$(OBJEXT) gscope-command.$(OBJEXT) \
+       gscope-compath.$(OBJEXT) gscope-crossref.$(OBJEXT) \
+       gscope-dir.$(OBJEXT) gscope-display.$(OBJEXT) \
+       gscope-edit.$(OBJEXT) gscope-exec.$(OBJEXT) \
+       gscope-find.$(OBJEXT) gscope-help.$(OBJEXT) \
+       gscope-history.$(OBJEXT) gscope-input.$(OBJEXT) \
+       gscope-invlib.$(OBJEXT) gscope-logdir.$(OBJEXT) \
+       gscope-lookup.$(OBJEXT) gscope-main.$(OBJEXT) \
+       gscope-mouse.$(OBJEXT) gscope-mygetenv.$(OBJEXT) \
+       gscope-mypopen.$(OBJEXT) gscope-vpaccess.$(OBJEXT) \
+       gscope-vpfopen.$(OBJEXT) gscope-vpinit.$(OBJEXT) \
+       gscope-vpopen.$(OBJEXT)
+@HAS_GNOME_TRUE@am_gscope_OBJECTS = gscope-gscope.$(OBJEXT) \
+@HAS_GNOME_TRUE@       $(am__objects_3)
+gscope_OBJECTS = $(am_gscope_OBJECTS)
+@HAS_GNOME_TRUE@gscope_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@HAS_GNOME_TRUE@       $(am__DEPENDENCIES_1)
+gscope_LINK = $(CCLD) $(gscope_CFLAGS) $(CFLAGS) $(gscope_LDFLAGS) \
+       $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
+YLWRAP = $(top_srcdir)/ylwrap
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
+SOURCES = $(cscope_SOURCES) $(EXTRA_cscope_SOURCES) $(gscope_SOURCES)
+DIST_SOURCES = $(am__cscope_SOURCES_DIST) $(EXTRA_cscope_SOURCES) \
+       $(am__gscope_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@
+CURSES_LIBS = @CURSES_LIBS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gnome1 = @gnome1@
+gnome2 = @gnome2@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAS_GNOME_TRUE@@USING_GNOME2_FALSE@GNOMECFLAGS = `gnome-config --cflags gnomeui applets libglade`
+@HAS_GNOME_TRUE@@USING_GNOME2_TRUE@GNOMECFLAGS = `pkg-config --cflags libgnomeui-2.0 libpanelapplet-2.0 libglade-2.0`
+@HAS_GNOME_TRUE@@USING_GNOME2_FALSE@GNOMELINKAGE = `gnome-config --libs gnomeui applets libglade|sed -e 's/-lz //'`    
+@HAS_GNOME_TRUE@@USING_GNOME2_TRUE@GNOMELINKAGE = `pkg-config --libs libgnomeui-2.0 libpanelapplet-2.0 libglade-2.0|sed -e 's/-lz //'`
+@USING_LEX_FALSE@LEXER_SOURCE = fscanner.l
+@USING_LEX_TRUE@LEXER_SOURCE = scanner.l
+cscope_SOURCES = $(LEXER_SOURCE) egrep.y alloc.c alloc.h basename.c build.c \
+build.h command.c compath.c constants.h crossref.c dir.c display.c edit.c   \
+exec.c find.c global.h help.c history.c input.c invlib.c invlib.h library.h \
+logdir.c lookup.c lookup.h main.c mouse.c mygetenv.c mypopen.c scanner.h    \
+version.h vp.h vpaccess.c vpfopen.c vpinit.c vpopen.c
+
+EXTRA_cscope_SOURCES = scanner.l fscanner.l
+cscope_LDADD = $(CURSES_LIBS) $(LEXLIB) $(LIBOBJS)
+AM_CPPFLAGS = $(CURSES_INCLUDEDIR)
+CLEANFILES = scanner.c fscanner.c egrep.c
+#dist-hook:
+#      rm -f $(distdir)/scanner.c $(distdir)/fscanner.c $(distdir)/egrep.c
+EXTRA_DIST = emacs.e gmacs.ml
+@HAS_GNOME_TRUE@GNOME_SWITCH = -DUSING_GNOME_UI
+@GNOME_LINUX_TRUE@@HAS_GNOME_TRUE@GNOME_LINUX_FLAG = "-rdynamic"
+@HAS_GNOME_TRUE@gscope_CFLAGS = $(GNOMECFLAGS) $(GNOME_SWITCH)
+@HAS_GNOME_TRUE@gscope_LDADD = $(CURSES_LIBS) $(LEXLIB)
+@HAS_GNOME_TRUE@gscope_SOURCES = gscope.c $(cscope_SOURCES)
+@HAS_GNOME_TRUE@gscope_LDFLAGS = $(GNOMELINKAGE) $(GNOME_LINUX_FLAG)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .l .o .obj .y
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+cscope$(EXEEXT): $(cscope_OBJECTS) $(cscope_DEPENDENCIES) $(EXTRA_cscope_DEPENDENCIES) 
+       @rm -f cscope$(EXEEXT)
+       $(LINK) $(cscope_OBJECTS) $(cscope_LDADD) $(LIBS)
+gscope$(EXEEXT): $(gscope_OBJECTS) $(gscope_DEPENDENCIES) $(EXTRA_gscope_DEPENDENCIES) 
+       @rm -f gscope$(EXEEXT)
+       $(gscope_LINK) $(gscope_OBJECTS) $(gscope_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/snprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crossref.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/egrep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fscanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-build.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-command.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-compath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-crossref.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-dir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-display.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-edit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-egrep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-exec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-find.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-fscanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-gscope.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-history.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-input.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-invlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-logdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-lookup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-mouse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-mygetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-mypopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-vpaccess.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-vpfopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-vpinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gscope-vpopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invlib.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mygetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mypopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpaccess.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpfopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vpopen.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+gscope-gscope.o: gscope.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-gscope.o -MD -MP -MF $(DEPDIR)/gscope-gscope.Tpo -c -o gscope-gscope.o `test -f 'gscope.c' || echo '$(srcdir)/'`gscope.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-gscope.Tpo $(DEPDIR)/gscope-gscope.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='gscope.c' object='gscope-gscope.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-gscope.o `test -f 'gscope.c' || echo '$(srcdir)/'`gscope.c
+
+gscope-gscope.obj: gscope.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-gscope.obj -MD -MP -MF $(DEPDIR)/gscope-gscope.Tpo -c -o gscope-gscope.obj `if test -f 'gscope.c'; then $(CYGPATH_W) 'gscope.c'; else $(CYGPATH_W) '$(srcdir)/gscope.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-gscope.Tpo $(DEPDIR)/gscope-gscope.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='gscope.c' object='gscope-gscope.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-gscope.obj `if test -f 'gscope.c'; then $(CYGPATH_W) 'gscope.c'; else $(CYGPATH_W) '$(srcdir)/gscope.c'; fi`
+
+gscope-fscanner.o: fscanner.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-fscanner.o -MD -MP -MF $(DEPDIR)/gscope-fscanner.Tpo -c -o gscope-fscanner.o `test -f 'fscanner.c' || echo '$(srcdir)/'`fscanner.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-fscanner.Tpo $(DEPDIR)/gscope-fscanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='fscanner.c' object='gscope-fscanner.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-fscanner.o `test -f 'fscanner.c' || echo '$(srcdir)/'`fscanner.c
+
+gscope-fscanner.obj: fscanner.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-fscanner.obj -MD -MP -MF $(DEPDIR)/gscope-fscanner.Tpo -c -o gscope-fscanner.obj `if test -f 'fscanner.c'; then $(CYGPATH_W) 'fscanner.c'; else $(CYGPATH_W) '$(srcdir)/fscanner.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-fscanner.Tpo $(DEPDIR)/gscope-fscanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='fscanner.c' object='gscope-fscanner.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-fscanner.obj `if test -f 'fscanner.c'; then $(CYGPATH_W) 'fscanner.c'; else $(CYGPATH_W) '$(srcdir)/fscanner.c'; fi`
+
+gscope-scanner.o: scanner.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-scanner.o -MD -MP -MF $(DEPDIR)/gscope-scanner.Tpo -c -o gscope-scanner.o `test -f 'scanner.c' || echo '$(srcdir)/'`scanner.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-scanner.Tpo $(DEPDIR)/gscope-scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='scanner.c' object='gscope-scanner.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-scanner.o `test -f 'scanner.c' || echo '$(srcdir)/'`scanner.c
+
+gscope-scanner.obj: scanner.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-scanner.obj -MD -MP -MF $(DEPDIR)/gscope-scanner.Tpo -c -o gscope-scanner.obj `if test -f 'scanner.c'; then $(CYGPATH_W) 'scanner.c'; else $(CYGPATH_W) '$(srcdir)/scanner.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-scanner.Tpo $(DEPDIR)/gscope-scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='scanner.c' object='gscope-scanner.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-scanner.obj `if test -f 'scanner.c'; then $(CYGPATH_W) 'scanner.c'; else $(CYGPATH_W) '$(srcdir)/scanner.c'; fi`
+
+gscope-egrep.o: egrep.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-egrep.o -MD -MP -MF $(DEPDIR)/gscope-egrep.Tpo -c -o gscope-egrep.o `test -f 'egrep.c' || echo '$(srcdir)/'`egrep.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-egrep.Tpo $(DEPDIR)/gscope-egrep.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='egrep.c' object='gscope-egrep.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-egrep.o `test -f 'egrep.c' || echo '$(srcdir)/'`egrep.c
+
+gscope-egrep.obj: egrep.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-egrep.obj -MD -MP -MF $(DEPDIR)/gscope-egrep.Tpo -c -o gscope-egrep.obj `if test -f 'egrep.c'; then $(CYGPATH_W) 'egrep.c'; else $(CYGPATH_W) '$(srcdir)/egrep.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-egrep.Tpo $(DEPDIR)/gscope-egrep.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='egrep.c' object='gscope-egrep.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-egrep.obj `if test -f 'egrep.c'; then $(CYGPATH_W) 'egrep.c'; else $(CYGPATH_W) '$(srcdir)/egrep.c'; fi`
+
+gscope-alloc.o: alloc.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-alloc.o -MD -MP -MF $(DEPDIR)/gscope-alloc.Tpo -c -o gscope-alloc.o `test -f 'alloc.c' || echo '$(srcdir)/'`alloc.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-alloc.Tpo $(DEPDIR)/gscope-alloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='alloc.c' object='gscope-alloc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-alloc.o `test -f 'alloc.c' || echo '$(srcdir)/'`alloc.c
+
+gscope-alloc.obj: alloc.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-alloc.obj -MD -MP -MF $(DEPDIR)/gscope-alloc.Tpo -c -o gscope-alloc.obj `if test -f 'alloc.c'; then $(CYGPATH_W) 'alloc.c'; else $(CYGPATH_W) '$(srcdir)/alloc.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-alloc.Tpo $(DEPDIR)/gscope-alloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='alloc.c' object='gscope-alloc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-alloc.obj `if test -f 'alloc.c'; then $(CYGPATH_W) 'alloc.c'; else $(CYGPATH_W) '$(srcdir)/alloc.c'; fi`
+
+gscope-basename.o: basename.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-basename.o -MD -MP -MF $(DEPDIR)/gscope-basename.Tpo -c -o gscope-basename.o `test -f 'basename.c' || echo '$(srcdir)/'`basename.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-basename.Tpo $(DEPDIR)/gscope-basename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basename.c' object='gscope-basename.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-basename.o `test -f 'basename.c' || echo '$(srcdir)/'`basename.c
+
+gscope-basename.obj: basename.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-basename.obj -MD -MP -MF $(DEPDIR)/gscope-basename.Tpo -c -o gscope-basename.obj `if test -f 'basename.c'; then $(CYGPATH_W) 'basename.c'; else $(CYGPATH_W) '$(srcdir)/basename.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-basename.Tpo $(DEPDIR)/gscope-basename.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='basename.c' object='gscope-basename.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-basename.obj `if test -f 'basename.c'; then $(CYGPATH_W) 'basename.c'; else $(CYGPATH_W) '$(srcdir)/basename.c'; fi`
+
+gscope-build.o: build.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-build.o -MD -MP -MF $(DEPDIR)/gscope-build.Tpo -c -o gscope-build.o `test -f 'build.c' || echo '$(srcdir)/'`build.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-build.Tpo $(DEPDIR)/gscope-build.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='build.c' object='gscope-build.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-build.o `test -f 'build.c' || echo '$(srcdir)/'`build.c
+
+gscope-build.obj: build.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-build.obj -MD -MP -MF $(DEPDIR)/gscope-build.Tpo -c -o gscope-build.obj `if test -f 'build.c'; then $(CYGPATH_W) 'build.c'; else $(CYGPATH_W) '$(srcdir)/build.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-build.Tpo $(DEPDIR)/gscope-build.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='build.c' object='gscope-build.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-build.obj `if test -f 'build.c'; then $(CYGPATH_W) 'build.c'; else $(CYGPATH_W) '$(srcdir)/build.c'; fi`
+
+gscope-command.o: command.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-command.o -MD -MP -MF $(DEPDIR)/gscope-command.Tpo -c -o gscope-command.o `test -f 'command.c' || echo '$(srcdir)/'`command.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-command.Tpo $(DEPDIR)/gscope-command.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='command.c' object='gscope-command.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-command.o `test -f 'command.c' || echo '$(srcdir)/'`command.c
+
+gscope-command.obj: command.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-command.obj -MD -MP -MF $(DEPDIR)/gscope-command.Tpo -c -o gscope-command.obj `if test -f 'command.c'; then $(CYGPATH_W) 'command.c'; else $(CYGPATH_W) '$(srcdir)/command.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-command.Tpo $(DEPDIR)/gscope-command.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='command.c' object='gscope-command.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-command.obj `if test -f 'command.c'; then $(CYGPATH_W) 'command.c'; else $(CYGPATH_W) '$(srcdir)/command.c'; fi`
+
+gscope-compath.o: compath.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-compath.o -MD -MP -MF $(DEPDIR)/gscope-compath.Tpo -c -o gscope-compath.o `test -f 'compath.c' || echo '$(srcdir)/'`compath.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-compath.Tpo $(DEPDIR)/gscope-compath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='compath.c' object='gscope-compath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-compath.o `test -f 'compath.c' || echo '$(srcdir)/'`compath.c
+
+gscope-compath.obj: compath.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-compath.obj -MD -MP -MF $(DEPDIR)/gscope-compath.Tpo -c -o gscope-compath.obj `if test -f 'compath.c'; then $(CYGPATH_W) 'compath.c'; else $(CYGPATH_W) '$(srcdir)/compath.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-compath.Tpo $(DEPDIR)/gscope-compath.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='compath.c' object='gscope-compath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-compath.obj `if test -f 'compath.c'; then $(CYGPATH_W) 'compath.c'; else $(CYGPATH_W) '$(srcdir)/compath.c'; fi`
+
+gscope-crossref.o: crossref.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-crossref.o -MD -MP -MF $(DEPDIR)/gscope-crossref.Tpo -c -o gscope-crossref.o `test -f 'crossref.c' || echo '$(srcdir)/'`crossref.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-crossref.Tpo $(DEPDIR)/gscope-crossref.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='crossref.c' object='gscope-crossref.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-crossref.o `test -f 'crossref.c' || echo '$(srcdir)/'`crossref.c
+
+gscope-crossref.obj: crossref.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-crossref.obj -MD -MP -MF $(DEPDIR)/gscope-crossref.Tpo -c -o gscope-crossref.obj `if test -f 'crossref.c'; then $(CYGPATH_W) 'crossref.c'; else $(CYGPATH_W) '$(srcdir)/crossref.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-crossref.Tpo $(DEPDIR)/gscope-crossref.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='crossref.c' object='gscope-crossref.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-crossref.obj `if test -f 'crossref.c'; then $(CYGPATH_W) 'crossref.c'; else $(CYGPATH_W) '$(srcdir)/crossref.c'; fi`
+
+gscope-dir.o: dir.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-dir.o -MD -MP -MF $(DEPDIR)/gscope-dir.Tpo -c -o gscope-dir.o `test -f 'dir.c' || echo '$(srcdir)/'`dir.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-dir.Tpo $(DEPDIR)/gscope-dir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='dir.c' object='gscope-dir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-dir.o `test -f 'dir.c' || echo '$(srcdir)/'`dir.c
+
+gscope-dir.obj: dir.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-dir.obj -MD -MP -MF $(DEPDIR)/gscope-dir.Tpo -c -o gscope-dir.obj `if test -f 'dir.c'; then $(CYGPATH_W) 'dir.c'; else $(CYGPATH_W) '$(srcdir)/dir.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-dir.Tpo $(DEPDIR)/gscope-dir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='dir.c' object='gscope-dir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-dir.obj `if test -f 'dir.c'; then $(CYGPATH_W) 'dir.c'; else $(CYGPATH_W) '$(srcdir)/dir.c'; fi`
+
+gscope-display.o: display.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-display.o -MD -MP -MF $(DEPDIR)/gscope-display.Tpo -c -o gscope-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-display.Tpo $(DEPDIR)/gscope-display.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='display.c' object='gscope-display.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-display.o `test -f 'display.c' || echo '$(srcdir)/'`display.c
+
+gscope-display.obj: display.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-display.obj -MD -MP -MF $(DEPDIR)/gscope-display.Tpo -c -o gscope-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-display.Tpo $(DEPDIR)/gscope-display.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='display.c' object='gscope-display.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-display.obj `if test -f 'display.c'; then $(CYGPATH_W) 'display.c'; else $(CYGPATH_W) '$(srcdir)/display.c'; fi`
+
+gscope-edit.o: edit.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-edit.o -MD -MP -MF $(DEPDIR)/gscope-edit.Tpo -c -o gscope-edit.o `test -f 'edit.c' || echo '$(srcdir)/'`edit.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-edit.Tpo $(DEPDIR)/gscope-edit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='edit.c' object='gscope-edit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-edit.o `test -f 'edit.c' || echo '$(srcdir)/'`edit.c
+
+gscope-edit.obj: edit.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-edit.obj -MD -MP -MF $(DEPDIR)/gscope-edit.Tpo -c -o gscope-edit.obj `if test -f 'edit.c'; then $(CYGPATH_W) 'edit.c'; else $(CYGPATH_W) '$(srcdir)/edit.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-edit.Tpo $(DEPDIR)/gscope-edit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='edit.c' object='gscope-edit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-edit.obj `if test -f 'edit.c'; then $(CYGPATH_W) 'edit.c'; else $(CYGPATH_W) '$(srcdir)/edit.c'; fi`
+
+gscope-exec.o: exec.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-exec.o -MD -MP -MF $(DEPDIR)/gscope-exec.Tpo -c -o gscope-exec.o `test -f 'exec.c' || echo '$(srcdir)/'`exec.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-exec.Tpo $(DEPDIR)/gscope-exec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='exec.c' object='gscope-exec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-exec.o `test -f 'exec.c' || echo '$(srcdir)/'`exec.c
+
+gscope-exec.obj: exec.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-exec.obj -MD -MP -MF $(DEPDIR)/gscope-exec.Tpo -c -o gscope-exec.obj `if test -f 'exec.c'; then $(CYGPATH_W) 'exec.c'; else $(CYGPATH_W) '$(srcdir)/exec.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-exec.Tpo $(DEPDIR)/gscope-exec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='exec.c' object='gscope-exec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-exec.obj `if test -f 'exec.c'; then $(CYGPATH_W) 'exec.c'; else $(CYGPATH_W) '$(srcdir)/exec.c'; fi`
+
+gscope-find.o: find.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-find.o -MD -MP -MF $(DEPDIR)/gscope-find.Tpo -c -o gscope-find.o `test -f 'find.c' || echo '$(srcdir)/'`find.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-find.Tpo $(DEPDIR)/gscope-find.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='find.c' object='gscope-find.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-find.o `test -f 'find.c' || echo '$(srcdir)/'`find.c
+
+gscope-find.obj: find.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-find.obj -MD -MP -MF $(DEPDIR)/gscope-find.Tpo -c -o gscope-find.obj `if test -f 'find.c'; then $(CYGPATH_W) 'find.c'; else $(CYGPATH_W) '$(srcdir)/find.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-find.Tpo $(DEPDIR)/gscope-find.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='find.c' object='gscope-find.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-find.obj `if test -f 'find.c'; then $(CYGPATH_W) 'find.c'; else $(CYGPATH_W) '$(srcdir)/find.c'; fi`
+
+gscope-help.o: help.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-help.o -MD -MP -MF $(DEPDIR)/gscope-help.Tpo -c -o gscope-help.o `test -f 'help.c' || echo '$(srcdir)/'`help.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-help.Tpo $(DEPDIR)/gscope-help.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='help.c' object='gscope-help.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-help.o `test -f 'help.c' || echo '$(srcdir)/'`help.c
+
+gscope-help.obj: help.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-help.obj -MD -MP -MF $(DEPDIR)/gscope-help.Tpo -c -o gscope-help.obj `if test -f 'help.c'; then $(CYGPATH_W) 'help.c'; else $(CYGPATH_W) '$(srcdir)/help.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-help.Tpo $(DEPDIR)/gscope-help.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='help.c' object='gscope-help.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-help.obj `if test -f 'help.c'; then $(CYGPATH_W) 'help.c'; else $(CYGPATH_W) '$(srcdir)/help.c'; fi`
+
+gscope-history.o: history.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-history.o -MD -MP -MF $(DEPDIR)/gscope-history.Tpo -c -o gscope-history.o `test -f 'history.c' || echo '$(srcdir)/'`history.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-history.Tpo $(DEPDIR)/gscope-history.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='history.c' object='gscope-history.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-history.o `test -f 'history.c' || echo '$(srcdir)/'`history.c
+
+gscope-history.obj: history.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-history.obj -MD -MP -MF $(DEPDIR)/gscope-history.Tpo -c -o gscope-history.obj `if test -f 'history.c'; then $(CYGPATH_W) 'history.c'; else $(CYGPATH_W) '$(srcdir)/history.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-history.Tpo $(DEPDIR)/gscope-history.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='history.c' object='gscope-history.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-history.obj `if test -f 'history.c'; then $(CYGPATH_W) 'history.c'; else $(CYGPATH_W) '$(srcdir)/history.c'; fi`
+
+gscope-input.o: input.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-input.o -MD -MP -MF $(DEPDIR)/gscope-input.Tpo -c -o gscope-input.o `test -f 'input.c' || echo '$(srcdir)/'`input.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-input.Tpo $(DEPDIR)/gscope-input.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='input.c' object='gscope-input.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-input.o `test -f 'input.c' || echo '$(srcdir)/'`input.c
+
+gscope-input.obj: input.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-input.obj -MD -MP -MF $(DEPDIR)/gscope-input.Tpo -c -o gscope-input.obj `if test -f 'input.c'; then $(CYGPATH_W) 'input.c'; else $(CYGPATH_W) '$(srcdir)/input.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-input.Tpo $(DEPDIR)/gscope-input.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='input.c' object='gscope-input.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-input.obj `if test -f 'input.c'; then $(CYGPATH_W) 'input.c'; else $(CYGPATH_W) '$(srcdir)/input.c'; fi`
+
+gscope-invlib.o: invlib.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-invlib.o -MD -MP -MF $(DEPDIR)/gscope-invlib.Tpo -c -o gscope-invlib.o `test -f 'invlib.c' || echo '$(srcdir)/'`invlib.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-invlib.Tpo $(DEPDIR)/gscope-invlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='invlib.c' object='gscope-invlib.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-invlib.o `test -f 'invlib.c' || echo '$(srcdir)/'`invlib.c
+
+gscope-invlib.obj: invlib.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-invlib.obj -MD -MP -MF $(DEPDIR)/gscope-invlib.Tpo -c -o gscope-invlib.obj `if test -f 'invlib.c'; then $(CYGPATH_W) 'invlib.c'; else $(CYGPATH_W) '$(srcdir)/invlib.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-invlib.Tpo $(DEPDIR)/gscope-invlib.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='invlib.c' object='gscope-invlib.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-invlib.obj `if test -f 'invlib.c'; then $(CYGPATH_W) 'invlib.c'; else $(CYGPATH_W) '$(srcdir)/invlib.c'; fi`
+
+gscope-logdir.o: logdir.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-logdir.o -MD -MP -MF $(DEPDIR)/gscope-logdir.Tpo -c -o gscope-logdir.o `test -f 'logdir.c' || echo '$(srcdir)/'`logdir.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-logdir.Tpo $(DEPDIR)/gscope-logdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='logdir.c' object='gscope-logdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-logdir.o `test -f 'logdir.c' || echo '$(srcdir)/'`logdir.c
+
+gscope-logdir.obj: logdir.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-logdir.obj -MD -MP -MF $(DEPDIR)/gscope-logdir.Tpo -c -o gscope-logdir.obj `if test -f 'logdir.c'; then $(CYGPATH_W) 'logdir.c'; else $(CYGPATH_W) '$(srcdir)/logdir.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-logdir.Tpo $(DEPDIR)/gscope-logdir.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='logdir.c' object='gscope-logdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-logdir.obj `if test -f 'logdir.c'; then $(CYGPATH_W) 'logdir.c'; else $(CYGPATH_W) '$(srcdir)/logdir.c'; fi`
+
+gscope-lookup.o: lookup.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-lookup.o -MD -MP -MF $(DEPDIR)/gscope-lookup.Tpo -c -o gscope-lookup.o `test -f 'lookup.c' || echo '$(srcdir)/'`lookup.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-lookup.Tpo $(DEPDIR)/gscope-lookup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='lookup.c' object='gscope-lookup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-lookup.o `test -f 'lookup.c' || echo '$(srcdir)/'`lookup.c
+
+gscope-lookup.obj: lookup.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-lookup.obj -MD -MP -MF $(DEPDIR)/gscope-lookup.Tpo -c -o gscope-lookup.obj `if test -f 'lookup.c'; then $(CYGPATH_W) 'lookup.c'; else $(CYGPATH_W) '$(srcdir)/lookup.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-lookup.Tpo $(DEPDIR)/gscope-lookup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='lookup.c' object='gscope-lookup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-lookup.obj `if test -f 'lookup.c'; then $(CYGPATH_W) 'lookup.c'; else $(CYGPATH_W) '$(srcdir)/lookup.c'; fi`
+
+gscope-main.o: main.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-main.o -MD -MP -MF $(DEPDIR)/gscope-main.Tpo -c -o gscope-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-main.Tpo $(DEPDIR)/gscope-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='main.c' object='gscope-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+gscope-main.obj: main.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-main.obj -MD -MP -MF $(DEPDIR)/gscope-main.Tpo -c -o gscope-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-main.Tpo $(DEPDIR)/gscope-main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='main.c' object='gscope-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+gscope-mouse.o: mouse.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mouse.o -MD -MP -MF $(DEPDIR)/gscope-mouse.Tpo -c -o gscope-mouse.o `test -f 'mouse.c' || echo '$(srcdir)/'`mouse.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mouse.Tpo $(DEPDIR)/gscope-mouse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mouse.c' object='gscope-mouse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mouse.o `test -f 'mouse.c' || echo '$(srcdir)/'`mouse.c
+
+gscope-mouse.obj: mouse.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mouse.obj -MD -MP -MF $(DEPDIR)/gscope-mouse.Tpo -c -o gscope-mouse.obj `if test -f 'mouse.c'; then $(CYGPATH_W) 'mouse.c'; else $(CYGPATH_W) '$(srcdir)/mouse.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mouse.Tpo $(DEPDIR)/gscope-mouse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mouse.c' object='gscope-mouse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mouse.obj `if test -f 'mouse.c'; then $(CYGPATH_W) 'mouse.c'; else $(CYGPATH_W) '$(srcdir)/mouse.c'; fi`
+
+gscope-mygetenv.o: mygetenv.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mygetenv.o -MD -MP -MF $(DEPDIR)/gscope-mygetenv.Tpo -c -o gscope-mygetenv.o `test -f 'mygetenv.c' || echo '$(srcdir)/'`mygetenv.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mygetenv.Tpo $(DEPDIR)/gscope-mygetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mygetenv.c' object='gscope-mygetenv.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mygetenv.o `test -f 'mygetenv.c' || echo '$(srcdir)/'`mygetenv.c
+
+gscope-mygetenv.obj: mygetenv.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mygetenv.obj -MD -MP -MF $(DEPDIR)/gscope-mygetenv.Tpo -c -o gscope-mygetenv.obj `if test -f 'mygetenv.c'; then $(CYGPATH_W) 'mygetenv.c'; else $(CYGPATH_W) '$(srcdir)/mygetenv.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mygetenv.Tpo $(DEPDIR)/gscope-mygetenv.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mygetenv.c' object='gscope-mygetenv.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mygetenv.obj `if test -f 'mygetenv.c'; then $(CYGPATH_W) 'mygetenv.c'; else $(CYGPATH_W) '$(srcdir)/mygetenv.c'; fi`
+
+gscope-mypopen.o: mypopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mypopen.o -MD -MP -MF $(DEPDIR)/gscope-mypopen.Tpo -c -o gscope-mypopen.o `test -f 'mypopen.c' || echo '$(srcdir)/'`mypopen.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mypopen.Tpo $(DEPDIR)/gscope-mypopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mypopen.c' object='gscope-mypopen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mypopen.o `test -f 'mypopen.c' || echo '$(srcdir)/'`mypopen.c
+
+gscope-mypopen.obj: mypopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-mypopen.obj -MD -MP -MF $(DEPDIR)/gscope-mypopen.Tpo -c -o gscope-mypopen.obj `if test -f 'mypopen.c'; then $(CYGPATH_W) 'mypopen.c'; else $(CYGPATH_W) '$(srcdir)/mypopen.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-mypopen.Tpo $(DEPDIR)/gscope-mypopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='mypopen.c' object='gscope-mypopen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-mypopen.obj `if test -f 'mypopen.c'; then $(CYGPATH_W) 'mypopen.c'; else $(CYGPATH_W) '$(srcdir)/mypopen.c'; fi`
+
+gscope-vpaccess.o: vpaccess.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpaccess.o -MD -MP -MF $(DEPDIR)/gscope-vpaccess.Tpo -c -o gscope-vpaccess.o `test -f 'vpaccess.c' || echo '$(srcdir)/'`vpaccess.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpaccess.Tpo $(DEPDIR)/gscope-vpaccess.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpaccess.c' object='gscope-vpaccess.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpaccess.o `test -f 'vpaccess.c' || echo '$(srcdir)/'`vpaccess.c
+
+gscope-vpaccess.obj: vpaccess.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpaccess.obj -MD -MP -MF $(DEPDIR)/gscope-vpaccess.Tpo -c -o gscope-vpaccess.obj `if test -f 'vpaccess.c'; then $(CYGPATH_W) 'vpaccess.c'; else $(CYGPATH_W) '$(srcdir)/vpaccess.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpaccess.Tpo $(DEPDIR)/gscope-vpaccess.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpaccess.c' object='gscope-vpaccess.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpaccess.obj `if test -f 'vpaccess.c'; then $(CYGPATH_W) 'vpaccess.c'; else $(CYGPATH_W) '$(srcdir)/vpaccess.c'; fi`
+
+gscope-vpfopen.o: vpfopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpfopen.o -MD -MP -MF $(DEPDIR)/gscope-vpfopen.Tpo -c -o gscope-vpfopen.o `test -f 'vpfopen.c' || echo '$(srcdir)/'`vpfopen.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpfopen.Tpo $(DEPDIR)/gscope-vpfopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpfopen.c' object='gscope-vpfopen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpfopen.o `test -f 'vpfopen.c' || echo '$(srcdir)/'`vpfopen.c
+
+gscope-vpfopen.obj: vpfopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpfopen.obj -MD -MP -MF $(DEPDIR)/gscope-vpfopen.Tpo -c -o gscope-vpfopen.obj `if test -f 'vpfopen.c'; then $(CYGPATH_W) 'vpfopen.c'; else $(CYGPATH_W) '$(srcdir)/vpfopen.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpfopen.Tpo $(DEPDIR)/gscope-vpfopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpfopen.c' object='gscope-vpfopen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpfopen.obj `if test -f 'vpfopen.c'; then $(CYGPATH_W) 'vpfopen.c'; else $(CYGPATH_W) '$(srcdir)/vpfopen.c'; fi`
+
+gscope-vpinit.o: vpinit.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpinit.o -MD -MP -MF $(DEPDIR)/gscope-vpinit.Tpo -c -o gscope-vpinit.o `test -f 'vpinit.c' || echo '$(srcdir)/'`vpinit.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpinit.Tpo $(DEPDIR)/gscope-vpinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpinit.c' object='gscope-vpinit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpinit.o `test -f 'vpinit.c' || echo '$(srcdir)/'`vpinit.c
+
+gscope-vpinit.obj: vpinit.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpinit.obj -MD -MP -MF $(DEPDIR)/gscope-vpinit.Tpo -c -o gscope-vpinit.obj `if test -f 'vpinit.c'; then $(CYGPATH_W) 'vpinit.c'; else $(CYGPATH_W) '$(srcdir)/vpinit.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpinit.Tpo $(DEPDIR)/gscope-vpinit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpinit.c' object='gscope-vpinit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpinit.obj `if test -f 'vpinit.c'; then $(CYGPATH_W) 'vpinit.c'; else $(CYGPATH_W) '$(srcdir)/vpinit.c'; fi`
+
+gscope-vpopen.o: vpopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpopen.o -MD -MP -MF $(DEPDIR)/gscope-vpopen.Tpo -c -o gscope-vpopen.o `test -f 'vpopen.c' || echo '$(srcdir)/'`vpopen.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpopen.Tpo $(DEPDIR)/gscope-vpopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpopen.c' object='gscope-vpopen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpopen.o `test -f 'vpopen.c' || echo '$(srcdir)/'`vpopen.c
+
+gscope-vpopen.obj: vpopen.c
+@am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -MT gscope-vpopen.obj -MD -MP -MF $(DEPDIR)/gscope-vpopen.Tpo -c -o gscope-vpopen.obj `if test -f 'vpopen.c'; then $(CYGPATH_W) 'vpopen.c'; else $(CYGPATH_W) '$(srcdir)/vpopen.c'; fi`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/gscope-vpopen.Tpo $(DEPDIR)/gscope-vpopen.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='vpopen.c' object='gscope-vpopen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gscope_CFLAGS) $(CFLAGS) -c -o gscope-vpopen.obj `if test -f 'vpopen.c'; then $(CYGPATH_W) 'vpopen.c'; else $(CYGPATH_W) '$(srcdir)/vpopen.c'; fi`
+
+.l.c:
+       $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+.y.c:
+       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -rm -f egrep.c
+       -rm -f fscanner.c
+       -rm -f scanner.c
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf $(DEPDIR) ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf $(DEPDIR) ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/alloc.c b/src/alloc.c
new file mode 100644 (file)
index 0000000..add992f
--- /dev/null
@@ -0,0 +1,95 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* memory allocation functions */
+
+#include <stdio.h>
+#include <string.h>
+#include "alloc.h"
+
+#include "global.h" /* for postfatal() */
+
+static char const rcsid[] = "$Id: alloc.c,v 1.8 2006/07/23 20:59:20 broeker Exp $";
+
+static void    *alloctest(void *p);
+
+/* let autoconf find out if <stdlib.h> is available. This test will
+ * succeed more reliably than the defined(__STDC__) one I replaced */
+#if STDC_HEADERS
+# include <stdlib.h>
+#else
+char   *calloc(), *malloc(), *realloc(), *strcpy();
+#endif
+
+/* allocate a string */
+
+char *
+my_strdup(char *s)
+{
+       return(strcpy(mymalloc(strlen(s) + 1), s));
+}
+
+
+/* version of malloc that only returns if successful */
+void *
+mymalloc(size_t size)
+{
+    return(alloctest(malloc((unsigned) size)));
+}
+
+
+/* version of calloc that only returns if successful */
+void *
+mycalloc(size_t nelem, size_t size)
+{
+    return(alloctest(calloc((unsigned) nelem, (unsigned) size)));
+}
+
+
+/* version of realloc that only returns if successful */
+void *
+myrealloc(void *p, size_t size)
+{
+    return(alloctest(realloc(p, (unsigned) size)));
+}
+
+
+/* check for memory allocation failure */
+static void *
+alloctest(void *p)
+{
+    if (p == NULL) {
+       postfatal("\n%s: out of storage\n", argv0);
+       /* NOTREACHED */
+    }
+    return(p);
+}
diff --git a/src/alloc.h b/src/alloc.h
new file mode 100644 (file)
index 0000000..297eb71
--- /dev/null
@@ -0,0 +1,46 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: alloc.h,v 1.1 2006/07/23 20:59:20 broeker Exp $ */
+
+#ifndef CSCOPE_ALLOC_H
+#define CSCOPE_ALLOC_H
+
+#include <string.h>  /* need size_t ... */
+
+/* memory allocation support */
+void   *mycalloc(size_t nelem, size_t size);
+void   *mymalloc(size_t size);
+void   *myrealloc(void *p, size_t size);
+char   *my_strdup(char *s);
+
+#endif /* CSCOPE_ALLOC_H */
diff --git a/src/basename.c b/src/basename.c
new file mode 100644 (file)
index 0000000..7254ae7
--- /dev/null
@@ -0,0 +1,48 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* get a file's base name from its path name */
+
+static char const rcsid[] = "$Id: basename.c,v 1.3 2001/07/05 14:31:00 broeker Exp $";
+
+#include "global.h"
+
+char *
+mybasename(char *path)
+{
+       char    *s;
+       
+       if ((s = strrchr(path, '/')) != 0) {
+               return(s + 1);
+       }
+       return(path);
+}
diff --git a/src/build.c b/src/build.c
new file mode 100644 (file)
index 0000000..d1a4493
--- /dev/null
@@ -0,0 +1,740 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     main functions
+ */
+
+#include "build.h"
+
+#include "global.h"            /* FIXME: get rid of this! */
+
+#include "library.h"
+#include "alloc.h"
+#include "scanner.h"
+#include "version.h"           /* for FILEVERSION */
+#include "vp.h"
+
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+
+/* Exported variables: */
+
+BOOL   buildonly = NO;         /* only build the database */
+BOOL   unconditional = NO;     /* unconditionally build database */
+BOOL   fileschanged;           /* assume some files changed */
+
+/* variable copies of the master strings... */
+char   invname_buf[] = INVNAME;
+char   invpost_buf[] = INVPOST;
+char   reffile_buf[] = REFFILE;
+char   *invname = invname_buf; /* inverted index to the database */
+char   *invpost = invpost_buf; /* inverted index postings */
+char   *reffile = reffile_buf; /* cross-reference file path name */
+
+char   *newreffile;            /* new cross-reference file name */
+FILE   *newrefs;               /* new cross-reference */
+FILE   *postings;              /* new inverted index postings */
+int    symrefs = -1;           /* cross-reference file */
+
+INVCONTROL invcontrol;         /* inverted file control structure */
+
+
+/* Local variables: */
+static char *newinvname;       /* new inverted index file name */
+static char *newinvpost;       /* new inverted index postings file name */
+static long traileroffset;     /* file trailer offset */
+
+
+/* Internal prototypes: */
+static void    cannotindex(void);
+static int     compare(const void *s1, const void *s2);
+static void    copydata(void);
+static void    copyinverted(void);
+static char    *getoldfile(void);
+static void    movefile(char *new, char *old);
+static void    putheader(char *dir);
+static void    fetch_include_from_dbase(char *, size_t);
+static void    putlist(char **names, int count);
+static BOOL    samelist(FILE *oldrefs, char **names, int count);
+
+
+/* Error handling routine if inverted index creation fails */
+static void
+cannotindex(void)
+{
+    fprintf(stderr, "\
+cscope: cannot create inverted index; ignoring -q option\n");
+    invertedindex = NO;
+    errorsfound = YES;
+    fprintf(stderr, "\
+cscope: removed files %s and %s\n", 
+           newinvname, newinvpost);
+    unlink(newinvname);
+    unlink(newinvpost);
+}
+
+
+/* see if the name list is the same in the cross-reference file */
+static BOOL
+samelist(FILE *oldrefs, char **names, int count)
+{
+    char    oldname[PATHLEN + 1];   /* name in old cross-reference */
+    int     oldcount;
+    int     i;
+
+    /* see if the number of names is the same */
+    if (fscanf(oldrefs, "%d", &oldcount) != 1 ||
+       oldcount != count) {
+       return(NO);
+    }
+    /* see if the name list is the same */
+    for (i = 0; i < count; ++i) {
+       if ((1 != fscanf(oldrefs," %[^\n]",oldname)) ||
+           strnotequal(oldname, names[i])) {
+           return(NO);
+       }
+    }
+    return(YES);
+}
+
+
+/* create the file name(s) used for a new cross-referene */
+
+void setup_build_filenames(char *reffile)
+{
+    char *path;                        /* file pathname */
+    char *s;                   /* pointer to basename in path */
+
+    path = mymalloc(strlen(reffile) + 10);
+    strcpy(path, reffile);
+    s = mybasename(path);
+    *s = '\0';
+    strcat(path, "n");
+    ++s;
+    strcpy(s, mybasename(reffile));
+    newreffile = my_strdup(path);
+    strcpy(s, mybasename(invname));
+    newinvname = my_strdup(path);
+    strcpy(s, mybasename(invpost));
+    newinvpost = my_strdup(path);
+    free(path);
+}
+
+/* open the database */
+
+void
+opendatabase(void)
+{
+    if ((symrefs = vpopen(reffile, O_BINARY | O_RDONLY)) == -1) {
+       cannotopen(reffile);
+       myexit(1);
+    }
+    blocknumber = -1;  /* force next seek to read the first block */
+       
+    /* open any inverted index */
+    if (invertedindex == YES &&
+       invopen(&invcontrol, invname, invpost, INVAVAIL) == -1) {
+       askforreturn();         /* so user sees message */
+       invertedindex = NO;
+    }
+}
+
+
+/* rebuild the database */
+void
+rebuild(void)
+{
+    close(symrefs);
+    if (invertedindex == YES) {
+       invclose(&invcontrol);
+       nsrcoffset = 0;
+       npostings = 0;
+    }
+    build();
+    opendatabase();
+
+    /* revert to the initial display */
+    if (refsfound != NULL) {
+       fclose(refsfound);
+       refsfound = NULL;
+    }
+}
+
+
+/* build the cross-reference */
+void
+build(void)
+{
+    unsigned long i;
+    FILE    *oldrefs;          /* old cross-reference file */
+    time_t  reftime;           /* old crossref modification time */
+    char    *file;             /* current file */
+    char    *oldfile;          /* file in old cross-reference */
+    char    newdir[PATHLEN + 1]; /* directory in new cross-reference */
+    char    olddir[PATHLEN + 1]; /* directory in old cross-reference */
+    char    oldname[PATHLEN + 1]; /* name in old cross-reference */
+    unsigned long oldnum;      /* number in old cross-ref */
+    struct  stat statstruct;   /* file status */
+    unsigned long firstfile;   /* first source file in pass */
+    unsigned long lastfile;    /* last source file in pass */
+    int     built = 0;         /* built crossref for these files */
+    int     copied = 0;                /* copied crossref for these files */
+    unsigned long fileindex;           /* source file name index */
+    BOOL    interactive = YES; /* output progress messages */
+
+    /* normalize the current directory relative to the home directory so
+       the cross-reference is not rebuilt when the user's login is moved */
+    strcpy(newdir, currentdir);
+    if (strcmp(currentdir, home) == 0) {
+       strcpy(newdir, "$HOME");
+    } else if (strncmp(currentdir, home, strlen(home)) == 0) {
+       snprintf(newdir, sizeof(newdir), "$HOME%s", currentdir + strlen(home));
+    }
+    /* sort the source file names (needed for rebuilding) */
+    qsort(srcfiles, nsrcfiles, sizeof(char *), compare);
+
+    /* if there is an old cross-reference and its current directory matches */
+    /* or this is an unconditional build */
+    if ((oldrefs = vpfopen(reffile, "rb")) != NULL
+       && unconditional == NO
+       && fscanf(oldrefs, "cscope %d %" PATHLEN_STR "s", &fileversion, olddir) == 2 
+       && (strcmp(olddir, currentdir) == 0 /* remain compatible */
+           || strcmp(olddir, newdir) == 0)) {
+       /* get the cross-reference file's modification time */
+       fstat(fileno(oldrefs), &statstruct);
+       reftime = statstruct.st_mtime;
+       if (fileversion >= 8) {
+           BOOL        oldcompress = YES;
+           BOOL        oldinvertedindex = NO;
+           BOOL        oldtruncate = NO;
+           int c;
+
+           /* see if there are options in the database */
+           for (;;) {
+               while((c = getc(oldrefs)) == ' ')
+                   ;           /* do nothing */
+               if (c != '-') {
+                   ungetc(c, oldrefs);
+                   break;
+               }
+               switch (getc(oldrefs)) {
+               case 'c':       /* ASCII characters only */
+                   oldcompress = NO;
+                   break;
+               case 'q':       /* quick search */
+                   oldinvertedindex = YES;
+                   fscanf(oldrefs, "%ld", &totalterms);
+                   break;
+               case 'T':       /* truncate symbols to 8 characters */
+                   oldtruncate = YES;
+                   break;
+               }
+           }
+           /* check the old and new option settings */
+           if (oldcompress != compress || oldtruncate != trun_syms) {
+               posterr("\
+cscope: -c or -T option mismatch between command line and old symbol database\n");
+               goto force;
+           }
+           if (oldinvertedindex != invertedindex) {
+               posterr("\
+cscope: -q option mismatch between command line and old symbol database\n");
+               if (invertedindex == NO) {
+                   posterr("cscope: removed files %s and %s\n",
+                           invname, invpost);
+                   unlink(invname);
+                   unlink(invpost);
+               }
+               goto outofdate;
+           }
+           /* seek to the trailer */
+           if (fscanf(oldrefs, "%ld", &traileroffset) != 1 ||
+               fseek(oldrefs, traileroffset, SEEK_SET) == -1) {
+               posterr("cscope: incorrect symbol database file format\n");
+               goto force;
+           }
+       }
+       /* if assuming that some files have changed */
+       if (fileschanged == YES) {
+           goto outofdate;
+       }
+       /* see if the directory lists are the same */
+       if (samelist(oldrefs, srcdirs, nsrcdirs) == NO 
+           || samelist(oldrefs, incdirs, nincdirs) == NO 
+           /* get the old number of files */
+           || fscanf(oldrefs, "%lu", &oldnum) != 1 
+           /* skip the string space size */
+           || (fileversion >= 9 && fscanf(oldrefs, "%*s") != 0)) {
+           goto outofdate;
+       }
+       /* see if the list of source files is the same and
+          none have been changed up to the included files */
+       for (i = 0; i < nsrcfiles; ++i) {
+           if ((1 != fscanf(oldrefs," %[^\n]",oldname))
+               || strnotequal(oldname, srcfiles[i])
+               || (lstat(srcfiles[i], &statstruct) != 0)
+               || (statstruct.st_mtime > reftime)
+               ) {
+               goto outofdate;
+           }
+       }
+       /* the old cross-reference is up-to-date */
+       /* so get the list of included files */
+       while (i++ < oldnum && fgets(oldname, sizeof(oldname), oldrefs)) {
+           addsrcfile(oldname);
+       }
+       fclose(oldrefs);
+       return;
+               
+    outofdate:
+       /* if the database format has changed, rebuild it all */
+       if (fileversion != FILEVERSION) {
+           fprintf(stderr, "\
+cscope: converting to new symbol database file format\n");
+           goto force;
+       }
+       /* reopen the old cross-reference file for fast scanning */
+       if ((symrefs = vpopen(reffile, O_BINARY | O_RDONLY)) == -1) {
+           postfatal("cscope: cannot open file %s\n", reffile);
+           /* NOTREACHED */
+       }
+       /* get the first file name in the old cross-reference */
+       blocknumber = -1;
+       read_block();   /* read the first cross-ref block */
+       scanpast('\t'); /* skip the header */
+       oldfile = getoldfile();
+    } else {   /* force cross-referencing of all the source files */
+    force:     
+       reftime = 0;
+       oldfile = NULL;
+    }
+    /* open the new cross-reference file */
+    if ((newrefs = myfopen(newreffile, "wb")) == NULL) {
+       postfatal("cscope: cannot open file %s\n", reffile);
+       /* NOTREACHED */
+    }
+    if (invertedindex == YES && (postings = myfopen(temp1, "wb")) == NULL) {
+       cannotwrite(temp1);
+       cannotindex();
+    }
+    putheader(newdir);
+    fileversion = FILEVERSION;
+    if (buildonly == YES && verbosemode != YES && !isatty(0)) {
+       interactive = NO;
+    } else {
+       searchcount = 0;
+    }
+    /* output the leading tab expected by crossref() */
+    dbputc('\t');
+
+    /* make passes through the source file list until the last level of
+       included files is processed */
+    firstfile = 0;
+    lastfile = nsrcfiles;
+    if (invertedindex == YES) {
+       srcoffset = mymalloc((nsrcfiles + 1) * sizeof(long));
+    }
+    for (;;) {
+       progress("Building symbol database", (long)built,
+                (long)lastfile);
+       if (linemode == NO)
+           refresh();
+
+       /* get the next source file name */
+       for (fileindex = firstfile; fileindex < lastfile; ++fileindex) {
+                       
+           /* display the progress about every three seconds */
+           if (interactive == YES && fileindex % 10 == 0) {
+               progress("Building symbol database", fileindex, lastfile);
+           }
+           /* if the old file has been deleted get the next one */
+           file = srcfiles[fileindex];
+           while (oldfile != NULL && strcmp(file, oldfile) > 0) {
+               oldfile = getoldfile();
+           }
+           /* if there isn't an old database or this is a new file */
+           if (oldfile == NULL || strcmp(file, oldfile) < 0) {
+               crossref(file);
+               ++built;
+           } else if (lstat(file, &statstruct) == 0
+                      && statstruct.st_mtime > reftime) {
+               /* if this file was modified */
+               crossref(file);
+               ++built;
+                               
+               /* skip its old crossref so modifying the last source
+                * file does not cause all included files to be built.
+                * Unfortunately a new file that is alphabetically
+                * last will cause all included files to be build, but
+                * this is less likely */
+               oldfile = getoldfile();
+           } else {    
+               /* copy its cross-reference */
+               putfilename(file);
+               if (invertedindex == YES) {
+                   copyinverted();
+               } else {
+                   copydata();
+               }
+               ++copied;
+               oldfile = getoldfile();
+           }
+       }
+       /* see if any included files were found */
+       if (lastfile == nsrcfiles) {
+           break;
+       }
+       firstfile = lastfile;
+       lastfile = nsrcfiles;
+       if (invertedindex == YES) {
+           srcoffset = myrealloc(srcoffset,
+                                 (nsrcfiles + 1) * sizeof(long));
+       }
+       /* sort the included file names */
+       qsort(&srcfiles[firstfile], (lastfile - firstfile), 
+             sizeof(char *), compare);
+    }
+    /* add a null file name to the trailing tab */
+    putfilename("");
+    dbputc('\n');
+       
+    /* get the file trailer offset */
+    traileroffset = dboffset;
+       
+    /* output the source and include directory and file lists */
+    putlist(srcdirs, nsrcdirs);
+    putlist(incdirs, nincdirs);
+    putlist(srcfiles, nsrcfiles);
+    if (fflush(newrefs) == EOF) {
+       /* rewind doesn't check for write failure */
+       cannotwrite(newreffile);
+       /* NOTREACHED */
+    }
+
+    /* create the inverted index if requested */
+    if (invertedindex == YES) {
+       char    sortcommand[PATHLEN + 1];
+
+       if (fflush(postings) == EOF) {
+           cannotwrite(temp1);
+           /* NOTREACHED */
+       }
+       fstat(fileno(postings), &statstruct);
+       fclose(postings);
+       snprintf(sortcommand, sizeof(sortcommand), "env LC_ALL=C sort -T %s %s", tmpdir, temp1);
+       if ((postings = mypopen(sortcommand, "r")) == NULL) {
+           fprintf(stderr, "cscope: cannot open pipe to sort command\n");
+           cannotindex();
+       } else {
+           if ((totalterms = invmake(newinvname, newinvpost, postings)) > 0) {
+               movefile(newinvname, invname);
+               movefile(newinvpost, invpost);
+           } else {
+               cannotindex();
+           }
+           mypclose(postings);
+       }
+       unlink(temp1);
+       free(srcoffset);
+    }
+    /* rewrite the header with the trailer offset and final option list */
+    rewind(newrefs);
+    putheader(newdir);
+    fclose(newrefs);
+       
+    /* close the old database file */
+    if (symrefs >= 0) {
+       close(symrefs);
+    }
+    if (oldrefs != NULL) {
+       fclose(oldrefs);
+    }
+    /* replace it with the new database file */
+    movefile(newreffile, reffile);
+}
+       
+
+/* string comparison function for qsort */
+static int
+compare(const void *arg_s1, const void *arg_s2)
+{
+    const char **s1 = (const char **) arg_s1;
+    const char **s2 = (const char **) arg_s2;
+                       
+    return(strcmp(*s1, *s2));
+}
+
+
+/* seek to the trailer, in a given file */
+void 
+seek_to_trailer(FILE *f) 
+{
+    if (fscanf(f, "%ld", &traileroffset) != 1) {
+       postfatal("cscope: cannot read trailer offset from file %s\n", reffile);
+       /* NOTREACHED */
+    }
+    if (fseek(f, traileroffset, SEEK_SET) == -1) {
+       postfatal("cscope: cannot seek to trailer in file %s\n", reffile);
+       /* NOTREACHED */
+    }
+}
+
+
+/* get the next file name in the old cross-reference */
+static char *
+getoldfile(void)
+{
+    static char        file[PATHLEN + 1];      /* file name in old crossref */
+
+    if (blockp != NULL) {
+       do {
+           if (*blockp == NEWFILE) {
+               skiprefchar();
+               fetch_string_from_dbase(file, sizeof(file));
+               if (file[0] != '\0') {  /* if not end-of-crossref */
+                   return(file);
+               }
+               return(NULL);
+           }
+       } while (scanpast('\t') != NULL);
+    }
+    return(NULL);
+}
+
+
+/* Free all storage allocated for filenames: */
+void free_newbuildfiles(void)
+{
+    free(newinvname);
+    free(newinvpost);
+    free(newreffile);
+}      
+
+
+/* output the cscope version, current directory, database format options, and
+   the database trailer offset */
+static void
+putheader(char *dir)
+{
+    dboffset = fprintf(newrefs, "cscope %d %s", FILEVERSION, dir);
+    if (compress == NO) {
+       dboffset += fprintf(newrefs, " -c");
+    }
+    if (invertedindex == YES) {
+       dboffset += fprintf(newrefs, " -q %.10ld", totalterms);
+    } else {   
+       /* leave space so if the header is overwritten without -q
+        * because writing the inverted index failed, the header
+        * is the same length */
+       dboffset += fprintf(newrefs, "              ");
+    }
+    if (trun_syms == YES) {
+       dboffset += fprintf(newrefs, " -T");
+    }
+
+    dboffset += fprintf(newrefs, " %.10ld\n", traileroffset);
+#ifdef PRINTF_RETVAL_BROKEN
+    dboffset = ftell(newrefs); 
+#endif
+}
+
+
+/* put the name list into the cross-reference file */
+static void
+putlist(char **names, int count)
+{
+    int        i, size = 0;
+       
+    fprintf(newrefs, "%d\n", count);
+    if (names == srcfiles) {
+
+       /* calculate the string space needed */
+       for (i = 0; i < count; ++i) {
+           size += strlen(names[i]) + 1;
+       }
+       fprintf(newrefs, "%d\n", size);
+    }
+    for (i = 0; i < count; ++i) {
+       if (fputs(names[i], newrefs) == EOF ||
+           putc('\n', newrefs) == EOF) {
+           cannotwrite(newreffile);
+           /* NOTREACHED */
+       }
+    }
+}
+
+
+/* copy this file's symbol data */
+static void
+copydata(void)
+{
+    char symbol[PATLEN + 1];
+    char *cp;
+
+    setmark('\t');
+    cp = blockp;
+    for (;;) {
+       /* copy up to the next \t */
+       do {    /* innermost loop optimized to only one test */
+           while (*cp != '\t') {
+               dbputc(*cp++);
+           }
+       } while (*++cp == '\0' && (cp = read_block()) != NULL);
+       dbputc('\t');   /* copy the tab */
+               
+       /* get the next character */
+       /* HBB 2010-08-21: potential problem if above loop was left
+        * with cp==NULL */
+       if (cp && (*(cp + 1) == '\0')) {
+           cp = read_block();
+       }
+       /* exit if at the end of this file's data */
+       if (cp == NULL || *cp == NEWFILE) {
+           break;
+       }
+       /* look for an #included file */
+       if (*cp == INCLUDE) {
+           blockp = cp;
+           fetch_include_from_dbase(symbol, sizeof(symbol));
+           writestring(symbol);
+           setmark('\t');
+           cp = blockp;
+       }
+    }
+    blockp = cp;
+}
+
+/* copy this file's symbol data and output the inverted index postings */
+
+static void
+copyinverted(void)
+{
+    char    *cp;
+    char    c;
+    int     type;   /* reference type (mark character) */
+    char    symbol[PATLEN + 1];
+
+    /* note: this code was expanded in-line for speed */
+    /* while (scanpast('\n') != NULL) { */
+    /* other macros were replaced by code using cp instead of blockp */
+    cp = blockp;
+    for (;;) {
+       setmark('\n');
+       do {    /* innermost loop optimized to only one test */
+           while (*cp != '\n') {
+               dbputc(*cp++);
+           }
+       } while (*++cp == '\0' && (cp = read_block()) != NULL);
+       dbputc('\n');   /* copy the newline */
+               
+       /* get the next character */
+       /* HBB 2010-08-21: potential problem if above loop was left
+        * with cp==NULL */
+       if (cp && (*(cp + 1) == '\0')) {
+           cp = read_block();
+       }
+       /* exit if at the end of this file's data */
+       if (cp == NULL) {
+           break;
+       }
+       switch (*cp) {
+       case '\n':
+           lineoffset = dboffset + 1;
+           continue;
+       case '\t':
+           dbputc('\t');
+           blockp = cp;
+           type = getrefchar();
+           switch (type) {
+           case NEWFILE:               /* file name */
+               return;
+           case INCLUDE:               /* #included file */
+               fetch_include_from_dbase(symbol, sizeof(symbol));
+               goto output;
+           }
+           dbputc(type);
+           skiprefchar();
+           fetch_string_from_dbase(symbol, sizeof(symbol));
+           goto output;
+       }
+       c = *cp;
+       if (c & 0200) { /* digraph char? */
+           c = dichar1[(c & 0177) / 8];
+       }
+       /* if this is a symbol */
+       if (isalpha((unsigned char)c) || c == '_') {
+           blockp = cp;
+           fetch_string_from_dbase(symbol, sizeof(symbol));
+           type = ' ';
+       output:
+           putposting(symbol, type);
+           writestring(symbol);
+           if (blockp == NULL) {
+               return;
+           }
+           cp = blockp;
+       }
+    }
+    blockp = cp;
+}
+
+
+/* replace the old file with the new file */
+static void
+movefile(char *new, char *old)
+{
+    unlink(old);
+    if (rename(new, old) == -1) {
+       myperror("cscope");
+       postfatal("cscope: cannot rename file %s to file %s\n",
+                 new, old);
+       /* NOTREACHED */
+    }
+}
+
+
+/* process the #included file in the old database */
+static void
+fetch_include_from_dbase(char *s, size_t length)
+{
+    dbputc(INCLUDE);
+    skiprefchar();
+    fetch_string_from_dbase(s, length);
+    incfile(s + 1, s);
+}
+
diff --git a/src/build.h b/src/build.h
new file mode 100644 (file)
index 0000000..085d15b
--- /dev/null
@@ -0,0 +1,73 @@
+/*===========================================================================
+ Copyright (c) 2001, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: build.h,v 1.1 2001/07/09 14:01:18 broeker Exp $ */
+
+
+#ifndef CSCOPE_BUILD_H
+#define CSCOPE_BUILD_H
+
+#include "global.h"            /* FIXME: temp. only */
+#include "invlib.h"
+
+/* types and macros of build.c to be used by other modules */
+
+/* database output macros that update its offset */
+#define        dbputc(c)       (++dboffset, (void) putc(c, newrefs))
+#define        dbfputs(s)      (dboffset += strlen(s), fputs(s, newrefs))
+
+/* declarations for globals defined in build.c */
+
+extern BOOL    buildonly;      /* only build the database */
+extern BOOL    unconditional;  /* unconditionally build database */
+extern BOOL    fileschanged;   /* assume some files changed */
+
+extern char    *reffile;       /* cross-reference file path name */
+extern char    *invname;       /* inverted index to the database */
+extern char    *invpost;       /* inverted index postings */
+extern char    *newreffile;    /* new cross-reference file name */
+extern FILE    *newrefs;       /* new cross-reference */
+extern FILE    *postings;      /* new inverted index postings */
+extern int     symrefs;        /* cross-reference file */
+
+extern INVCONTROL invcontrol;  /* inverted file control structure */
+
+/* Prototypes of external functions defined by build.c */
+
+void   build(void);
+void   free_newbuildfiles(void);
+void   opendatabase(void);
+void   rebuild(void);
+void   setup_build_filenames(char *reffile);
+void   seek_to_trailer(FILE *f);
+
+#endif /* CSCOPE_BUILD_H */
diff --git a/src/command.c b/src/command.c
new file mode 100644 (file)
index 0000000..fe1e0a3
--- /dev/null
@@ -0,0 +1,953 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol or text cross-reference
+ *
+ *     command functions
+ */
+
+#include "global.h"
+#include "build.h"             /* for rebuild() */
+#include "alloc.h"
+
+#include <stdlib.h>
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#include <ctype.h>
+
+static char const rcsid[] = "$Id: command.c,v 1.36 2012/05/20 13:58:53 broeker Exp $";
+
+
+int    selecting;
+unsigned int   curdispline = 0;
+
+BOOL   caseless;               /* ignore letter case when searching */
+BOOL   *change;                /* change this line */
+BOOL   changing;               /* changing text */
+char   newpat[PATLEN + 1];     /* new pattern */
+/* HBB 20040430: renamed to avoid lots of clashes with function arguments
+ * also named 'pattern' */
+char   Pattern[PATLEN + 1];    /* symbol or text pattern */
+
+/* HBB FIXME 20060419: these should almost certainly be const */
+static char    appendprompt[] = "Append to file: ";
+static char    pipeprompt[] = "Pipe to shell command: ";
+static char    readprompt[] = "Read from file: ";
+static char    toprompt[] = "To: ";
+
+
+/* Internal prototypes: */
+static BOOL    changestring(void);
+static void    clearprompt(void);
+static void    mark(unsigned int i);
+static void    scrollbar(MOUSE *p);
+
+
+/* execute the command */
+BOOL
+command(int commandc)
+{
+    char filename[PATHLEN + 1];        /* file path name */
+    MOUSE *p;                  /* mouse data */
+    int        c, i;
+    FILE *file;
+    struct cmd *curritem, *item;       /* command history */
+    char *s;
+
+    switch (commandc) {
+    case ctrl('C'):    /* toggle caseless mode */
+       if (caseless == NO) {
+           caseless = YES;
+           postmsg2("Caseless mode is now ON");
+       } else {
+           caseless = NO;
+           postmsg2("Caseless mode is now OFF");
+       }
+       egrepcaseless(caseless);        /* turn on/off -i flag */
+       return(NO);
+
+    case ctrl('R'):    /* rebuild the cross reference */
+       if (isuptodate == YES) {
+           postmsg("The -d option prevents rebuilding the symbol database");
+           return(NO);
+       }
+       exitcurses();
+       freefilelist();         /* remake the source file list */
+       makefilelist();
+       rebuild();
+       if (errorsfound == YES) {
+           errorsfound = NO;
+           askforreturn();
+       }               
+       entercurses();
+       clearmsg();             /* clear any previous message */
+       totallines = 0;
+       disprefs = 0;   
+       topline = nextline = 1;
+       selecting = 0;
+       break;
+
+#if UNIXPC
+    case ESC:  /* possible unixpc mouse selection */
+#endif
+    case ctrl('X'):    /* mouse selection */
+       if ((p = getmouseaction(DUMMYCHAR)) == NULL) {
+           return(NO); /* unknown control sequence */
+       }
+       /* if the button number is a scrollbar tag */
+       if (p->button == '0') {
+           scrollbar(p);
+           break;
+       } 
+       /* ignore a sweep */
+       if (p->x2 >= 0) {
+           return(NO);
+       }
+       /* if this is a line selection */
+       if (p->y1 < FLDLINE) {
+
+           /* find the selected line */
+           /* note: the selection is forced into range */
+           for (i = disprefs - 1; i > 0; --i) {
+               if (p->y1 >= displine[i]) {
+                   break;
+               }
+           }
+           /* display it in the file with the editor */
+           editref(i);
+       } else {        /* this is an input field selection */
+           field = p->y1 - FLDLINE;
+           /* force it into range */
+           if (field >= FIELDS) {
+               field = FIELDS - 1;
+           }
+           setfield();
+           resetcmd();
+           return(NO);
+       }
+       break;
+
+    case '\t': /* go to next input field */
+       if (disprefs) {
+           selecting = !selecting;
+           if (selecting) {
+               move(displine[curdispline], 0);
+               refresh();
+           } else {
+               atfield();
+               resetcmd();
+           }
+       }
+       return(NO);
+
+#ifdef KEY_ENTER
+    case KEY_ENTER:
+#endif
+    case '\r':
+    case '\n': /* go to reference */
+       if (selecting) {
+           editref(curdispline);
+           return(YES);
+       }
+       /* FALLTHROUGH */
+
+    case ctrl('N'):
+#ifdef KEY_DOWN
+    case KEY_DOWN:
+#endif         
+#ifdef KEY_RIGHT
+    case KEY_RIGHT:
+#endif
+       if (selecting) {
+           if ((curdispline + 1) < disprefs) {
+               move(displine[++curdispline], 0);
+               refresh();
+           }
+       } else {
+           field = (field + 1) % FIELDS;
+           setfield();
+           atfield();
+           resetcmd();
+       }
+       return(NO);
+
+    case ctrl('P'):    /* go to previous input field */
+#ifdef KEY_UP
+    case KEY_UP:
+#endif
+#ifdef KEY_LEFT                
+    case KEY_LEFT:
+#endif
+       if (selecting) {
+           if (curdispline) {
+               move(displine[--curdispline], 0);
+               refresh();
+           }
+       } else {
+           field = (field + (FIELDS - 1)) % FIELDS;
+           setfield();
+           atfield();
+           resetcmd();
+       }
+       return(NO);
+#ifdef KEY_HOME
+    case KEY_HOME:     /* go to first input field */
+       if (selecting) {
+           curdispline = 0;
+           move(REFLINE, 0);
+           refresh();
+       } else {
+           field = 0;
+           setfield();
+           atfield();
+           resetcmd();
+       }
+       return(NO);
+#endif
+
+#ifdef KEY_LL
+    case KEY_LL:       /* go to last input field */
+       if (selecting) {
+           move(displine[disprefs - 1], 0);
+           refresh();
+       } else {
+           field = FIELDS - 1;
+           setfield();
+           atfield();
+           resetcmd();
+       }
+       return(NO);
+#endif /* def(KEY_LL) */
+
+    case ' ':  /* display next page */
+    case '+':
+    case ctrl('V'):
+#ifdef KEY_NPAGE
+    case KEY_NPAGE:
+#endif
+       /* don't redisplay if there are no lines */
+       if (totallines == 0) {
+           return(NO);
+       }
+       /* note: seekline() is not used to move to the next 
+        * page because display() leaves the file pointer at
+        * the next page to optimize paging forward
+        */
+       curdispline = 0;
+       break;
+
+    case ctrl('H'):
+    case '-':  /* display previous page */
+#ifdef KEY_PPAGE
+    case KEY_PPAGE:
+#endif
+       /* don't redisplay if there are no lines */
+       if (totallines == 0) {
+           return(NO);
+       }
+
+       curdispline = 0;
+
+       /* if there are only two pages, just go to the other one */
+       if (totallines <= 2 * mdisprefs) {
+           break;
+       }
+       /* if on first page but not at beginning, go to beginning */
+       nextline -= mdisprefs;  /* already at next page */
+       if (nextline > 1 && nextline <= mdisprefs) {
+           nextline = 1;
+       } else {
+           nextline -= mdisprefs;
+           if (nextline < 1) {
+               nextline = totallines - mdisprefs + 1;
+               if (nextline < 1) {
+                   nextline = 1;
+               }
+           }
+       }
+       seekline(nextline);
+       break;
+
+    case '>':  /* write or append the lines to a file */
+       if (totallines == 0) {
+           postmsg("There are no lines to write to a file");
+       } else {        /* get the file name */
+           move(PRLINE, 0);
+           addstr("Write to file: ");
+           s = "w";
+           if ((c = mygetch()) == '>') {
+               move(PRLINE, 0);
+               addstr(appendprompt);
+               c = '\0';
+               s = "a";
+           }
+           if (c != '\r' && 
+               mygetline("", newpat,
+                         COLS - sizeof(appendprompt), c, NO) > 0
+               ) {
+               shellpath(filename, sizeof(filename), newpat);
+               if ((file = myfopen(filename, s)) == NULL) {
+                   cannotopen(filename);
+               } else {
+                   seekline(1);
+                   while ((c = getc(refsfound)) != EOF) {
+                       putc(c, file);
+                   }
+                   seekline(topline);
+                   fclose(file);
+               }
+           }
+           clearprompt();
+       }
+       return(NO);     /* return to the previous field */
+
+    case '<':  /* read lines from a file */
+       move(PRLINE, 0);
+       addstr(readprompt);
+       if (mygetline("", newpat, COLS - sizeof(readprompt),
+                     '\0', NO) > 0) {
+           clearprompt();
+           shellpath(filename, sizeof(filename), newpat);
+           if (readrefs(filename) == NO) {
+               postmsg2("Ignoring an empty file");
+               return(NO);
+           }
+           return(YES);
+       }
+       clearprompt();
+       return(NO);
+
+    case '^':  /* pipe the lines through a shell command */
+    case '|':  /* pipe the lines to a shell command */
+       if (totallines == 0) {
+           postmsg("There are no lines to pipe to a shell command");
+           return(NO);
+       }
+       /* get the shell command */
+       move(PRLINE, 0);
+       addstr(pipeprompt);
+       if (mygetline("", newpat, COLS - sizeof(pipeprompt), '\0', NO)
+           == 0) {
+           clearprompt();
+           return(NO);
+       }
+       /* if the ^ command, redirect output to a temp file */
+       if (commandc == '^') {
+           strcat(strcat(newpat, " >"), temp2);
+           /* HBB 20020708: somebody might have even
+            * their non-interactive default shells
+            * complain about clobbering
+            * redirections... --> delete before
+            * overwriting */
+           remove(temp2);
+       }
+       exitcurses();
+       if ((file = mypopen(newpat, "w")) == NULL) {
+           fprintf(stderr, "\
+cscope: cannot open pipe to shell command: %s\n", newpat);
+       } else {
+           seekline(1);
+           while ((c = getc(refsfound)) != EOF) {
+               putc(c, file);
+           }
+           seekline(topline);
+           mypclose(file);
+       }
+       if (commandc == '^') {
+           if (readrefs(temp2) == NO) {
+               postmsg("Ignoring empty output of ^ command");
+           }
+       }
+       askforreturn();
+       entercurses();
+       break;
+#if defined(KEY_RESIZE) && !defined(__DJGPP__)
+    case KEY_RESIZE:
+       exitcurses();
+       initscr();
+       entercurses();
+#if TERMINFO
+       keypad(stdscr, TRUE);   /* enable the keypad */
+#ifdef HAVE_FIXKEYPAD
+       fixkeypad();    /* fix for getch() intermittently returning garbage */
+#endif
+#endif
+#if UNIXPC
+       standend();     /* turn off reverse video */
+#endif
+       dispinit();     /* initialize display parameters */
+       setfield();     /* set the initial cursor position */
+       postmsg("");    /* clear any build progress message */
+       display();      /* display the version number and input fields */
+       break;
+#endif
+    case ctrl('L'):    /* redraw screen */
+#ifdef KEY_CLEAR
+    case KEY_CLEAR:
+#endif
+       clearmsg2();
+       clearok(curscr, TRUE);
+       wrefresh(curscr);
+       drawscrollbar(topline, bottomline);
+       return(NO);
+
+    case '!':  /* shell escape */
+       execute(shell, shell, NULL);
+       seekline(topline);
+       break;
+
+    case '?':  /* help */
+       clear();
+       help();
+       clear();
+       seekline(topline);
+       break;
+
+    case ctrl('E'):    /* edit all lines */
+       editall();
+       break;
+
+    case ctrl('A'):            /* HBB 20050428: added alt. keymapping */
+    case ctrl('Y'):    /* repeat last pattern */
+       if (*Pattern != '\0') {
+           addstr(Pattern);
+           goto repeat;
+       }
+       break;
+
+    case ctrl('B'):            /* cmd history back */
+    case ctrl('F'):            /* cmd history fwd */
+       if (selecting) {
+           selecting = 0;
+       }
+
+       curritem = currentcmd();
+       item = (commandc == ctrl('F')) ? nextcmd() : prevcmd();
+       clearmsg2();
+       if (curritem == item) { /* inform user that we're at history end */
+           postmsg2("End of input field and search pattern history");
+       }
+       if (item) {
+           field = item->field;
+           setfield();
+           atfield();
+           addstr(item->text);
+           strcpy(Pattern, item->text);
+           switch (c = mygetch()) {
+           case '\r':
+           case '\n':
+               goto repeat;
+           case ctrl('F'):
+           case ctrl('B'):
+               myungetch(c);
+               atfield();
+               clrtoeol();     /* clear current field */
+               break;
+           default:
+               myungetch(c);
+               if (mygetline(Pattern, newpat, COLS - fldcolumn - 1, '\0', caseless )) {
+                   strcpy (Pattern, newpat);
+                   resetcmd();
+               }
+               goto repeat;
+               break;
+           }
+       }
+       return(NO);
+
+    case '\\': /* next character is not a command */
+       addch('\\');    /* display the quote character */
+
+       /* get a character from the terminal */
+       if ((commandc = mygetch()) == EOF) {
+           return(NO); /* quit */
+       }
+       addstr("\b \b");        /* erase the quote character */
+       goto ispat;
+
+    case '.':
+       postmsg("The . command has been replaced by ^Y");
+       atfield();      /* move back to the input field */
+       /* FALLTHROUGH */
+    default:
+       if (selecting && !mouse) {
+           char *c;
+
+           if ((c = strchr(dispchars, commandc)))
+               editref(c - dispchars);
+
+           /* if this is the start of a pattern */
+       } else if (isprint(commandc)) {
+       ispat:
+           if (mygetline("", newpat, COLS - fldcolumn - 1,
+                         commandc, caseless) > 0) {
+               strcpy(Pattern, newpat);
+               resetcmd();     /* reset command history */
+           repeat:
+               addcmd(field, Pattern); /* add to command history */
+               if (field == CHANGE) {
+                   /* prompt for the new text */
+                   move(PRLINE, 0);
+                   addstr(toprompt);
+                   mygetline("", newpat,
+                             COLS - sizeof(toprompt),
+                             '\0', NO);
+               }
+               /* search for the pattern */
+               if (search() == YES) {
+                   curdispline = 0;
+                   ++selecting;
+
+                   switch (field) {
+                   case DEFINITION:
+                   case FILENAME:
+                       if (totallines > 1) {
+                           break;
+                       }
+                       topline = 1;
+                       editref(0);
+                       break;
+                   case CHANGE:
+                       return(changestring());
+                   }
+
+               } else if (field == FILENAME && 
+                          access(newpat, READ) == 0) {
+                   /* try to edit the file anyway */
+                   edit(newpat, "1");
+               }
+           } else {    /* no pattern--the input was erased */
+               return(NO);
+           }
+       } else {        /* control character */
+           return(NO);
+       }
+    } /* switch(commandc) */
+    return(YES);
+}
+
+/* clear the prompt line */
+
+static void
+clearprompt(void)
+{
+       move(PRLINE, 0);
+       clrtoeol();
+}
+
+/* read references from a file */
+
+BOOL
+readrefs(char *filename)
+{
+       FILE    *file;
+       int     c;
+
+       if ((file = myfopen(filename, "rb")) == NULL) {
+               cannotopen(filename);
+               return(NO);
+       }
+       if ((c = getc(file)) == EOF) {  /* if file is empty */
+               return(NO);
+       }
+       totallines = 0;
+       disprefs = 0;
+       nextline = 1;
+       if (writerefsfound() == YES) {
+               putc(c, refsfound);
+               while ((c = getc(file)) != EOF) {
+                       putc(c, refsfound);
+               }
+               fclose(file);
+               fclose(refsfound);
+               if ( (refsfound = myfopen(temp1, "rb")) == NULL) {
+                       cannotopen(temp1);
+                       return(NO);
+               }
+               countrefs();
+       }
+       return(YES);
+}
+
+/* change one text string to another */
+
+static BOOL
+changestring(void)
+{
+    char    newfile[PATHLEN + 1];   /* new file name */
+    char    oldfile[PATHLEN + 1];   /* old file name */
+    char    linenum[NUMLEN + 1];    /* file line number */
+    char    msg[MSGLEN + 1];        /* message */
+    FILE    *script;                /* shell script file */
+    BOOL    anymarked = NO;         /* any line marked */
+    MOUSE *p;                       /* mouse data */
+    int     c;
+    unsigned int i;
+    char    *s;
+
+    /* open the temporary file */
+    if ((script = myfopen(temp2, "w")) == NULL) {
+       cannotopen(temp2);
+       return(NO);
+    }
+    /* create the line change indicators */
+    change = mycalloc(totallines, sizeof(BOOL));
+    changing = YES;
+    mousemenu();
+
+    /* until the quit command is entered */
+    for (;;) {
+       /* display the current page of lines */
+       display();
+    same:
+       atchange();
+               
+       /* get a character from the terminal */
+       if ((c = mygetch()) == EOF || c == ctrl('D')) {
+           break;      /* change lines */
+       }
+       if (c == ctrl('Z')) {
+#ifdef SIGTSTP
+           kill(0, SIGTSTP);
+           goto same;
+#else
+           break;      /* change lines */
+#endif
+       }
+       /* see if the input character is a command */
+       switch (c) {
+       case ' ':       /* display next page */
+       case '+':
+       case ctrl('V'):
+#ifdef KEY_NPAGE
+       case KEY_NPAGE:
+#endif
+       case '-':       /* display previous page */
+#ifdef KEY_PPAGE
+       case KEY_PPAGE:
+#endif
+       case '!':       /* shell escape */
+       case '?':       /* help */
+           command(c);
+           break;
+
+       case ctrl('L'): /* redraw screen */
+#ifdef KEY_CLEAR
+       case KEY_CLEAR:
+#endif
+           command(c);
+           goto same;
+
+       case ESC:       /* don't change lines */
+#if UNIXPC
+           if((p = getmouseaction(DUMMYCHAR)) == NULL) {
+               goto nochange;  /* unknown escape sequence */
+           }
+           break;
+#endif
+       case ctrl('G'):
+           goto nochange;
+
+       case '*':       /* mark/unmark all displayed lines */
+           for (i = 0; topline + i < nextline; ++i) {
+               mark(i);
+           }
+           goto same;
+
+       case ctrl('A'): /* mark/unmark all lines */
+           for (i = 0; i < totallines; ++i) {
+               if (change[i] == NO) {
+                   change[i] = YES;
+               } else {
+                   change[i] = NO;
+               }
+           }
+           /* show that all have been marked */
+           seekline(totallines);
+           break;
+
+       case ctrl('X'): /* mouse selection */
+           if ((p = getmouseaction(DUMMYCHAR)) == NULL) {
+               goto same;      /* unknown control sequence */
+           }
+           /* if the button number is a scrollbar tag */
+           if (p->button == '0') {
+               scrollbar(p);
+               break;
+           }
+           /* find the selected line */
+           /* note: the selection is forced into range */
+           for (i = disprefs - 1; i > 0; --i) {
+               if (p->y1 >= displine[i]) {
+                   break;
+               }
+           }
+           mark(i);
+           goto same;
+
+       default:
+           {
+               /* if a line was selected */
+               char            *cc;
+
+               if ((cc = strchr(dispchars, c)))
+                   mark(cc - dispchars);
+
+               goto same;
+           } /* default case */
+       } /* switch(change code character) */
+    } /* for(ever) */
+
+    /* for each line containing the old text */
+    fprintf(script, "ed - <<\\!\n");
+    *oldfile = '\0';
+    seekline(1);
+    for (i = 0; 
+        fscanf(refsfound, "%" PATHLEN_STR "s%*s%" NUMLEN_STR "s%*[^\n]", newfile, linenum) == 2;
+        ++i) {
+       /* see if the line is to be changed */
+       if (change[i] == YES) {
+           anymarked = YES;
+               
+           /* if this is a new file */
+           if (strcmp(newfile, oldfile) != 0) {
+                               
+               /* make sure it can be changed */
+               if (access(newfile, WRITE) != 0) {
+                   snprintf(msg, sizeof(msg), "Cannot write to file %s", newfile);
+                   postmsg(msg);
+                   anymarked = NO;
+                   break;
+               }
+               /* if there was an old file */
+               if (*oldfile != '\0') {
+                   fprintf(script, "w\n");     /* save it */
+               }
+               /* edit the new file */
+               strcpy(oldfile, newfile);
+               fprintf(script, "e %s\n", oldfile);
+           }
+           /* output substitute command */
+           fprintf(script, "%ss/", linenum);   /* change */
+           for (s = Pattern; *s != '\0'; ++s) {
+               /* old text */
+               if (strchr("/\\[.^*", *s) != NULL) {
+                   putc('\\', script);
+               }
+               if (caseless == YES && isalpha((unsigned char)*s)) {
+                   putc('[', script);
+                   if(islower((unsigned char)*s)) {
+                       putc(toupper((unsigned char)*s), script);
+                       putc(*s, script);
+                   } else {
+                       putc(*s, script);
+                       putc(tolower((unsigned char)*s), script);
+                   }
+                   putc(']', script);
+               } else  
+                   putc(*s, script);
+           }
+           putc('/', script);                  /* to */
+           for (s = newpat; *s != '\0'; ++s) { /* new text */
+               if (strchr("/\\&", *s) != NULL) {
+                   putc('\\', script);
+               }
+               putc(*s, script);
+           }
+           fprintf(script, "/gp\n");   /* and print */
+       }
+    }
+    fprintf(script, "w\nq\n!\n");      /* write and quit */
+    fclose(script);
+
+    /* if any line was marked */
+    if (anymarked == YES) {
+               
+       /* edit the files */
+       clearprompt();
+       refresh();
+       fprintf(stderr, "Changed lines:\n\r");
+       execute("sh", "sh", temp2, NULL);
+       askforreturn();
+       seekline(1);
+    } else {
+    nochange:
+       clearprompt();
+    }
+    changing = NO;
+    mousemenu();
+    free(change);
+    return(anymarked);
+}
+
+
+/* mark/unmark this displayed line to be changed */
+static void
+mark(unsigned int i)
+{
+    unsigned int j;
+       
+    j = i + topline - 1;
+    if (j < totallines) {
+       move(displine[i], 1);
+
+       if (change[j] == NO) {
+           change[j] = YES;
+           addch('>');
+       } else {
+           change[j] = NO;
+           addch(' ');
+       }
+    }
+}
+
+
+/* scrollbar actions */
+static void
+scrollbar(MOUSE *p)
+{
+    /* reposition list if it makes sense */
+    if (totallines == 0) {
+       return;
+    }
+    switch (p->percent) {
+               
+    case 101: /* scroll down one page */
+       if (nextline + mdisprefs > totallines) {
+           nextline = totallines - mdisprefs + 1;
+       }
+       break;
+               
+    case 102: /* scroll up one page */
+       nextline = topline - mdisprefs;
+       if (nextline < 1) {
+           nextline = 1;
+       }
+       break;
+
+    case 103: /* scroll down one line */
+       nextline = topline + 1;
+       break;
+               
+    case 104: /* scroll up one line */
+       if (topline > 1) {
+           nextline = topline - 1;
+       }
+       break;
+    default:
+       nextline = p->percent * totallines / 100;
+    }
+    seekline(nextline);
+}
+
+
+/* count the references found */
+void
+countrefs(void)
+{
+    char    *subsystem;             /* OGS subsystem name */
+    char    *book;                  /* OGS book name */
+    char    file[PATHLEN + 1];      /* file name */
+    char    function[PATLEN + 1];   /* function name */
+    char    linenum[NUMLEN + 1];    /* line number */
+    int     i;
+
+    /* count the references found and find the length of the file,
+       function, and line number display fields */
+    subsystemlen = 9;  /* strlen("Subsystem") */
+    booklen = 4;               /* strlen("Book") */
+    filelen = 4;               /* strlen("File") */
+    fcnlen = 8;                /* strlen("Function") */
+    numlen = 0;
+    /* HBB NOTE 2012-04-07: it may look like we shouldn't assing tempstring here,
+     * since it's not used.  But it has to be assigned just so the return value
+     * of fscanf will actually reach 4. */
+    while (EOF != (i = fscanf(refsfound, 
+                             "%" PATHLEN_STR "s%" PATLEN_STR "s%" NUMLEN_STR "s %" TEMPSTRING_LEN_STR "[^\n]",
+                             file, function, linenum, tempstring
+                            )
+                 )
+         ) {
+       if (   (i != 4)
+           || !isgraph((unsigned char) *file)
+           || !isgraph((unsigned char) *function)
+           || !isdigit((unsigned char) *linenum)
+          ) {
+           postmsg("File does not have expected format");
+           totallines = 0;
+           disprefs = 0;
+           return;
+       }
+       if ((i = strlen(pathcomponents(file, dispcomponents))) > filelen) {
+           filelen = i;
+       }
+       if (ogs == YES) {
+           ogsnames(file, &subsystem, &book);
+           if ((i = strlen(subsystem)) > subsystemlen) {
+               subsystemlen = i;
+           }
+           if ((i = strlen(book)) > booklen) {
+               booklen = i;
+           }
+       }
+       if ((i = strlen(function)) > fcnlen) {
+           fcnlen = i;
+       }
+       if ((i = strlen(linenum)) > numlen) {
+           numlen = i;
+       }
+       ++totallines;
+    }
+    rewind(refsfound);
+
+    /* restrict the width of displayed columns */
+    /* HBB FIXME 20060419: magic number alert! */ 
+    i = (COLS - 5) / 3;
+    if (ogs == YES) {
+       i = (COLS - 7) / 5;
+    }
+    if (filelen > i && i > 4) {
+       filelen = i;
+    }
+    if (subsystemlen > i && i > 9) {
+       subsystemlen = i;
+    }
+    if (booklen > i && i > 4) {
+       booklen = i;
+    }
+    if (fcnlen > i && i > 8) {
+       fcnlen = i;
+    }
+}
diff --git a/src/compath.c b/src/compath.c
new file mode 100644 (file)
index 0000000..6726ae1
--- /dev/null
@@ -0,0 +1,213 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*
+ *     compath(pathname)
+ *
+ *     This compresses pathnames.  All strings of multiple slashes are
+ *     changed to a single slash.  All occurrences of "./" are removed.
+ *     Whenever possible, strings of "/.." are removed together with
+ *     the directory names that they follow.
+ *
+ *     WARNING: since pathname is altered by this function, it should
+ *              be located in a temporary buffer. This avoids the problem
+ *              of accidently changing strings obtained from makefiles
+ *              and stored in global structures.
+ */
+
+static char const rcsid[] = "$Id: compath.c,v 1.3 2001/07/05 14:31:00 broeker Exp $";
+
+#include "global.h"
+
+#ifndef NULL
+#define        NULL    0
+#endif
+
+char *
+compath(char *pathname)                        /*FDEF*/
+{
+       char    *nextchar;
+       char    *lastchar;
+       char    *sofar;
+       char    *pnend;
+
+       int     pnlen;
+
+               /*
+                *      do not change the path if it has no "/"
+                */
+
+       if (strchr(pathname, '/') == NULL)
+               return(pathname);
+
+               /*
+                *      find all strings consisting of more than one '/'
+                */
+
+       for (lastchar = pathname + 1; *lastchar != '\0'; lastchar++)
+               if ((*lastchar == '/') && (*(lastchar - 1) == '/'))
+               {
+
+                       /*
+                        *      find the character after the last slash
+                        */
+
+                       nextchar = lastchar;
+                       while (*++lastchar == '/')
+                       {
+                       }
+
+                       /*
+                        *      eliminate the extra slashes by copying
+                        *      everything after the slashes over the slashes
+                        */
+
+                       sofar = nextchar;
+                       while ((*nextchar++ = *lastchar++) != '\0')
+                               ;
+                       lastchar = sofar;
+               }
+
+               /*
+                *      find all strings of "./"
+                */
+
+       for (lastchar = pathname + 1; *lastchar != '\0'; lastchar++)
+               if ((*lastchar == '/') && (*(lastchar - 1) == '.') &&
+                   ((lastchar - 1 == pathname) || (*(lastchar - 2) == '/')))
+               {
+
+                       /*
+                        *      copy everything after the "./" over the "./"
+                        */
+
+                       nextchar = lastchar - 1;
+                       sofar = nextchar;
+                       while ((*nextchar++ = *++lastchar) != '\0')
+                               ;
+                       lastchar = sofar;
+               }
+
+               /*
+                *      find each occurrence of "/.."
+                */
+
+       for (lastchar = pathname + 1; *lastchar != '\0'; lastchar++)
+               if ((lastchar != pathname) && (*lastchar == '/') &&
+                   (*(lastchar + 1) == '.') && (*(lastchar + 2) == '.') &&
+                   ((*(lastchar + 3) == '/') || (*(lastchar + 3) == '\0')))
+               {
+
+                       /*
+                        *      find the directory name preceding the "/.."
+                        */
+
+                       nextchar = lastchar - 1;
+                       while ((nextchar != pathname) &&
+                           (*(nextchar - 1) != '/'))
+                               --nextchar;
+
+                       /*
+                        *      make sure the preceding directory's name
+                        *      is not "." or ".."
+                        */
+
+                       if ((*nextchar == '.') &&
+                           ((*(nextchar + 1) == '/') ||
+                            ((*(nextchar + 1) == '.') && (*(nextchar + 2) == '/'))))
+                               /* EMPTY */;
+                       else
+                       {
+
+                               /*
+                                *      prepare to eliminate either
+                                *      "dir_name/../" or "dir_name/.."
+                                */
+
+                               if (*(lastchar + 3) == '/')
+                                       lastchar += 4;
+                               else
+                                       lastchar += 3;
+
+                               /*
+                                *      copy everything after the "/.." to
+                                *      before the preceding directory name
+                                */
+
+                               sofar = nextchar - 1;
+                               while ((*nextchar++ = *lastchar++) != '\0');
+                                       
+                               lastchar = sofar;
+
+                               /*
+                                *      if the character before what was taken
+                                *      out is '/', set up to check if the
+                                *      slash is part of "/.."
+                                */
+
+                               if ((sofar + 1 != pathname) && (*sofar == '/'))
+                                       --lastchar;
+                       }
+               }
+
+       /*
+        *      if the string is more than a character long and ends
+        *      in '/', eliminate the '/'.
+        */
+
+       pnlen = strlen(pathname);
+       pnend = strchr(pathname, '\0') - 1;
+
+       if ((pnlen > 1) && (*pnend == '/'))
+       {
+               *pnend-- = '\0';
+               pnlen--;
+       }
+
+       /*
+        *      if the string has more than two characters and ends in
+        *      "/.", remove the "/.".
+        */
+
+       if ((pnlen > 2) && (*(pnend - 1) == '/') && (*pnend == '.'))
+               *--pnend = '\0';
+
+       /*
+        *      if all characters were deleted, return ".";
+        *      otherwise return pathname
+        */
+
+       if (*pathname == '\0')
+               (void) strcpy(pathname, ".");
+
+       return(pathname);
+}
diff --git a/src/constants.h b/src/constants.h
new file mode 100644 (file)
index 0000000..938dc5a
--- /dev/null
@@ -0,0 +1,137 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: constants.h,v 1.18 2012/04/07 14:12:07 broeker Exp $ */
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     preprocessor macro and constant definitions
+ */
+
+#ifndef CSCOPE_CONSTANTS_H
+#define CSCOPE_CONSTANTS_H
+
+#include "config.h"            /* Get OS defines */
+
+#define ctrl(x)        (x & 037)       /* control character macro */
+
+/* fast string equality tests (avoids most strcmp() calls) */
+#define        strequal(s1, s2)        (*(s1) == *(s2) && strcmp(s1, s2) == 0)
+#define        strnotequal(s1, s2)     (*(s1) != *(s2) || strcmp(s1, s2) != 0)
+
+/* set the mark character for searching the cross-reference file */
+#define        setmark(c)      (blockmark = c, block[blocklen] = blockmark)
+
+/* get the next character in the cross-reference */
+/* note that blockp is assumed not to be null */
+#define        getrefchar()    (*(++blockp + 1) != '\0' ? *blockp : \
+                       (read_block() != NULL ? *blockp : '\0'))
+
+/* skip the next character in the cross-reference */
+/* note that blockp is assumed not to be null and that
+   this macro will always be in a statement by itself */
+#define        skiprefchar()   if (*(++blockp + 1) == '\0') (void) read_block()
+
+#define        ESC     '\033'          /* escape character */
+#define        DEL     '\177'          /* delete character */
+#define        DUMMYCHAR       ' '     /* use space as a dummy character */
+#define        MSGLEN  ((PATLEN) + 80) /* displayed message length */
+#define        NUMLEN  10              /* line number length */
+#define        PATHLEN 250             /* file pathname length */
+#define        PATLEN  250             /* symbol pattern length */
+#define TEMPSTRING_LEN 8191     /* max strlen() of the global temp string */
+#define        REFFILE "cscope.out"    /* cross-reference output file */
+#define        NAMEFILE "cscope.files" /* default list-of-files file */
+#define        INVNAME "cscope.in.out" /* inverted index to the database */
+#define        INVPOST "cscope.po.out" /* inverted index postings */
+#define        INVNAME2 "cscope.out.in"/* follows correct naming convention */
+#define        INVPOST2 "cscope.out.po"/* follows correct naming convention */
+
+#define        STMTMAX 10000           /* maximum source statement length */
+
+#define STR2(x) #x
+#define STRINGIZE(x) STR2(x)
+#define PATLEN_STR STRINGIZE(PATLEN)
+#define PATHLEN_STR STRINGIZE(PATHLEN)
+#define NUMLEN_STR STRINGIZE(NUMLEN)
+#define TEMPSTRING_LEN_STR STRINGIZE(TEMPSTRING_LEN)
+
+/* screen lines */
+#define        FLDLINE (LINES - FIELDS - 1)    /* first input field line */
+#define        MSGLINE 0                       /* message line */
+#define        PRLINE  (LINES - 1)             /* input prompt line */
+#define REFLINE        3                       /* first displayed reference line */
+
+/* input fields (value matches field order on screen) */
+#define        SYMBOL          0
+#define DEFINITION     1
+#define        CALLEDBY        2
+#define        CALLING         3
+#define        STRING          4
+#define        CHANGE          5
+#define        REGEXP          6
+#define FILENAME       7
+#define INCLUDES       8
+#define        FIELDS          10
+
+#if (BSD || V9) && !__NetBSD__ && !__FreeBSD__
+# define TERMINFO      0       /* no terminfo curses */
+#else
+# define TERMINFO      1
+#endif
+
+
+#if !TERMINFO
+# ifndef KEY_BREAK
+#  define      KEY_BREAK       0400    /* easier to define than to add #if around the use */
+# endif
+# ifndef KEY_ENTER
+#  define      KEY_ENTER       0401
+# endif
+# ifndef KEY_BACKSPACE
+#  define      KEY_BACKSPACE   0402
+# endif
+
+# if !sun
+#  define cbreak()     crmode()                        /* name change */
+# endif
+
+# if UNIXPC
+#  define erasechar() (_tty.c_cc[VERASE])              /* equivalent */
+#  define killchar()  (_tty.c_cc[VKILL])               /* equivalent */
+# else
+#  define erasechar() (_tty.sg_erase)                  /* equivalent */
+#  define killchar()  (_tty.sg_kill)                   /* equivalent */
+# endif /* if UNIXPC */
+#endif /* if !TERMINFO */
+
+#endif /* CSCOPE_CONSTANTS_H */
diff --git a/src/crossref.c b/src/crossref.c
new file mode 100644 (file)
index 0000000..f985930
--- /dev/null
@@ -0,0 +1,492 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     build cross-reference file
+ */
+
+#include "global.h"
+
+#include "build.h"
+#include "scanner.h"
+#include "alloc.h"
+
+#include <stdlib.h>
+#include <sys/stat.h>
+
+static char const rcsid[] = "$Id: crossref.c,v 1.15 2009/08/28 14:28:27 nhorman Exp $";
+
+
+/* convert long to a string */
+#define        ltobase(value)  n = value; \
+                       s = buf + (sizeof(buf) - 1); \
+                       *s = '\0'; \
+                       digits = 1; \
+                       while (n >= BASE) { \
+                               ++digits; \
+                               i = n; \
+                               n /= BASE; \
+                               *--s = i - n * BASE + '!'; \
+                       } \
+                       *--s = n + '!';
+
+#define        SYMBOLINC       20      /* symbol list size increment */
+
+long   dboffset;               /* new database offset */
+BOOL   errorsfound;            /* prompt before clearing messages */
+long   lineoffset;             /* source line database offset */
+long   npostings;              /* number of postings */
+int    nsrcoffset;             /* number of file name database offsets */
+long   *srcoffset;             /* source file name database offsets */
+unsigned long symbols;         /* number of symbols */
+
+static char    *filename;      /* file name for warning messages */
+static long    fcnoffset;      /* function name database offset */
+static long    macrooffset;    /* macro name database offset */
+static unsigned long msymbols = SYMBOLINC; /* maximum number of symbols */
+
+struct symbol {        /* symbol data */
+    int        type;           /* type */
+    unsigned int first;                /* index of first character in text */
+    unsigned int last;         /* index of last+1 character in text */
+    unsigned int length;       /* symbol length */
+    unsigned int fcn_level;    /* function level of the symbol */
+};
+static struct symbol *symbol;
+
+static void    putcrossref(void);
+static void    savesymbol(int token, int num);
+
+void
+crossref(char *srcfile)
+{
+    unsigned int i;
+    unsigned int length;       /* symbol length */
+    unsigned int entry_no;     /* function level of the symbol */
+    int token;                  /* current token */
+    struct stat st;
+
+    if (! ((stat(srcfile, &st) == 0)
+          && S_ISREG(st.st_mode))) {
+       cannotopen(srcfile);
+       errorsfound = YES;
+       return;
+    }
+       
+    entry_no = 0;
+    /* open the source file */
+    if ((yyin = myfopen(srcfile, "r")) == NULL) {
+       cannotopen(srcfile);
+       errorsfound = YES;
+       return;
+    }
+    filename = srcfile;        /* save the file name for warning messages */
+    putfilename(srcfile);      /* output the file name */
+    dbputc('\n');
+    dbputc('\n');
+
+    /* read the source file */
+    initscanner(srcfile);
+    fcnoffset = macrooffset = 0;
+    symbols = 0;
+    if (symbol == NULL) {
+       symbol = mymalloc(msymbols * sizeof(struct symbol));
+    }
+    for (;;) {
+               
+       /* get the next token */
+       switch (token = yylex()) {
+       default:
+           /* if requested, truncate C symbols */
+           length = last - first;
+           if (trun_syms == YES && length > 8 &&
+               token != INCLUDE && token != NEWFILE) {
+               length = 8;
+               last = first + 8;
+           }
+           /* see if the token has a symbol */
+           if (length == 0) {
+               savesymbol(token, entry_no);
+               break;
+           }
+           /* update entry_no if see function entry */
+           if (token == FCNDEF) {
+               entry_no++;
+           }
+           /* see if the symbol is already in the list */
+           for (i = 0; i < symbols; ++i) {
+               if (length == symbol[i].length
+                   && strncmp(my_yytext + first,
+                              my_yytext + symbol[i].first,
+                              length) == 0 
+                   && entry_no == symbol[i].fcn_level
+                   && token == symbol[i].type
+                   ) { /* could be a::a() */
+                   break;
+               }
+           }
+           if (i == symbols) { /* if not already in list */
+               savesymbol(token, entry_no);
+           }
+           break;
+
+       case NEWLINE:   /* end of line containing symbols */
+           entry_no = 0;       /* reset entry_no for each line */
+#ifdef USING_LEX
+           --yyleng;   /* remove the newline */
+#endif
+           putcrossref();      /* output the symbols and source line */
+           lineno = myylineno; /* save the symbol line number */
+#ifndef USING_LEX
+           /* HBB 20010425: replaced yyleng-- by this chunk: */
+           if (my_yytext)
+               *my_yytext = '\0';
+           my_yyleng = 0;
+#endif
+           break;
+                       
+       case LEXERR:    /* Lexer error, abort further parsing of this file */
+       case LEXEOF:    /* end of file; last line may not have \n */
+                       
+                       /* if there were symbols, output them and the source line */
+           if (symbols > 0) {
+               putcrossref();
+           }
+           (void) fclose(yyin);        /* close the source file */
+
+           /* output the leading tab expected by the next call */
+           dbputc('\t');
+           return;
+       }
+    }
+}
+
+/* save the symbol in the list */
+
+static void
+savesymbol(int token, int num)
+{
+    /* make sure there is room for the symbol */
+    if (symbols == msymbols) {
+       msymbols += SYMBOLINC;
+       symbol = myrealloc(symbol, msymbols * sizeof(struct symbol));
+    }
+    /* save the symbol */
+    symbol[symbols].type = token;
+    symbol[symbols].first = first;
+    symbol[symbols].last = last;
+    symbol[symbols].length = last - first;
+    symbol[symbols].fcn_level = num;
+    ++symbols;
+}
+
+/* output the file name */
+
+void
+putfilename(char *srcfile)
+{
+       /* check for file system out of space */
+       /* note: dbputc is not used to avoid lint complaint */
+       if (putc(NEWFILE, newrefs) == EOF) {
+               cannotwrite(newreffile);
+               /* NOTREACHED */
+       }
+       ++dboffset;
+       if (invertedindex == YES) {
+               srcoffset[nsrcoffset++] = dboffset;
+       }
+       dbfputs(srcfile);
+       fcnoffset = macrooffset = 0;
+}
+
+/* output the symbols and source line */
+
+static void
+putcrossref(void)
+{
+    unsigned int i, j;
+    unsigned char c;
+    BOOL    blank;          /* blank indicator */
+    unsigned int symput = 0;     /* symbols output */
+    int     type;
+
+    /* output the source line */
+    lineoffset = dboffset;
+    dboffset += fprintf(newrefs, "%d ", lineno);
+#ifdef PRINTF_RETVAL_BROKEN
+    dboffset = ftell(newrefs); /* fprintf doesn't return chars written */
+#endif
+
+    /* HBB 20010425: added this line: */
+    my_yytext[my_yyleng] = '\0';
+
+    blank = NO;
+    for (i = 0; i < my_yyleng; ++i) {
+               
+       /* change a tab to a blank and compress blanks */
+       if ((c = my_yytext[i]) == ' ' || c == '\t') {
+           blank = YES;
+       } else if (symput < symbols && i == symbol[symput].first) {
+           /* look for the start of a symbol */
+
+           /* check for compressed blanks */
+           if (blank == YES) {
+               blank = NO;
+               dbputc(' ');
+           }
+           dbputc('\n');       /* symbols start on a new line */
+                       
+           /* output any symbol type */
+           if ((type = symbol[symput].type) != IDENT) {
+               dbputc('\t');
+               dbputc(type);
+           } else {
+               type = ' ';
+           }
+           /* output the symbol */
+           j = symbol[symput].last;
+           c = my_yytext[j];
+           my_yytext[j] = '\0';
+           if (invertedindex == YES) {
+               putposting(my_yytext + i, type);
+           }
+           writestring(my_yytext + i);
+           dbputc('\n');
+           my_yytext[j] = c;
+           i = j - 1;
+           ++symput;
+       } else {
+           /* HBB: try to save some time by early-out handling of 
+            * non-compressed mode */
+           if (compress == NO) {
+               if (blank == YES) {
+                   dbputc(' ');
+                   blank = NO;
+               }
+               j = i + strcspn(my_yytext+i, "\t ");
+               if (symput < symbols
+                   && j >= symbol[symput].first)
+                   j = symbol[symput].first;
+               c = my_yytext[j];
+               my_yytext[j] = '\0';
+               writestring(my_yytext + i);
+               my_yytext[j] = c;
+               i = j - 1;
+               /* finished this 'i', continue with the blank */
+               continue;
+           }
+
+           /* check for compressed blanks */
+           if (blank == YES) {
+               if (dicode2[c]) {
+                   c = DICODE_COMPRESS(' ', c);
+               } else {
+                   dbputc(' ');
+               }
+           } else if (IS_A_DICODE(c, my_yytext[i + 1])
+                      && symput < symbols
+                      && i + 1 != symbol[symput].first) {
+               /* compress digraphs */
+               c = DICODE_COMPRESS(c, my_yytext[i + 1]);
+               ++i;
+           }
+           dbputc((int) c);
+           blank = NO;
+                       
+           /* skip compressed characters */
+           if (c < ' ') {
+               ++i;
+                               
+               /* skip blanks before a preprocesor keyword */
+               /* note: don't use isspace() because \f and \v
+                  are used for keywords */
+               while ((j = my_yytext[i]) == ' ' || j == '\t') {
+                   ++i;
+               }
+               /* skip the rest of the keyword */
+               while (isalpha((unsigned char)my_yytext[i])) {
+                   ++i;
+               }
+               /* skip space after certain keywords */
+               if (keyword[c].delim != '\0') {
+                   while ((j = my_yytext[i]) == ' ' || j == '\t') {
+                       ++i;
+                   }
+               }
+               /* skip a '(' after certain keywords */
+               if (keyword[c].delim == '('
+                   && my_yytext[i] == '(') {
+                   ++i;
+               }
+               --i;    /* compensate for ++i in for() */
+           } /* if compressed char */
+       } /* else: not a symbol */
+    } /* for(i) */
+
+    /* ignore trailing blanks */
+    dbputc('\n');
+    dbputc('\n');
+
+    /* output any #define end marker */
+    /* note: must not be part of #define so putsource() doesn't discard it
+       so findcalledbysub() can find it and return */
+    if (symput < symbols && symbol[symput].type == DEFINEEND) {
+       dbputc('\t');
+       dbputc(DEFINEEND);
+       dbputc('\n');
+       dbputc('\n');   /* mark beginning of next source line */
+       macrooffset = 0;
+    }
+    symbols = 0;
+}
+
+/* HBB 20000421: new function, for avoiding memory leaks */
+/* free the cross reference symbol table */
+void
+freecrossref()
+{
+       if (symbol)
+               free(symbol);
+       symbol = NULL;
+       symbols = 0;
+}
+
+/* output the inverted index posting */
+
+void
+putposting(char *term, int type)
+{
+       long    i, n;
+       char    *s;
+       int     digits;         /* digits output */
+       long    offset;         /* function/macro database offset */
+       char    buf[11];                /* number buffer */
+
+       /* get the function or macro name offset */
+       offset = fcnoffset;
+       if (macrooffset != 0) {
+               offset = macrooffset;
+       }
+       /* then update them to avoid negative relative name offset */
+       switch (type) {
+       case DEFINE:
+               macrooffset = dboffset;
+               break;
+       case DEFINEEND:
+               macrooffset = 0;
+               return;         /* null term */
+       case FCNDEF:
+               fcnoffset = dboffset;
+               break;
+       case FCNEND:
+               fcnoffset = 0;
+               return;         /* null term */
+       }
+       /* ignore a null term caused by a enum/struct/union without a tag */
+       if (*term == '\0') {
+               return;
+       }
+       /* skip any #include secondary type char (< or ") */
+       if (type == INCLUDE) {
+               ++term;
+       }
+       /* output the posting, which should be as small as possible to reduce
+          the temp file size and sort time */
+       (void) fputs(term, postings);
+       (void) putc(' ', postings);
+
+       /* the line offset is padded so postings for the same term will sort
+          in ascending line offset order to order the references as they
+          appear withing a source file */
+       ltobase(lineoffset);
+       for (i = PRECISION - digits; i > 0; --i) {
+               (void) putc('!', postings);
+       }
+       do {
+               (void) putc(*s, postings);
+       } while (*++s != '\0');
+       
+       /* postings are also sorted by type */
+       (void) putc(type, postings);
+       
+       /* function or macro name offset */
+       if (offset > 0) {
+               (void) putc(' ', postings);
+               ltobase(offset);
+               do {
+                       (void) putc(*s, postings);
+               } while (*++s != '\0');
+       }
+       if (putc('\n', postings) == EOF) {
+               cannotwrite(temp1);
+               /* NOTREACHED */
+       }
+       ++npostings;
+}
+
+/* put the string into the new database */
+
+void
+writestring(char *s)
+{
+       unsigned char c;
+       int     i;
+       
+       if (compress == NO) {
+               /* Save some I/O overhead by using puts() instead of putc(): */
+               dbfputs(s);
+               return;
+       } 
+       /* compress digraphs */
+       for (i = 0; (c = s[i]) != '\0'; ++i) {
+               if (/* dicode1[c] && dicode2[(unsigned char) s[i + 1]] */
+                   IS_A_DICODE(c, s[i + 1])) {
+                       /* c = (0200 - 2) + dicode1[c] + dicode2[(unsigned char) s[i + 1]]; */
+                       c = DICODE_COMPRESS(c, s[i + 1]);
+                       ++i;
+               }
+               dbputc(c);      
+       }
+}
+
+/* print a warning message with the file name and line number */
+
+void
+warning(char *text)
+{
+       
+       (void) fprintf(stderr, "cscope: \"%s\", line %d: warning: %s\n", filename, 
+               myylineno, text);
+       errorsfound = YES;
+}
diff --git a/src/dir.c b/src/dir.c
new file mode 100644 (file)
index 0000000..cf9330d
--- /dev/null
+++ b/src/dir.c
@@ -0,0 +1,748 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     directory searching functions
+ */
+
+#include "global.h"
+#include "alloc.h"
+#include "vp.h"                /* vpdirs and vpndirs */
+
+#include <stdlib.h>
+#include <sys/types.h> /* needed by stat.h and dirent.h */
+#include <dirent.h>
+#include <sys/stat.h>  /* stat */
+
+static char const rcsid[] = "$Id: dir.c,v 1.32 2010/03/04 21:11:43 broeker Exp $";
+
+#define        DIRSEPS " ,:"   /* directory list separators */
+#define        DIRINC  10      /* directory list size increment */
+#define HASHMOD        2003    /* must be a prime number */
+#define        SRCINC  HASHMOD /* source file list size increment */
+                       /* largest known database had 22049 files */
+
+char   currentdir[PATHLEN + 1];/* current directory */
+char   **incdirs;              /* #include directories */
+char   **srcdirs;              /* source directories */
+char   **srcfiles;             /* source files */
+unsigned long nincdirs;                /* number of #include directories */
+unsigned long nsrcdirs;                /* number of source directories */
+unsigned long nsrcfiles;       /* number of source files */
+unsigned long msrcfiles = SRCINC;      /* maximum number of source files */
+
+static char    **incnames;     /* #include directory names without view pathing */
+static unsigned long mincdirs = DIRINC; /* maximum number of #include directories */
+static unsigned long msrcdirs; /* maximum number of source directories */
+static unsigned long nvpsrcdirs; /* number of view path source directories */
+
+static struct  listitem {      /* source file names without view pathing */
+       char    *text;
+       struct  listitem *next;
+} *srcnames[HASHMOD];
+
+/* Internal prototypes: */
+static BOOL    accessible_file(char *file);
+static BOOL    issrcfile(char *file);
+static void    addsrcdir(char *dir);
+static void    addincdir(char *name, char *path);
+static void    scan_dir(const char *dirfile, BOOL recurse);
+static void    makevpsrcdirs(void);
+
+
+/* make the view source directory list */
+
+static void
+makevpsrcdirs(void)
+{
+       int     i;
+
+       /* return if this function has already been called */
+       if (nsrcdirs > 0) {
+               return;
+       }
+       /* get the current directory name */
+       if (getcwd(currentdir, PATHLEN) == NULL) {
+               fprintf(stderr, "cscope: warning: cannot get current directory name\n");
+               strcpy(currentdir, "<unknown>");
+       }
+       /* see if there is a view path and this directory is in it */
+       vpinit(currentdir);
+       if (vpndirs > 1) {
+               nsrcdirs = vpndirs;
+       } else {
+               nsrcdirs = 1;
+       }
+       /* create the source directory list */
+       msrcdirs = nsrcdirs + DIRINC;
+       srcdirs = mymalloc(msrcdirs * sizeof(char *));
+       *srcdirs = "."; /* first source dir is always current dir */
+       for (i = 1; i < vpndirs; ++i) {
+               srcdirs[i] = vpdirs[i];
+       }
+       /* save the number of original source directories in the view path */
+       nvpsrcdirs = nsrcdirs;
+}
+
+/* add a source directory to the list for each view path source directory */
+
+void
+sourcedir(char *dirlist)
+{
+    char    path[PATHLEN + 1];
+    char    *dir;
+    unsigned int i;
+
+    makevpsrcdirs();           /* make the view source directory list */
+    dirlist = my_strdup(dirlist); /* don't change environment variable text */
+       
+    /* parse the directory list */
+    dir = strtok(dirlist, DIRSEPS);
+    while (dir != NULL) {
+       int dir_len = strlen(dir);
+
+       addsrcdir(dir);
+
+       /* if it isn't a full path name and there is a 
+          multi-directory view path */
+       if (*dirlist != '/' && vpndirs > 1) {
+                       
+           /* compute its path from higher view path source dirs */
+           for (i = 1; i < nvpsrcdirs; ++i) {
+               snprintf(path, sizeof(path), "%.*s/%s",
+                       PATHLEN - 2 - dir_len,
+                       srcdirs[i], dir);
+               addsrcdir(path);
+           }
+       }
+       dir = strtok(NULL, DIRSEPS);
+    }
+    free(dirlist);             /* HBB 20000421: avoid memory leaks */
+}
+
+/* add a source directory to the list */
+
+static void
+addsrcdir(char *dir)
+{
+       struct  stat    statstruct;
+
+       /* make sure it is a directory */
+       if (lstat(compath(dir), &statstruct) == 0 && 
+           S_ISDIR(statstruct.st_mode)) {
+
+               /* note: there already is a source directory list */
+               if (nsrcdirs == msrcdirs) {
+                       msrcdirs += DIRINC;
+                       srcdirs = myrealloc(srcdirs, msrcdirs * sizeof(char *));
+               }
+               srcdirs[nsrcdirs++] = my_strdup(dir);
+       }
+}
+
+/* HBB 20000421: new function, for avoiding leaks */
+/* free list of src directories */
+void
+freesrclist()
+{
+       if (!srcdirs)
+               return;
+       while(nsrcdirs>1)
+               free(srcdirs[--nsrcdirs]);
+       free(srcdirs);
+}
+
+/* add a #include directory to the list for each view path source directory */
+
+void
+includedir(char *dirlist)
+{
+    char    path[PATHLEN + 1];
+    char    *dir;
+    unsigned int i;
+
+    makevpsrcdirs();           /* make the view source directory list */
+    dirlist = my_strdup(dirlist); /* don't change environment variable text */
+       
+    /* parse the directory list */
+    dir = strtok(dirlist, DIRSEPS);
+    while (dir != NULL) {
+       size_t dir_len = strlen(dir);
+
+       addincdir(dir, dir);
+
+       /* if it isn't a full path name and there is a 
+          multi-directory view path */
+       if (*dirlist != '/' && vpndirs > 1) {
+                       
+           /* compute its path from higher view path source dirs */
+           for (i = 1; i < nvpsrcdirs; ++i) {
+               snprintf(path, sizeof(path), "%.*s/%s", 
+                       (int)(PATHLEN - 2 - dir_len),
+                       srcdirs[i], dir);
+               addincdir(dir, path);
+           }
+       }
+       dir = strtok(NULL, DIRSEPS);
+    }
+    free(dirlist);                     /* HBB 20000421: avoid leaks */
+}
+
+/* add a #include directory to the list */
+
+static void
+addincdir(char *name, char *path)
+{
+       struct  stat    statstruct;
+
+       /* make sure it is a directory */
+       if (lstat(compath(path), &statstruct) == 0 && 
+           S_ISDIR(statstruct.st_mode)) {
+               if (incdirs == NULL) {
+                       incdirs = mymalloc(mincdirs * sizeof(char *));
+                       incnames = mymalloc(mincdirs * sizeof(char *));
+               } else if (nincdirs == mincdirs) {
+                       mincdirs += DIRINC;
+                       incdirs = myrealloc(incdirs, 
+                               mincdirs * sizeof(char *));
+                       incnames = myrealloc(incnames, 
+                               mincdirs * sizeof(char *));
+               }
+               incdirs[nincdirs] = my_strdup(path);
+               incnames[nincdirs++] = my_strdup(name);
+       }
+}
+
+/* HBB 2000421: new function, for avoiding memory leaks */
+/* free the list of include files, if wanted */
+
+void
+freeinclist()
+{
+       if (!incdirs)   
+               return;
+       while(nincdirs>0) {
+               free(incdirs[--nincdirs]);
+               free(incnames[nincdirs]);
+       }
+       free(incdirs);
+       free(incnames);
+}
+
+/* make the source file list */
+
+void
+makefilelist(void)
+{
+    static  BOOL    firstbuild = YES;       /* first time through */
+    FILE    *names;                 /* name file pointer */
+    char    dir[PATHLEN + 1];
+    char    path[PATHLEN + 1];
+    char    line[PATHLEN * 10];
+    char    *file;
+    char    *s;
+    unsigned int i;
+
+    makevpsrcdirs();   /* make the view source directory list */
+
+    /* if -i was NOT given and there are source file arguments */
+    if (namefile == NULL && fileargc > 0) {
+               
+       /* put them in a list that can be expanded */
+       for (i = 0; i < fileargc; ++i) {
+           file = fileargv[i];
+           if (infilelist(file) == NO) {
+               if ((s = inviewpath(file)) != NULL) {
+                   addsrcfile(s);
+               } else {
+                   fprintf(stderr, "cscope: cannot find file %s\n",
+                           file);
+                   errorsfound = YES;
+               }
+           }
+       }
+       return;
+    }
+
+    /* see if a file name file exists */
+    if (namefile == NULL && vpaccess(NAMEFILE, READ) == 0) {
+       namefile = NAMEFILE;
+    }
+
+    if (namefile == NULL) {
+       /* No namefile --> make a list of all the source files
+        * in the directories */
+       for (i = 0; i < nsrcdirs; ++i) {
+           scan_dir(srcdirs[i], recurse_dir);
+       }
+       return;
+    }
+
+    /* Came here --> there is a file of source file names */
+
+    if (strcmp(namefile, "-") == 0)
+       names = stdin;
+    else if ((names = vpfopen(namefile, "r")) == NULL) {
+       cannotopen(namefile);
+       myexit(1);
+    }
+
+    /* get the names in the file */
+    while (fgets(line, 10*PATHLEN, names) != NULL) {
+       char *point_in_line = line + (strlen(line) - 1);
+       size_t length_of_name = 0;
+       int unfinished_option = 0;
+       BOOL done = NO;
+
+       /* Kill away \n left at end of fgets()'d string: */
+       if (*point_in_line == '\n')
+           *point_in_line = '\0';
+                       
+       /* Parse whitespace-terminated strings in line: */
+       point_in_line = line;
+       while (sscanf(point_in_line, "%" PATHLEN_STR "s", path) == 1) {
+           /* Have to store this length --- inviewpath() will
+            * modify path, later! */
+           length_of_name = strlen(path);
+                         
+           if (*path == '-') { /* if an option */
+               if (unfinished_option) {
+                   /* Can't have another option directly after an
+                    * -I or -p option with no name after it! */
+                   fprintf(stderr, "\
+cscope: Syntax error in namelist file %s: unfinished -I or -p option\n", 
+                           namefile);
+                   unfinished_option = 0;
+               }
+                                               
+               i = path[1];
+               switch (i) {
+               case 'c':       /* ASCII characters only in crossref */
+                   compress = NO;
+                   break;
+               case 'k':       /* ignore DFLT_INCDIR */
+                   kernelmode = YES;
+                   break;
+               case 'q':       /* quick search */
+                   invertedindex = YES;
+                   break;
+               case 'T':       /* truncate symbols to 8 characters */
+                   trun_syms = YES;
+                   break;
+               case 'I':       /* #include file directory */
+               case 'p':       /* file path components to display */
+                   s = path + 2;               /* for "-Ipath" */
+                   if (*s == '\0') {   /* if "-I path" */
+                       unfinished_option = i;
+                       break; 
+                   } 
+
+                   /* this code block used several times in here
+                    * --> make it a macro to avoid unnecessary
+                    * duplication */
+#define HANDLE_OPTION_ARGUMENT(i, s)                                   \
+                   switch (i) {                                        \
+                   case 'I':   /* #include file directory */           \
+                       if (firstbuild == YES) {                        \
+                           /* expand $ and ~ */                        \
+                           shellpath(dir, sizeof(dir), (s));           \
+                           includedir(dir);                            \
+                       }                                               \
+                       unfinished_option = 0;                          \
+                       done = YES;                                     \
+                       break;                                          \
+                   case 'p':   /* file path components to display */   \
+                       if (*(s) < '0' || *(s) > '9') {                 \
+                           fprintf(stderr,                             \
+"cscope: -p option in file %s: missing or invalid numeric value\n",    \
+                                   namefile);                          \
+                       }                                               \
+                       dispcomponents = atoi(s);                       \
+                       unfinished_option = 0;                          \
+                       done = YES;                                     \
+                       break;                                          \
+                   default:                                            \
+                       done = NO;                                      \
+                   } /* switch(i) */
+
+                   /* ... and now call it for the first time */
+                   HANDLE_OPTION_ARGUMENT(i, s)
+                       break;
+               default:
+                   fprintf(stderr, "cscope: only -I, -c, -k, -p, and -T options can be in file %s\n", 
+                           namefile);
+               } /* switch(i) */
+           } /* if('-') */
+           else if (*path == '"') {
+               /* handle quoted filenames... */
+               size_t in = 1, out = 0;
+               char *newpath = mymalloc(PATHLEN + 1);
+
+               while (in < PATHLEN && point_in_line[in] != '\0') {
+                   if (point_in_line[in] == '"') {
+                       newpath[out] = '\0';
+                       /* Tell outer loop to skip over this entire
+                        * quoted string */
+                       length_of_name = in + 1;
+                       break;  /* found end of quoted string */
+                   } else if (point_in_line[in] == '\\'
+                              && in < PATHLEN - 1
+                              && (point_in_line[in + 1]== '"'
+                                  || point_in_line[in + 1] == '\\')) {
+                       /* un-escape \" or \\ sequence */
+                       newpath[out++] = point_in_line[in + 1];
+                       in += 2;
+                   } else {
+                       newpath[out++] = point_in_line[in++];
+                   }
+               } /* while(in) */ 
+               if (in >= PATHLEN) { /* safeguard against almost-overflow */
+                   newpath[out]='\0';
+               }
+
+               /* If an -I or -p arguments was missing before,
+                * treat this name as the argument: */
+               HANDLE_OPTION_ARGUMENT(unfinished_option, newpath);
+               if (! done) {
+                   if ((s = inviewpath(newpath)) != NULL) {
+                       addsrcfile(s);
+                   } else {
+                       fprintf(stderr, "cscope: cannot find file %s\n",
+                               newpath);
+                       errorsfound = YES;
+                   }
+               }
+           } /* if(quoted name) */
+           else {
+               /* ... so this is an ordinary file name, unquoted */
+
+               /* If an -I or -p arguments was missing before,
+                * treat this name as the argument: */
+               HANDLE_OPTION_ARGUMENT(unfinished_option, path);
+               if (!done) {
+                   if ((s = inviewpath(path)) != NULL) {
+                       addsrcfile(s);
+                   } else {
+                       fprintf(stderr, "cscope: cannot find file %s\n",
+                               path);
+                       errorsfound = YES;
+                   }
+               }
+           } /* else(ordinary name) */
+
+           point_in_line += length_of_name;
+           while (isspace((unsigned char) *point_in_line))
+               point_in_line ++;
+       } /* while(sscanf(line)) */
+    } /* while(fgets(line)) */
+
+    if (names == stdin)
+       clearerr(stdin);
+    else
+       fclose(names);
+    firstbuild = NO;
+    return;
+
+}
+
+/* scan a directory (recursively?) for source files */
+static void
+scan_dir(const char *adir, BOOL recurse_dir)
+{
+       DIR     *dirfile;
+       int adir_len = strlen(adir);
+
+       /* FIXME: no guards against adir_len > PATHLEN, yet */
+
+       if ((dirfile = opendir(adir)) != NULL) {
+               struct dirent *entry;
+               char    path[PATHLEN + 1];
+               char    *file;
+
+               while ((entry = readdir(dirfile)) != NULL) { 
+                       if ((strcmp(".",entry->d_name) != 0)
+                           && (strcmp("..",entry->d_name) != 0)) {
+                               struct stat buf;
+
+                               snprintf(path, sizeof(path), "%s/%.*s", adir,
+                                       PATHLEN - 2 - adir_len,
+                                       entry->d_name);
+
+                               if (lstat(path,&buf) == 0) {
+                                       file = entry->d_name;
+                                       if (recurse_dir 
+                                            && S_ISDIR(buf.st_mode) ) {
+                                               scan_dir(path, recurse_dir);
+                                       } else if (issrcfile(path)
+                                                  && infilelist(path) == NO
+                                                  && access(path, R_OK) == 0) {
+                                               addsrcfile(path);
+                                       }
+                               }
+                       }
+               }
+               closedir(dirfile);
+       }
+        return;
+}
+
+
+/* see if this is a source file */
+static BOOL
+issrcfile(char *path)
+{
+       struct  stat    statstruct;
+       char    *file = mybasename(path);
+       char    *s = strrchr(file, '.');
+       BOOL looks_like_source = NO;
+
+       /* ensure there is some file suffix */
+       if (s == NULL || *++s == '\0')
+               return NO;
+
+       /* if an SCCS or versioned file */
+       if (file[1] == '.' && file + 2 != s) { /* 1 character prefix */
+               switch (*file) {
+               case 's':
+               case 'S':
+                       return(NO);
+               }
+       }
+
+       if (s[1] == '\0') {     /* 1 character suffix */
+               switch (*s) {
+               case 'c':
+               case 'h':
+               case 'l':
+               case 'y':
+               case 'C':
+               case 'G':
+               case 'H':
+               case 'L':
+                       looks_like_source = YES;
+               }
+       } else if ((s[2] == '\0') /* 2 char suffix */
+                  && ((s[0] == 'b' && s[1] == 'p') /* breakpoint listing */
+                      || (s[0] == 'q' 
+                          && (s[1] == 'c' || s[1] == 'h')) /* Ingres */
+                      || (s[0] == 's' && s[1] == 'd') /* SDL */
+                      || (s[0] == 'c' && s[1] == 'c') /* C++ source */
+                      || (s[0] == 'h' && s[1] == 'h'))) { /* C++ header */
+               looks_like_source = YES;
+                       
+       } else if((s[3] == '\0') /* 3 char suffix */
+                 /* C++ template source */
+                 && ((s[0] == 't' && s[1] == 'c' && s[2] == 'c' )
+                     /* C++ source: */
+                     || (s[0] == 'c' && s[1] == 'p' && s[2] == 'p' )
+                     || (s[0] == 'c' && s[1] == 'x' && s[2] == 'x' )
+                     || (s[0] == 'h' && s[1] == 'p' && s[2] == 'p' )
+                     || (s[0] == 'h' && s[1] == 'x' && s[2] == 'x' ))
+                 ) {
+               looks_like_source = YES;
+       }
+
+       if (looks_like_source != YES)
+               return NO;
+       
+       /* make sure it is a file */
+       if (lstat(path, &statstruct) == 0 && 
+           S_ISREG(statstruct.st_mode)) {
+               return(YES);
+       }
+       return NO;
+}
+
+
+/* add an include file to the source file list */
+void
+incfile(char *file, char *type)
+{
+    char    name[PATHLEN + 1];
+    char    path[PATHLEN + 1];
+    char    *s;
+    unsigned int i;
+
+    /* see if the file is already in the source file list */
+    if (infilelist(file) == YES) {
+       return;
+    }
+    /* look in current directory if it was #include "file" */
+    if (type[0] == '"' && (s = inviewpath(file)) != NULL) {
+       addsrcfile(s);
+    } else {
+       size_t file_len = strlen(file);
+
+       /* search for the file in the #include directory list */
+       for (i = 0; i < nincdirs; ++i) {
+           /* don't include the file from two directories */
+           snprintf(name, sizeof(name), "%.*s/%s",
+                   (int)(PATHLEN - 2 - file_len), incnames[i],
+                   file);
+           if (infilelist(name) == YES) {
+               break;
+           }
+           /* make sure it exists and is readable */
+           snprintf(path, sizeof(path), "%.*s/%s",
+                   (int)(PATHLEN - 2 - file_len), incdirs[i],
+                   file);
+           if (access(compath(path), READ) == 0) {
+               addsrcfile(path);
+               break;
+           }
+       }
+    }
+}
+
+
+/* see if the file is already in the list */
+BOOL
+infilelist(char *path)
+{
+    struct listitem *p;
+
+    for (p = srcnames[hash(compath(path)) % HASHMOD];
+        p != NULL;
+        p = p->next) {
+       if (strequal(path, p->text)) {
+           return(YES);
+       }
+    }
+    return(NO);
+}
+
+
+/* check if a file is readable enough to be allowed in the
+ * database */
+static BOOL
+accessible_file(char *file)
+{
+    if (access(compath(file), READ) == 0) {
+       struct stat stats;
+
+       if (lstat(file, &stats) == 0
+           && S_ISREG(stats.st_mode)) {
+           return YES;
+       }
+    }
+    return NO;
+}
+
+/* search for the file in the view path */
+char *
+inviewpath(char *file)
+{
+    static char        path[PATHLEN + 1];
+    unsigned int i;
+
+    /* look for the file */
+    if (accessible_file(file)) {
+       return(file);
+    }
+
+    /* if it isn't a full path name and there is a multi-directory
+     * view path */
+    if (*file != '/' && vpndirs > 1) {
+       int file_len = strlen(file);
+
+       /* compute its path from higher view path source dirs */
+       for (i = 1; i < nvpsrcdirs; ++i) {
+           snprintf(path, sizeof(path), "%.*s/%s",
+                   PATHLEN - 2 - file_len, srcdirs[i],
+                   file);
+           if (accessible_file(path)) {
+               return(path);
+           }
+       }
+    }
+    return(NULL);
+}
+
+/* add a source file to the list */
+
+void
+addsrcfile(char *path)
+{
+       struct  listitem *p;
+       int     i;
+       
+       /* make sure there is room for the file */
+       if (nsrcfiles == msrcfiles) {
+               msrcfiles += SRCINC;
+               srcfiles = myrealloc(srcfiles, msrcfiles * sizeof(char *));
+       }
+       /* add the file to the list */
+       srcfiles[nsrcfiles++] = my_strdup(compath(path));
+       p = mymalloc(sizeof(struct listitem));
+       p->text = my_strdup(compath(path));
+       i = hash(p->text) % HASHMOD;
+       p->next = srcnames[i];
+       srcnames[i] = p;
+}
+
+/* free the memory allocated for the source file list */
+
+void
+freefilelist(void)
+{
+       struct  listitem *p, *nextp;
+       int     i;
+
+       /* if '-d' option is used a string space block is allocated */  
+       if (isuptodate == NO) {
+               while (nsrcfiles > 0) {
+                       free (srcfiles[--nsrcfiles]);
+               }
+       } else {
+               /* for '-d' option free the string space block */
+               /* protect against empty list */
+               if (nsrcfiles > 0)
+                       free (srcfiles[0]);
+               nsrcfiles = 0;
+       }
+
+       free (srcfiles);     /* HBB 20000421: avoid leak */
+       msrcfiles = 0;
+       srcfiles=0;
+       
+       for (i = 0; i < HASHMOD; ++i) {
+               for (p = srcnames[i]; p != NULL; p = nextp) {
+                       /* HBB 20000421: avoid memory leak */
+                       free(p->text);
+                       nextp = p->next;
+                       free(p);
+               }
+               srcnames[i] = NULL;
+       }
+}
diff --git a/src/display.c b/src/display.c
new file mode 100644 (file)
index 0000000..bf5965b
--- /dev/null
@@ -0,0 +1,763 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     display functions
+ */
+
+#include "global.h"
+#include "build.h"
+#include "alloc.h"
+
+#ifdef CCS
+#include "sgs.h"       /* ESG_PKG and ESG_REL */
+#else
+#include "version.h"   /* FILEVERSION and FIXVERSION */
+#endif
+
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#include <setjmp.h>    /* jmp_buf */
+#include <stdarg.h>    /* va_list stuff */
+#include <time.h>
+#include <errno.h>
+#include <stdarg.h>
+
+#ifndef HAVE_SIGSETJMP
+# define sigsetjmp(a,b) setjmp(a)
+# define siglongjmp(a,b) longjmp(a,b)
+typedef jmp_buf sigjmp_buf;
+#endif
+
+static char const rcsid[] = "$Id: display.c,v 1.33 2012/05/20 12:24:17 broeker Exp $";
+
+int    booklen;                /* OGS book name display field length */
+int    *displine;              /* screen line of displayed reference */
+unsigned int disprefs;         /* displayed references */
+int    field;                  /* input field */
+int    filelen;                /* file name display field length */
+int    fcnlen;                 /* function name display field length */
+unsigned int mdisprefs;                /* maximum displayed references */
+unsigned int nextline;         /* next line to be shown */
+FILE   *nonglobalrefs;         /* non-global references file */
+int    numlen;                 /* line number display field length */
+unsigned int topline = 1;              /* top line of page */
+int    bottomline;             /* bottom line of page */
+long   searchcount;            /* count of files searched */
+int    subsystemlen;           /* OGS subsystem name display field length */
+unsigned int totallines;       /* total reference lines */
+unsigned fldcolumn;            /* input field column */
+
+const char     dispchars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+static int     fldline;                /* input field line */
+static sigjmp_buf      env;            /* setjmp/longjmp buffer */
+static int     lastdispline;           /* last displayed reference line */
+static char    lastmsg[MSGLEN + 1];    /* last message displayed */
+static char    helpstring[] = "Press the ? key for help";
+static char    selprompt[] = 
+       "Select lines to change (press the ? key for help): ";
+
+typedef char * (*FP)(char *);  /* pointer to function returning a character pointer */
+
+/* HBB 2000/05/05: I removed the casts to function pointer type. It is
+ * fundamentally unsafe to call a function through a pointer of a
+ * different type ('undefined behaviour' in the words of the ANSI/ISO
+ * C standard).  Instead, I made all the find...() functions adhere to
+ * the same function type, by changing argument passing a bit. */
+static struct  {               /* text of input fields */
+       char    *text1;
+       char    *text2;
+       FP      findfcn;
+} fields[FIELDS + 1] = {       /* samuel has a search that is not part of the cscope display */
+       {"Find this", "C symbol",                       findsymbol},
+       {"Find this", "global definition",              finddef},
+       {"Find", "functions called by this function",   findcalledby},
+       {"Find", "functions calling this function",     findcalling},
+       {"Find this", "text string",                    findstring},
+       {"Change this", "text string",                  findstring},
+       {"Find this", "egrep pattern",                  findregexp},
+       {"Find this", "file",                           findfile},
+       {"Find", "files #including this file",          findinclude},
+       {"Find", "assignments to this symbol",          findassign},
+       {"Find all", "function definitions",            findallfcns},   /* samuel only */
+};
+
+/* Internal prototypes: */
+static RETSIGTYPE      jumpback(int sig);
+
+/* initialize display parameters */
+
+void
+dispinit(void)
+{
+       /* calculate the maximum displayed reference lines */
+       lastdispline = FLDLINE - 3;
+       mdisprefs = lastdispline - REFLINE + 1;
+
+
+       if (mdisprefs <= 0) {
+               postfatal("%s: screen too small\n", argv0);
+               /* NOTREACHED */
+       }
+
+       if (mouse == NO && mdisprefs > strlen(dispchars))
+               mdisprefs = strlen(dispchars);
+
+       /* allocate the displayed line array */
+       displine = mymalloc(mdisprefs * sizeof(int));
+}
+
+/* display a page of the references */
+
+void
+display(void)
+{
+    char    *subsystem;             /* OGS subsystem name */
+    char    *book;                  /* OGS book name */
+    char    file[PATHLEN + 1];      /* file name */
+    char    function[PATLEN + 1];   /* function name */
+    char    linenum[NUMLEN + 1];    /* line number */
+    int     screenline;             /* screen line number */
+    int     width;                  /* source line display width */
+    int     i;
+    char    *s;
+
+    /* see if this is the initial display */
+    erase();
+    if (refsfound == NULL) {
+#if CCS
+       if (displayversion == YES) {
+           printw("cscope %s", ESG_REL);
+       }
+       else {
+           printw("cscope");
+       }
+#else
+       printw("Cscope version %d%s", FILEVERSION, FIXVERSION);
+#endif
+       move(0, COLS - (int) sizeof(helpstring));
+       addstr(helpstring);
+    } else if (totallines == 0) {
+       /* if no references were found */
+       /* redisplay the last message */
+       addstr(lastmsg);
+    } else {
+       /* display the pattern */
+       if (changing == YES) {
+           printw("Change \"%s\" to \"%s\"", Pattern, newpat);
+       } else {
+           printw("%c%s: %s", toupper((unsigned char)fields[field].text2[0]),
+                  fields[field].text2 + 1, Pattern);
+       }
+       /* display the column headings */
+       move(2, 2);
+       if (ogs == YES && field != FILENAME) {
+           printw("%-*s ", subsystemlen, "Subsystem");
+           printw("%-*s ", booklen, "Book");
+       }
+       if (dispcomponents > 0)
+           printw("%-*s ", filelen, "File");
+
+       if (field == SYMBOL || field == CALLEDBY || field == CALLING) {
+           printw("%-*s ", fcnlen, "Function");
+       }
+       if (field != FILENAME) {
+           addstr("Line");
+       }
+       addch('\n');
+
+       /* if at end of file go back to beginning */
+       if (nextline > totallines) {
+           seekline(1);
+       }
+       /* calculate the source text column */
+
+       width = COLS - numlen - 3;
+
+       if (ogs == YES) {
+           width -= subsystemlen + booklen + 2;
+       }
+       if (dispcomponents > 0) {
+           width -= filelen + 1;
+       }
+       if (field == SYMBOL || field == CALLEDBY || field == CALLING) {
+           width -= fcnlen + 1;
+       }
+
+       /* until the max references have been displayed or 
+          there is no more room */
+       topline = nextline;
+       for (disprefs = 0, screenline = REFLINE;
+            disprefs < mdisprefs && screenline <= lastdispline;
+            ++disprefs, ++screenline) {
+           /* read the reference line */
+           if (fscanf(refsfound, "%" PATHLEN_STR "s%" PATHLEN_STR "s%" NUMLEN_STR "s %" TEMPSTRING_LEN_STR "[^\n]", file, function, 
+                      linenum, tempstring) < 4) {
+               break;
+           }
+           ++nextline;
+           displine[disprefs] = screenline;
+                       
+           /* if no mouse, display the selection number */
+           if (mouse == YES) {
+               addch(' ');
+           } else {
+               printw("%c", dispchars[disprefs]);
+           }
+
+           /* display any change mark */
+           if (changing == YES && 
+               change[topline + disprefs - 1] == YES) {
+               addch('>');
+           } else {
+               addch(' ');
+           }
+
+           /* display the file name */
+           if (field == FILENAME) {
+               printw("%-*s ", filelen, file);
+           } else {
+               /* if OGS, display the subsystem and book names */
+               if (ogs == YES) {
+                   ogsnames(file, &subsystem, &book);
+                   printw("%-*.*s ", subsystemlen, subsystemlen, subsystem);
+                   printw("%-*.*s ", booklen, booklen, book);
+               }
+               /* display the requested path components */
+               if (dispcomponents > 0) {
+                   printw("%-*.*s ", filelen, filelen,
+                          pathcomponents(file, dispcomponents));
+               }
+           } /* else(field == FILENAME) */
+
+           /* display the function name */
+           if (field == SYMBOL || field == CALLEDBY || field == CALLING) {
+               printw("%-*.*s ", fcnlen, fcnlen, function);
+           }
+           if (field == FILENAME) {
+               addch('\n');    /* go to next line */
+               continue;
+           }
+
+           /* display the line number */
+           printw("%*s ", numlen, linenum);
+           /* there may be tabs in egrep output */
+           while ((s = strchr(tempstring, '\t')) != NULL) {
+               *s = ' ';
+           }
+
+           /* display the source line */
+           s = tempstring;
+           for (;;) {
+               /* see if the source line will fit */
+               if ((i = strlen(s)) > width) {
+                                       
+                   /* find the nearest blank */
+                   for (i = width; s[i] != ' ' && i > 0; --i) {
+                       ;
+                   }
+                   if (i == 0) {
+                       i = width;      /* no blank */
+                   }
+               }
+               /* print up to this point */
+               printw("%.*s", i, s);
+               s += i;
+                               
+               /* if line didn't wrap around */
+               if (i < width) {
+                   addch('\n');        /* go to next line */
+               }
+               /* skip blanks */
+               while (*s == ' ') {
+                   ++s;
+               }
+               /* see if there is more text */
+               if (*s == '\0') {
+                   break;
+               }
+               /* if the source line is too long */
+               if (++screenline > lastdispline) {
+
+                   /* if this is the first displayed line,
+                      display what will fit on the screen */
+                   if (topline == nextline -1) {
+                       disprefs++;
+                       /* break out of two loops */
+                       goto endrefs;
+                   }
+                                       
+                   /* erase the reference */
+                   while (--screenline >= displine[disprefs]) {
+                       move(screenline, 0);
+                       clrtoeol();
+                   }
+                   ++screenline;
+                                        
+                   /* go back to the beginning of this reference */
+                   --nextline;
+                   seekline(nextline);
+                   goto endrefs;
+               }
+               /* indent the continued source line */
+               move(screenline, COLS - width);
+           } /* for(ever) */
+       } /* for(reference output lines) */
+    endrefs:
+       /* position the cursor for the message */
+       i = FLDLINE - 1;
+       if (screenline < i) {
+           addch('\n');
+       }
+       else {
+           move(i, 0);
+       }
+       /* check for more references */
+       i = totallines - nextline + 1;
+       bottomline = nextline;
+       if (i > 0) {
+           printw("* Lines %d-%d of %d, %d more - press the space bar to display more *", topline, bottomline, totallines, i);
+       }
+       /* if this is the last page of references */
+       else if (topline > 1 && nextline > totallines) {
+           addstr("* Press the space bar to display the first lines again *");
+       }
+    }
+    /* display the input fields */
+    move(FLDLINE, 0);
+    for (i = 0; i < FIELDS; ++i) {
+       printw("%s %s:\n", fields[i].text1, fields[i].text2);
+    }
+    /* display any prompt */
+    if (changing == YES) {
+       move(PRLINE, 0);
+       addstr(selprompt);
+    }
+    drawscrollbar(topline, nextline);  /* display the scrollbar */
+    refresh();
+}
+
+/* set the cursor position for the field */
+void
+setfield(void)
+{
+       fldline = FLDLINE + field;
+       fldcolumn = strlen(fields[field].text1) + strlen(fields[field].text2) + 3;
+}
+
+/* move to the current input field */
+
+void
+atfield(void)
+{
+       move(fldline, fldcolumn);
+}
+
+/* move to the changing lines prompt */
+
+void
+atchange(void)
+{
+       move(PRLINE, (int) sizeof(selprompt) - 1);
+}
+
+/* search for the symbol or text pattern */
+
+/*ARGSUSED*/
+static RETSIGTYPE
+jumpback(int sig)
+{
+       /* HBB NEW 20031008: try whether reinstating signal handler
+        * helps... */
+       signal(sig, jumpback);
+       siglongjmp(env, 1);
+}
+
+BOOL
+search(void)
+{
+       char    *findresult = NULL;     /* find function output */
+       BOOL    funcexist = YES;                /* find "function" error */
+       FINDINIT rc = NOERROR;          /* findinit return code */
+       sighandler_t savesig;           /* old value of signal */
+       FP      f;                      /* searching function */
+       int     c;
+       
+       /* open the references found file for writing */
+       if (writerefsfound() == NO) {
+               return(NO);
+       }
+       /* find the pattern - stop on an interrupt */
+       if (linemode == NO) {
+               postmsg("Searching");
+       }
+       searchcount = 0;
+       savesig = signal(SIGINT, jumpback);
+       if (sigsetjmp(env, 1) == 0) {
+               f = fields[field].findfcn;
+               if (f == findregexp || f == findstring) {
+                       findresult = (*f)(Pattern);
+               } else {
+                       if ((nonglobalrefs = myfopen(temp2, "wb")) == NULL) {
+                               cannotopen(temp2);
+                               return(NO);
+                       }
+                       if ((rc = findinit(Pattern)) == NOERROR) {
+                               (void) dbseek(0L); /* read the first block */
+                               findresult = (*f)(Pattern);
+                               if (f == findcalledby) 
+                                       funcexist = (*findresult == 'y');
+                               findcleanup();
+
+                               /* append the non-global references */
+                               (void) fclose(nonglobalrefs);
+                               if ((nonglobalrefs = myfopen(temp2, "rb"))
+                                    == NULL) {
+                                       cannotopen(temp2);
+                                       return(NO);
+                               }
+                               while ((c = getc(nonglobalrefs)) != EOF) {
+                                       (void) putc(c, refsfound);
+                               }
+                       }
+                       (void) fclose(nonglobalrefs);
+               }
+       }
+       signal(SIGINT, savesig);
+
+       /* rewind the cross-reference file */
+       (void) lseek(symrefs, (long) 0, 0);
+       
+       /* reopen the references found file for reading */
+       (void) fclose(refsfound);
+       if ((refsfound = myfopen(temp1, "rb")) == NULL) {
+               cannotopen(temp1);
+               return(NO);
+       }
+       nextline = 1;
+       totallines = 0;
+       disprefs = 0;
+       
+       /* see if it is empty */
+       if ((c = getc(refsfound)) == EOF) {
+               if (findresult != NULL) {
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Egrep %s in this pattern: %s", 
+                                      findresult, Pattern);
+               } else if (rc == NOTSYMBOL) {
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "This is not a C symbol: %s", 
+                                      Pattern);
+               } else if (rc == REGCMPERROR) {
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Error in this regcomp(3) regular expression: %s", 
+                                      Pattern);
+                       
+               } else if (funcexist == NO) {
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Function definition does not exist: %s", 
+                                      Pattern);
+               } else {
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Could not find the %s: %s", 
+                                      fields[field].text2, Pattern);
+               }
+               return(NO);
+       }
+       /* put back the character read */
+       (void) ungetc(c, refsfound);
+
+       /* HBB 20041027: this used to hold a copy of the code of 
+        * countrefs(), but with the crucial display width adjustments
+        * missing.  Just call the real thing instead! */
+       countrefs();
+       return(YES);
+}
+
+/* display search progress with default custom format */
+
+void
+progress(char *what, long current, long max)
+{
+       static  long    start;
+       long    now;
+       char    msg[MSGLEN + 1];
+       int     i;
+
+       /* save the start time */
+       if (searchcount == 0) {
+               start = time(NULL);
+       }
+       if ((now = time(NULL)) - start >= 1)
+       {
+               if (linemode == NO)
+               {
+                       move(MSGLINE, 0);
+                       clrtoeol();
+                       addstr(what);
+                       snprintf(msg, sizeof(msg), "%ld", current);
+                       move(MSGLINE, (COLS / 2) - (strlen(msg) / 2));
+                       addstr(msg);
+                       snprintf(msg, sizeof(msg), "%ld", max);
+                       move(MSGLINE, COLS - strlen(msg));
+                       addstr(msg);
+                       refresh();
+               }
+               else if (verbosemode == YES)
+               {
+                       snprintf(msg, sizeof(msg), "> %s %ld of %ld", what, current, max);
+               }
+
+               start = now;
+               if ((linemode == NO) && (incurses == YES))
+               {
+                       move(MSGLINE, 0);
+                       i = (float)COLS * (float)current / (float)max;
+
+                       standout();
+                       for (; i > 0; i--)
+                               addch(inch());
+                       standend();
+                       refresh();
+               }
+               else
+                       if (linemode == NO || verbosemode == YES)
+                               postmsg(msg);
+       }
+       ++searchcount;
+}
+
+/* print error message on system call failure */
+
+void
+myperror(char *text) 
+{
+       char    msg[MSGLEN + 1];        /* message */
+       char    *s;
+
+       s = "Unknown error";
+#ifdef HAVE_STRERROR
+        s = strerror(errno);
+#else
+       if (errno < sys_nerr) {
+               s = sys_errlist[errno];
+       }
+#endif
+       (void) snprintf(msg, sizeof(msg), "%s: %s", text, s);
+       postmsg(msg);
+}
+
+/* postmsg clears the message line and prints the message */
+
+/* VARARGS */
+void
+postmsg(char *msg) 
+{
+       if (linemode == YES || incurses == NO) {
+               (void) printf("%s\n", msg);
+               fflush(stdout);
+       }
+       else {
+               clearmsg();
+               addstr(msg);
+               refresh();
+       }
+       (void) strncpy(lastmsg, msg, sizeof(lastmsg) - 1);
+}
+
+/* clearmsg clears the first message line */
+
+void
+clearmsg(void)
+{
+       if (linemode == NO) {
+               move(MSGLINE, 0);
+               clrtoeol();
+       }
+}
+
+/* clearmsg2 clears the second message line */
+
+void
+clearmsg2(void)
+{
+       if (linemode == NO) {
+               move(MSGLINE + 1, 0);
+               clrtoeol();
+       }
+}
+
+/* postmsg2 clears the second message line and prints the message */
+
+void
+postmsg2(char *msg) 
+{
+       if (linemode == YES) {
+               (void) printf("%s\n", msg);
+       }
+       else {
+               clearmsg2();
+               addstr(msg);
+               refresh();
+       }
+}
+
+/* display an error mesg - stdout or on second msg line */
+void
+posterr(char *msg, ...) 
+{
+    va_list ap;
+    char errbuf[MSGLEN];
+    
+    va_start(ap, msg);
+    if (linemode == YES || incurses == NO)
+    {
+        (void) vfprintf(stderr, msg, ap); 
+       (void) fputc('\n', stderr);
+    } else {
+        vsnprintf(errbuf, sizeof(errbuf), msg, ap);
+        postmsg2(errbuf); 
+    }
+}
+
+/* display a fatal error mesg -- stderr *after* shutting down curses */
+void
+postfatal(const char *msg, ...)
+{
+       va_list ap;
+       char errbuf[MSGLEN];
+
+       va_start(ap, msg);
+       vsnprintf(errbuf, sizeof(errbuf), msg, ap);
+       /* restore the terminal to its original mode */
+       if (incurses == YES) {
+               exitcurses();
+       }
+
+       /* display fatal error messages */
+       fprintf(stderr,"%s",errbuf);
+
+       /* shut down */
+       myexit(1);
+}
+
+\f/* position references found file at specified line */
+
+void
+seekline(unsigned int line) 
+{
+       int     c;
+
+       /* verify that there is a references found file */
+       if (refsfound == NULL) {
+               return;
+       }
+       /* go to the beginning of the file */
+       rewind(refsfound);
+       
+       /* find the requested line */
+       nextline = 1;
+       while (nextline < line && (c = getc(refsfound)) != EOF) {
+               if (c == '\n') {
+                       nextline++;
+               }
+       }
+}
+
+/* get the OGS subsystem and book names */
+
+void
+ogsnames(char *file, char **subsystem, char **book)
+{
+       static  char    buf[PATHLEN + 1];
+       char    *s, *slash;
+
+       *subsystem = *book = "";
+       (void) strcpy(buf,file);
+       s = buf;
+       if (*s == '/') {
+               ++s;
+       }
+       while ((slash = strchr(s, '/')) != NULL) {
+               *slash = '\0';
+               if ((int)strlen(s) >= 3 && strncmp(slash - 3, ".ss", 3) == 0) {
+                       *subsystem = s;
+                       s = slash + 1;
+                       if ((slash = strchr(s, '/')) != NULL) {
+                               *book = s;
+                               *slash = '\0';
+                       }
+                       break;
+               }
+               s = slash + 1;
+       }
+}
+
+/* get the requested path components */
+
+char *
+pathcomponents(char *path, int components)
+{
+       int     i;
+       char    *s;
+       
+       s = path + strlen(path) - 1;
+       for (i = 0; i < components; ++i) {
+               while (s > path && *--s != '/') {
+                       ;
+               }
+       }
+       if (s > path && *s == '/') {
+               ++s;
+       }
+       return(s);
+}
+
+/* open the references found file for writing */
+
+BOOL
+writerefsfound(void)
+{
+       if (refsfound == NULL) {
+               if ((refsfound = myfopen(temp1, "wb")) == NULL) {
+                       cannotopen(temp1);
+                       return(NO);
+               }
+       } else {
+               (void) fclose(refsfound);
+               if ( (refsfound = myfopen(temp1, "wb")) == NULL) {
+                       postmsg("Cannot reopen temporary file");
+                       return(NO);
+               }
+       }
+       return(YES);
+}
diff --git a/src/edit.c b/src/edit.c
new file mode 100644 (file)
index 0000000..0f4edec
--- /dev/null
@@ -0,0 +1,139 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     file editing functions
+ */
+
+#include "global.h"
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+
+static char const rcsid[] = "$Id: edit.c,v 1.7 2009/04/10 13:39:23 broeker Exp $";
+
+/* edit this displayed reference */
+
+void
+editref(int i)
+{
+       char    file[PATHLEN + 1];      /* file name */
+       char    linenum[NUMLEN + 1];    /* line number */
+
+       /* verify that there is a references found file */
+       if (refsfound == NULL) {
+               return;
+       }
+       /* get the selected line */
+       seekline(i + topline);
+       
+       /* get the file name and line number */
+       if (fscanf(refsfound, "%" PATHLEN_STR "s%*s%" NUMLEN_STR "s", file, linenum) == 2) {
+               edit(file, linenum);    /* edit it */
+       }
+       seekline(topline);      /* restore the line pointer */
+}
+
+/* edit all references */
+
+void
+editall(void)
+{
+       char    file[PATHLEN + 1];      /* file name */
+       char    linenum[NUMLEN + 1];    /* line number */
+       int     c;
+
+       /* verify that there is a references found file */
+       if (refsfound == NULL) {
+               return;
+       }
+       /* get the first line */
+       seekline(1);
+       
+       /* get each file name and line number */
+       while (fscanf(refsfound, "%" PATHLEN_STR "s%*s%" NUMLEN_STR "s%*[^\n]", file, linenum) == 2) {
+               edit(file, linenum);    /* edit it */
+               if (editallprompt == YES) {
+                       addstr("Type ^D to stop editing all lines, or any other character to continue: ");
+                       if ((c = mygetch()) == EOF || c == ctrl('D') || c == ctrl('Z')) {
+                               break;
+                       }
+               }
+       }
+       seekline(topline);
+}
+       
+/* call the editor */
+
+void
+edit(char *file, char *linenum)
+{
+       char    msg[MSGLEN + 1];        /* message */
+       char    plusnum[NUMLEN + 20];   /* line number option: allow space for wordy line# flag */
+       char    *s;
+
+       file = filepath(file);
+       (void) snprintf(msg, sizeof(msg), "%s +%s %s", mybasename(editor), linenum, file);
+       postmsg(msg);
+       (void) snprintf(plusnum, sizeof(plusnum), lineflag, linenum);
+       /* if this is the more or page commands */
+       if (strcmp(s = mybasename(editor), "more") == 0 || strcmp(s, "page") == 0) {
+               
+               /* get it to pause after displaying a file smaller than the screen
+                  length */
+               (void) execute(editor, editor, plusnum, file, "/dev/null", NULL);
+       }
+       else if (lineflagafterfile) {
+               (void) execute(editor, editor, file, plusnum, NULL);
+       }
+       else {
+               (void) execute(editor, editor, plusnum, file, NULL);
+       }
+       clear();        /* redisplay screen */
+}
+
+/* if requested, prepend a path to a relative file name */
+
+char *
+filepath(char *file)
+{
+       static  char    path[PATHLEN + 1];
+       
+       if (prependpath != NULL && *file != '/') {
+               (void) snprintf(path, sizeof(path), "%s/%s", prependpath, file);
+               file = path;
+       }
+       return(file);
+}
diff --git a/src/egrep.c b/src/egrep.c
new file mode 100644 (file)
index 0000000..8ccf872
--- /dev/null
@@ -0,0 +1,2318 @@
+/* A Bison parser, made by GNU Bison 2.4.2.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
+   Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.2"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 1 "egrep.y"
+
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: egrep.y,v 1.11 2006/04/21 10:45:48 broeker Exp $ */
+
+/*
+ * egrep -- fine lines containing a regular expression
+ */
+
+/* Line 189 of yacc.c  */
+#line 47 "egrep.y"
+
+#include "global.h"
+#include <ctype.h>
+#include <stdio.h>
+
+#include <setjmp.h>    /* jmp_buf */
+
+#define nextch()       (*input++)
+
+#define MAXLIN 350
+#define MAXPOS 4000
+#define NCHARS 256
+#define NSTATES 128
+#define FINAL -1
+static char gotofn[NSTATES][NCHARS];
+static int state[NSTATES];
+static char out[NSTATES];
+static unsigned int line;
+static int name[MAXLIN];
+static unsigned int left[MAXLIN];
+static unsigned int right[MAXLIN];
+static unsigned int parent[MAXLIN];
+static int foll[MAXLIN];
+static int positions[MAXPOS];
+static char chars[MAXLIN];
+static int nxtpos;
+static int nxtchar;
+static int tmpstat[MAXLIN];
+static int initstat[MAXLIN];
+static int xstate;
+static int count;
+static int icount;
+static char *input;
+static long lnum;
+static int iflag;
+static jmp_buf env;    /* setjmp/longjmp buffer */
+static char *message;  /* error message */
+
+/* Internal prototypes: */
+static void cfoll(int v);
+static void cgotofn(void);
+static int cstate(int v);
+static int member(int symb, int set, int torf);
+static int notin(int n);
+static void synerror(void);
+static void overflo(void);
+static void add(int *array, int n);
+static void follow(unsigned int v);
+static int unary(int x, int d);
+static int node(int x, int l, int r);
+static unsigned int cclenter(int x);
+static unsigned int enter(int x);
+
+static int yylex(void);
+static int yyerror(char *);
+
+
+/* Line 189 of yacc.c  */
+#line 171 "egrep.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     CHAR = 258,
+     DOT = 259,
+     CCL = 260,
+     NCCL = 261,
+     OR = 262,
+     CAT = 263,
+     STAR = 264,
+     PLUS = 265,
+     QUEST = 266
+   };
+#endif
+/* Tokens.  */
+#define CHAR 258
+#define DOT 259
+#define CCL 260
+#define NCCL 261
+#define OR 262
+#define CAT 263
+#define STAR 264
+#define PLUS 265
+#define QUEST 266
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 235 "egrep.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  6
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   108
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  14
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  5
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  18
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  25
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   266
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      12,    13,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     8,    13,    17,    21,    22,    24,
+      26,    28,    30,    34,    37,    40,    43,    46,    50
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      15,     0,    -1,    16,    -1,    17,    18,    -1,     7,    17,
+      18,     7,    -1,     7,    17,    18,    -1,    17,    18,     7,
+      -1,    -1,     3,    -1,     4,    -1,     5,    -1,     6,    -1,
+      18,     7,    18,    -1,    18,    18,    -1,    18,     9,    -1,
+      18,    10,    -1,    18,    11,    -1,    12,    18,    13,    -1,
+       1,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,   105,   105,   110,   112,   114,   116,   120,   123,   125,
+     127,   129,   133,   135,   137,   139,   141,   143,   145
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "CHAR", "DOT", "CCL", "NCCL", "OR",
+  "CAT", "STAR", "PLUS", "QUEST", "'('", "')'", "$accept", "s", "t", "b",
+  "r", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,    40,    41
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    14,    15,    16,    16,    16,    16,    17,    18,    18,
+      18,    18,    18,    18,    18,    18,    18,    18,    18
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     2,     4,     3,     3,     0,     1,     1,
+       1,     1,     3,     2,     2,     2,     2,     3,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       7,     7,     0,     2,     0,     0,     1,    18,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,    14,    15,    16,
+       0,     0,     0,    17,     0
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     2,     3,     4,    20
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -5
+static const yytype_int8 yypact[] =
+{
+       2,    -5,     3,    -5,     1,     1,    -5,    -5,    -5,    -5,
+      -5,    -5,     1,    47,    60,    72,    86,    -5,    -5,    -5,
+      19,    96,     1,    -5,    33
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+      -5,    -5,    -5,     9,    -4
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -14
+static const yytype_int8 yytable[] =
+{
+      13,    14,     7,     6,     8,     9,    10,    11,    15,     1,
+       5,     0,    24,    12,     0,     0,     0,    24,    24,   -13,
+       7,     0,   -13,   -13,   -13,   -13,   -13,     0,    17,    18,
+      19,   -13,   -13,   -12,     7,     0,     8,     9,    10,    11,
+     -12,     0,    17,    18,    19,    12,   -12,    -3,     7,     0,
+       8,     9,    10,    11,    16,     0,    17,    18,    19,    12,
+      -5,     7,     0,     8,     9,    10,    11,    21,     0,    17,
+      18,    19,    12,     7,     0,     8,     9,    10,    11,    22,
+       0,    17,    18,    19,    12,    23,    -6,     7,     0,     8,
+       9,    10,    11,     0,     0,     0,    -4,     7,    12,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,    12
+};
+
+static const yytype_int8 yycheck[] =
+{
+       4,     5,     1,     0,     3,     4,     5,     6,    12,     7,
+       1,    -1,    16,    12,    -1,    -1,    -1,    21,    22,     0,
+       1,    -1,     3,     4,     5,     6,     7,    -1,     9,    10,
+      11,    12,    13,     0,     1,    -1,     3,     4,     5,     6,
+       7,    -1,     9,    10,    11,    12,    13,     0,     1,    -1,
+       3,     4,     5,     6,     7,    -1,     9,    10,    11,    12,
+       0,     1,    -1,     3,     4,     5,     6,     7,    -1,     9,
+      10,    11,    12,     1,    -1,     3,     4,     5,     6,     7,
+      -1,     9,    10,    11,    12,    13,     0,     1,    -1,     3,
+       4,     5,     6,    -1,    -1,    -1,     0,     1,    12,     3,
+       4,     5,     6,    -1,    -1,    -1,    -1,    -1,    12
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     7,    15,    16,    17,    17,     0,     1,     3,     4,
+       5,     6,    12,    18,    18,    18,     7,     9,    10,    11,
+      18,     7,     7,    13,    18
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL         goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+/* Line 1464 of yacc.c  */
+#line 106 "egrep.y"
+    { unary(FINAL, (yyvsp[(1) - (1)]));
+                 line--;
+               }
+    break;
+
+  case 3:
+
+/* Line 1464 of yacc.c  */
+#line 111 "egrep.y"
+    { (yyval) = node(CAT, (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); }
+    break;
+
+  case 4:
+
+/* Line 1464 of yacc.c  */
+#line 113 "egrep.y"
+    { (yyval) = node(CAT, (yyvsp[(2) - (4)]), (yyvsp[(3) - (4)])); }
+    break;
+
+  case 5:
+
+/* Line 1464 of yacc.c  */
+#line 115 "egrep.y"
+    { (yyval) = node(CAT, (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)])); }
+    break;
+
+  case 6:
+
+/* Line 1464 of yacc.c  */
+#line 117 "egrep.y"
+    { (yyval) = node(CAT, (yyvsp[(1) - (3)]), (yyvsp[(2) - (3)])); }
+    break;
+
+  case 7:
+
+/* Line 1464 of yacc.c  */
+#line 120 "egrep.y"
+    { (yyval) = enter(DOT);
+                  (yyval) = unary(STAR, (yyval)); }
+    break;
+
+  case 8:
+
+/* Line 1464 of yacc.c  */
+#line 124 "egrep.y"
+    { (yyval) = enter((yyvsp[(1) - (1)])); }
+    break;
+
+  case 9:
+
+/* Line 1464 of yacc.c  */
+#line 126 "egrep.y"
+    { (yyval) = enter(DOT); }
+    break;
+
+  case 10:
+
+/* Line 1464 of yacc.c  */
+#line 128 "egrep.y"
+    { (yyval) = cclenter(CCL); }
+    break;
+
+  case 11:
+
+/* Line 1464 of yacc.c  */
+#line 130 "egrep.y"
+    { (yyval) = cclenter(NCCL); }
+    break;
+
+  case 12:
+
+/* Line 1464 of yacc.c  */
+#line 134 "egrep.y"
+    { (yyval) = node(OR, (yyvsp[(1) - (3)]), (yyvsp[(3) - (3)])); }
+    break;
+
+  case 13:
+
+/* Line 1464 of yacc.c  */
+#line 136 "egrep.y"
+    { (yyval) = node(CAT, (yyvsp[(1) - (2)]), (yyvsp[(2) - (2)])); }
+    break;
+
+  case 14:
+
+/* Line 1464 of yacc.c  */
+#line 138 "egrep.y"
+    { (yyval) = unary(STAR, (yyvsp[(1) - (2)])); }
+    break;
+
+  case 15:
+
+/* Line 1464 of yacc.c  */
+#line 140 "egrep.y"
+    { (yyval) = unary(PLUS, (yyvsp[(1) - (2)])); }
+    break;
+
+  case 16:
+
+/* Line 1464 of yacc.c  */
+#line 142 "egrep.y"
+    { (yyval) = unary(QUEST, (yyvsp[(1) - (2)])); }
+    break;
+
+  case 17:
+
+/* Line 1464 of yacc.c  */
+#line 144 "egrep.y"
+    { (yyval) = (yyvsp[(2) - (3)]); }
+    break;
+
+
+
+/* Line 1464 of yacc.c  */
+#line 1574 "egrep.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+/* Line 1684 of yacc.c  */
+#line 148 "egrep.y"
+
+static int
+yyerror(char *s)
+{
+       message = s;
+       longjmp(env, 1);
+       return 1;               /* silence a warning */
+}
+
+static int
+yylex(void)
+{
+    int cclcnt, x;
+    char c, d;
+
+    switch(c = nextch()) {
+    case '|':
+       return (OR);
+    case '*':
+       return (STAR);
+    case '+':
+       return (PLUS);
+    case '?':
+       return (QUEST);
+    case '(':
+       return (c);
+    case ')':
+       return (c);
+    case '.':
+       return (DOT);
+    case '\0':
+       return (0);
+    case '\n':
+       return (OR);
+    case '[': 
+       x = CCL;
+       cclcnt = 0;
+       count = nxtchar++;
+       if ((c = nextch()) == '^') {
+           x = NCCL;
+           c = nextch();
+       }
+       do {
+           if (c == '\0')
+               synerror();
+           if (c == '-'
+               && cclcnt > 0
+               && chars[nxtchar-1] != 0) {
+               if ((d = nextch()) != 0) {
+                   c = chars[nxtchar-1];
+                   while ((unsigned int)c < (unsigned int)d) {
+                       if (nxtchar >= MAXLIN)
+                           overflo();
+                       chars[nxtchar++] = ++c;
+                       cclcnt++;
+                   }
+                   continue;
+               } /* if() */
+           } /* if() */
+           if (nxtchar >= MAXLIN)
+               overflo();
+           chars[nxtchar++] = c;
+           cclcnt++;
+       } while ((c = nextch()) != ']');
+       chars[count] = cclcnt;
+       return (x);
+    case '\\':
+       if ((c = nextch()) == '\0')
+           synerror();
+       /* not reached */
+    case '$':
+    case '^':
+       c = '\n';
+       /* fall through */
+    default:
+       yylval = c;
+       return (CHAR);
+    }
+}
+
+static void
+synerror(void)
+{
+    yyerror("Syntax error");
+}
+
+static unsigned int
+enter(int x)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = 0;
+    right[line] = 0;
+    return(line++);
+}
+
+static unsigned int
+cclenter(int x)
+{
+    unsigned int linno;
+
+    linno = enter(x);
+    right[linno] = count;
+    return (linno);
+}
+
+static int
+node(int x, int l, int r)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = l;
+    right[line] = r;
+    parent[l] = line;
+    parent[r] = line;
+    return(line++);
+}
+
+static int
+unary(int x, int d)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = d;
+    right[line] = 0;
+    parent[d] = line;
+    return(line++);
+}
+
+static void
+overflo(void)
+{
+    yyerror("internal table overflow");
+}
+
+static void
+cfoll(int v)
+{
+    unsigned int i;
+
+    if (left[v] == 0) {
+       count = 0;
+       for (i = 1; i <= line; i++) 
+           tmpstat[i] = 0;
+       follow(v);
+       add(foll, v);
+    } else if (right[v] == 0)
+       cfoll(left[v]); 
+    else {
+       cfoll(left[v]);
+       cfoll(right[v]);
+    }
+}
+
+static void
+cgotofn(void)
+{
+    unsigned int i, n, s;
+    int c, k;
+    char symbol[NCHARS];
+    unsigned int j, l, pc, pos;
+    unsigned int nc;
+    int curpos;
+    unsigned int num, number, newpos;
+
+    count = 0;
+    for (n=3; n<=line; n++)
+       tmpstat[n] = 0;
+    if (cstate(line-1)==0) {
+       tmpstat[line] = 1;
+       count++;
+       out[0] = 1;
+    }
+    for (n=3; n<=line; n++)
+       initstat[n] = tmpstat[n];
+    count--;           /*leave out position 1 */
+    icount = count;
+    tmpstat[1] = 0;
+    add(state, 0);
+    n = 0;
+    for (s = 0; s <= n; s++)  {
+       if (out[s] == 1)
+           continue;
+       for (i = 0; i < NCHARS; i++)
+           symbol[i] = 0;
+       num = positions[state[s]];
+       count = icount;
+       for (i = 3; i <= line; i++)
+           tmpstat[i] = initstat[i];
+       pos = state[s] + 1;
+       for (i = 0; i < num; i++) {
+           curpos = positions[pos];
+           if ((c = name[curpos]) >= 0) {
+               if (c < NCHARS) {
+                   symbol[c] = 1;
+               } else if (c == DOT) {
+                   for (k = 0; k < NCHARS; k++)
+                       if (k != '\n')
+                           symbol[k] = 1;
+               } else if (c == CCL) {
+                   nc = chars[right[curpos]];
+                   pc = right[curpos] + 1;
+                   for (j = 0; j < nc; j++)
+                       symbol[(unsigned char)(chars[pc++])] = 1;
+               } else if (c == NCCL) {
+                   nc = chars[right[curpos]];
+                   for (j = 0; j < NCHARS; j++) {
+                       pc = right[curpos] + 1;
+                       for (l = 0; l < nc; l++)
+                           if (j==(unsigned char)(chars[pc++]))
+                               goto cont;
+                       if (j != '\n')
+                           symbol[j] = 1;
+                   cont:
+                       ;
+                   }
+               }
+           }
+           pos++;
+       } /* for (i) */
+       for (c=0; c<NCHARS; c++) {
+           if (symbol[c] == 1) {
+               /* nextstate(s,c) */
+               count = icount;
+               for (i=3; i <= line; i++)
+                   tmpstat[i] = initstat[i];
+               pos = state[s] + 1;
+               for (i=0; i<num; i++) {
+                   curpos = positions[pos];
+                   if ((k = name[curpos]) >= 0)
+                       if ((k == c)
+                           || (k == DOT)
+                           || (k == CCL && member(c, right[curpos], 1))
+                           || (k == NCCL && member(c, right[curpos], 0))
+                           ) {
+                           number = positions[foll[curpos]];
+                           newpos = foll[curpos] + 1;
+                           for (j = 0; j < number; j++) {
+                               if (tmpstat[positions[newpos]] != 1) {
+                                   tmpstat[positions[newpos]] = 1;
+                                   count++;
+                               }
+                               newpos++;
+                           }
+                       }
+                   pos++;
+               } /* end nextstate */
+               if (notin(n)) {
+                   if (n >= NSTATES)
+                       overflo();
+                   add(state, ++n);
+                   if (tmpstat[line] == 1)
+                       out[n] = 1;
+                   gotofn[s][c] = n;
+               } else {
+                   gotofn[s][c] = xstate;
+               }
+           } /* if (symbol) */
+       } /* for(c) */
+    } /* for(s) */
+}
+
+static int
+cstate(int v)
+{
+       int b;
+       if (left[v] == 0) {
+               if (tmpstat[v] != 1) {
+                       tmpstat[v] = 1;
+                       count++;
+               }
+               return(1);
+       }
+       else if (right[v] == 0) {
+               if (cstate(left[v]) == 0) return (0);
+               else if (name[v] == PLUS) return (1);
+               else return (0);
+       }
+       else if (name[v] == CAT) {
+               if (cstate(left[v]) == 0 && cstate(right[v]) == 0) return (0);
+               else return (1);
+       }
+       else { /* name[v] == OR */
+               b = cstate(right[v]);
+               if (cstate(left[v]) == 0 || b == 0) return (0);
+               else return (1);
+       }
+}
+
+static int
+member(int symb, int set, int torf)
+{
+    unsigned int i, num, pos;
+
+    num = chars[set];
+    pos = set + 1;
+    for (i = 0; i < num; i++)
+       if (symb == (unsigned char)(chars[pos++]))
+           return (torf);
+    return (!torf);
+}
+
+static int
+notin(int n)
+{
+       int i, j, pos;
+       for (i=0; i<=n; i++) {
+               if (positions[state[i]] == count) {
+                       pos = state[i] + 1;
+                       for (j=0; j < count; j++)
+                               if (tmpstat[positions[pos++]] != 1) goto nxt;
+                       xstate = i;
+                       return (0);
+               }
+               nxt: ;
+       }
+       return (1);
+}
+
+static void
+add(int *array, int n)
+{
+    unsigned int i;
+
+    if (nxtpos + count > MAXPOS)
+       overflo();
+    array[n] = nxtpos;
+    positions[nxtpos++] = count;
+    for (i=3; i <= line; i++) {
+       if (tmpstat[i] == 1) {
+           positions[nxtpos++] = i;
+       }
+    }
+}
+
+static void
+follow(unsigned int v)
+{
+    unsigned int p;
+
+    if (v == line) 
+       return;
+    p = parent[v];
+    switch(name[p]) {
+    case STAR:
+    case PLUS: cstate(v);
+       follow(p);
+       return;
+
+    case OR:
+    case QUEST:        follow(p);
+       return;
+
+    case CAT:
+       if (v == left[p]) {
+           if (cstate(right[p]) == 0) {
+               follow(p);
+               return;
+           }
+       } else 
+           follow(p);
+       return;
+    case FINAL:
+       if (tmpstat[line] != 1) {
+           tmpstat[line] = 1;
+           count++;
+       }
+       return;
+    }
+}
+
+char *
+egrepinit(char *egreppat)
+{
+    /* initialize the global data */
+    memset(gotofn, 0, sizeof(gotofn));
+    memset(state, 0, sizeof(state));
+    memset(out, 0, sizeof(out));
+    line = 1;
+    memset(name, 0, sizeof(name));
+    memset(left, 0, sizeof(left));
+    memset(right, 0, sizeof(right));
+    memset(parent, 0, sizeof(parent));
+    memset(foll, 0, sizeof(foll));
+    memset(positions, 0, sizeof(positions));
+    memset(chars, 0, sizeof(chars));
+    nxtpos = 0;
+    nxtchar = 0;
+    memset(tmpstat, 0, sizeof(tmpstat));
+    memset(initstat, 0, sizeof(initstat));
+    xstate = 0;
+    count = 0;
+    icount = 0;
+    input = egreppat;
+    message = NULL;
+    if (setjmp(env) == 0) {
+       yyparse();
+       cfoll(line-1);
+       cgotofn();
+    }
+    return(message);
+}
+
+int
+egrep(char *file, FILE *output, char *format)
+{
+    char *p;
+    unsigned int cstat;
+    int ccount;
+    char buf[2*BUFSIZ];
+    char *nlp;
+    unsigned int istat;
+    int in_line;
+    FILE *fptr;
+
+    if ((fptr = myfopen(file, "r")) == NULL) 
+       return(-1);
+
+    ccount = 0;
+    lnum = 1;
+    in_line = 0;
+    p = buf;
+    nlp = p;
+    if ((ccount = fread(p, sizeof(char), BUFSIZ, fptr)) <= 0)
+       goto done;
+    in_line = 1;
+    istat = cstat = (unsigned int) gotofn[0]['\n'];
+    if (out[cstat])
+       goto found;
+    for (;;) {
+       if (!iflag)
+           cstat = (unsigned int) gotofn[cstat][(unsigned int)*p&0377];
+       /* all input chars made positive */
+       else
+           cstat = (unsigned int) gotofn[cstat][tolower((int)*p&0377)];
+       /* for -i option*/
+       if (out[cstat]) {
+       found:
+           for(;;) {
+               if (*p++ == '\n') {
+                   in_line = 0;
+               succeed:
+                   fprintf(output, format, file, lnum);
+                   if (p <= nlp) {
+                       while (nlp < &buf[2*BUFSIZ])
+                           putc(*nlp++, output);
+                       nlp = buf;
+                   }
+                   while (nlp < p)
+                       putc(*nlp++, output);
+                   lnum++;
+                   nlp = p;
+                   if ((out[(cstat=istat)]) == 0)
+                       goto brk2;
+               } /* if (p++ == \n) */
+           cfound:
+               if (--ccount <= 0) {
+                   if (p <= &buf[BUFSIZ]) {
+                       ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+                   } else if (p == &buf[2*BUFSIZ]) {
+                       p = buf;
+                       ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+                   } else {
+                       ccount = fread(p, sizeof(char), &buf[2*BUFSIZ] - p,
+                                      fptr);
+                   }
+                   if (ccount <= 0) {
+                       if (in_line) {
+                           in_line = 0;
+                           goto succeed;
+                       }
+                       goto done;
+                   }
+               } /* if(ccount <= 0) */
+               in_line = 1;
+           } /* for(ever) */
+       } /* if(out[cstat]) */
+
+       if (*p++ == '\n') {
+           in_line = 0;
+           lnum++;
+           nlp = p;
+           if (out[(cstat=istat)])
+               goto cfound;
+       }
+    brk2:
+       if (--ccount <= 0) {
+           if (p <= &buf[BUFSIZ]) {
+               ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+           } else if (p == &buf[2*BUFSIZ]) {
+               p = buf;
+               ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+           } else {
+               ccount = fread(p, sizeof(char), &buf[2*BUFSIZ] - p, fptr);
+           }
+           if (ccount <= 0) 
+               break;
+       }
+       in_line = 1;
+    }
+done:
+    fclose(fptr);
+    return(0);
+}
+
+/* FIXME HBB: should export this to a separate file and use
+ * AC_REPLACE_FUNCS() */
+#if !STDC_HEADERS && !defined(HAVE_MEMSET) && !defined(HAVE_MEMORY_H)
+/*LINTLIBRARY*/
+/*
+ * Set an array of n chars starting at sp to the character c.
+ * Return sp.
+ */
+char *
+memset(char *sp, char c, int n)
+{
+       char *sp0 = sp;
+
+       while (--n >= 0)
+               *sp++ = c;
+       return (sp0);
+}
+#endif
+
+void
+egrepcaseless(int i)
+{
+       iflag = i;      /* simulate "egrep -i" */
+}
+
diff --git a/src/egrep.y b/src/egrep.y
new file mode 100644 (file)
index 0000000..a930803
--- /dev/null
@@ -0,0 +1,679 @@
+%{
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: egrep.y,v 1.11 2006/04/21 10:45:48 broeker Exp $ */
+
+/*
+ * egrep -- fine lines containing a regular expression
+ */
+%}
+
+%token CHAR DOT CCL NCCL OR CAT STAR PLUS QUEST
+%left OR
+%left CHAR DOT CCL NCCL '('
+%left CAT
+%left STAR PLUS QUEST
+
+%{
+#include "global.h"
+#include <ctype.h>
+#include <stdio.h>
+
+#include <setjmp.h>    /* jmp_buf */
+
+#define nextch()       (*input++)
+
+#define MAXLIN 350
+#define MAXPOS 4000
+#define NCHARS 256
+#define NSTATES 128
+#define FINAL -1
+static char gotofn[NSTATES][NCHARS];
+static int state[NSTATES];
+static char out[NSTATES];
+static unsigned int line;
+static int name[MAXLIN];
+static unsigned int left[MAXLIN];
+static unsigned int right[MAXLIN];
+static unsigned int parent[MAXLIN];
+static int foll[MAXLIN];
+static int positions[MAXPOS];
+static char chars[MAXLIN];
+static int nxtpos;
+static int nxtchar;
+static int tmpstat[MAXLIN];
+static int initstat[MAXLIN];
+static int xstate;
+static int count;
+static int icount;
+static char *input;
+static long lnum;
+static int iflag;
+static jmp_buf env;    /* setjmp/longjmp buffer */
+static char *message;  /* error message */
+
+/* Internal prototypes: */
+static void cfoll(int v);
+static void cgotofn(void);
+static int cstate(int v);
+static int member(int symb, int set, int torf);
+static int notin(int n);
+static void synerror(void);
+static void overflo(void);
+static void add(int *array, int n);
+static void follow(unsigned int v);
+static int unary(int x, int d);
+static int node(int x, int l, int r);
+static unsigned int cclenter(int x);
+static unsigned int enter(int x);
+
+static int yylex(void);
+static int yyerror(char *);
+%}
+
+%%
+s:     t
+               { unary(FINAL, $1);
+                 line--;
+               }
+       ;
+t:     b r
+               { $$ = node(CAT, $1, $2); }
+       | OR b r OR
+               { $$ = node(CAT, $2, $3); }
+       | OR b r
+               { $$ = node(CAT, $2, $3); }
+       | b r OR
+               { $$ = node(CAT, $1, $2); }
+       ;
+b:
+               { $$ = enter(DOT);
+                  $$ = unary(STAR, $$); }
+       ;
+r:     CHAR
+               { $$ = enter($1); }
+       | DOT
+               { $$ = enter(DOT); }
+       | CCL
+               { $$ = cclenter(CCL); }
+       | NCCL
+               { $$ = cclenter(NCCL); }
+       ;
+
+r:     r OR r
+               { $$ = node(OR, $1, $3); }
+       | r r %prec CAT
+               { $$ = node(CAT, $1, $2); }
+       | r STAR
+               { $$ = unary(STAR, $1); }
+       | r PLUS
+               { $$ = unary(PLUS, $1); }
+       | r QUEST
+               { $$ = unary(QUEST, $1); }
+       | '(' r ')'
+               { $$ = $2; }
+       | error 
+       ;
+
+%%
+static int
+yyerror(char *s)
+{
+       message = s;
+       longjmp(env, 1);
+       return 1;               /* silence a warning */
+}
+
+static int
+yylex(void)
+{
+    int cclcnt, x;
+    char c, d;
+
+    switch(c = nextch()) {
+    case '|':
+       return (OR);
+    case '*':
+       return (STAR);
+    case '+':
+       return (PLUS);
+    case '?':
+       return (QUEST);
+    case '(':
+       return (c);
+    case ')':
+       return (c);
+    case '.':
+       return (DOT);
+    case '\0':
+       return (0);
+    case '\n':
+       return (OR);
+    case '[': 
+       x = CCL;
+       cclcnt = 0;
+       count = nxtchar++;
+       if ((c = nextch()) == '^') {
+           x = NCCL;
+           c = nextch();
+       }
+       do {
+           if (c == '\0')
+               synerror();
+           if (c == '-'
+               && cclcnt > 0
+               && chars[nxtchar-1] != 0) {
+               if ((d = nextch()) != 0) {
+                   c = chars[nxtchar-1];
+                   while ((unsigned int)c < (unsigned int)d) {
+                       if (nxtchar >= MAXLIN)
+                           overflo();
+                       chars[nxtchar++] = ++c;
+                       cclcnt++;
+                   }
+                   continue;
+               } /* if() */
+           } /* if() */
+           if (nxtchar >= MAXLIN)
+               overflo();
+           chars[nxtchar++] = c;
+           cclcnt++;
+       } while ((c = nextch()) != ']');
+       chars[count] = cclcnt;
+       return (x);
+    case '\\':
+       if ((c = nextch()) == '\0')
+           synerror();
+       /* not reached */
+    case '$':
+    case '^':
+       c = '\n';
+       /* fall through */
+    default:
+       yylval = c;
+       return (CHAR);
+    }
+}
+
+static void
+synerror(void)
+{
+    yyerror("Syntax error");
+}
+
+static unsigned int
+enter(int x)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = 0;
+    right[line] = 0;
+    return(line++);
+}
+
+static unsigned int
+cclenter(int x)
+{
+    unsigned int linno;
+
+    linno = enter(x);
+    right[linno] = count;
+    return (linno);
+}
+
+static int
+node(int x, int l, int r)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = l;
+    right[line] = r;
+    parent[l] = line;
+    parent[r] = line;
+    return(line++);
+}
+
+static int
+unary(int x, int d)
+{
+    if(line >= MAXLIN)
+       overflo();
+    name[line] = x;
+    left[line] = d;
+    right[line] = 0;
+    parent[d] = line;
+    return(line++);
+}
+
+static void
+overflo(void)
+{
+    yyerror("internal table overflow");
+}
+
+static void
+cfoll(int v)
+{
+    unsigned int i;
+
+    if (left[v] == 0) {
+       count = 0;
+       for (i = 1; i <= line; i++) 
+           tmpstat[i] = 0;
+       follow(v);
+       add(foll, v);
+    } else if (right[v] == 0)
+       cfoll(left[v]); 
+    else {
+       cfoll(left[v]);
+       cfoll(right[v]);
+    }
+}
+
+static void
+cgotofn(void)
+{
+    unsigned int i, n, s;
+    int c, k;
+    char symbol[NCHARS];
+    unsigned int j, l, pc, pos;
+    unsigned int nc;
+    int curpos;
+    unsigned int num, number, newpos;
+
+    count = 0;
+    for (n=3; n<=line; n++)
+       tmpstat[n] = 0;
+    if (cstate(line-1)==0) {
+       tmpstat[line] = 1;
+       count++;
+       out[0] = 1;
+    }
+    for (n=3; n<=line; n++)
+       initstat[n] = tmpstat[n];
+    count--;           /*leave out position 1 */
+    icount = count;
+    tmpstat[1] = 0;
+    add(state, 0);
+    n = 0;
+    for (s = 0; s <= n; s++)  {
+       if (out[s] == 1)
+           continue;
+       for (i = 0; i < NCHARS; i++)
+           symbol[i] = 0;
+       num = positions[state[s]];
+       count = icount;
+       for (i = 3; i <= line; i++)
+           tmpstat[i] = initstat[i];
+       pos = state[s] + 1;
+       for (i = 0; i < num; i++) {
+           curpos = positions[pos];
+           if ((c = name[curpos]) >= 0) {
+               if (c < NCHARS) {
+                   symbol[c] = 1;
+               } else if (c == DOT) {
+                   for (k = 0; k < NCHARS; k++)
+                       if (k != '\n')
+                           symbol[k] = 1;
+               } else if (c == CCL) {
+                   nc = chars[right[curpos]];
+                   pc = right[curpos] + 1;
+                   for (j = 0; j < nc; j++)
+                       symbol[(unsigned char)(chars[pc++])] = 1;
+               } else if (c == NCCL) {
+                   nc = chars[right[curpos]];
+                   for (j = 0; j < NCHARS; j++) {
+                       pc = right[curpos] + 1;
+                       for (l = 0; l < nc; l++)
+                           if (j==(unsigned char)(chars[pc++]))
+                               goto cont;
+                       if (j != '\n')
+                           symbol[j] = 1;
+                   cont:
+                       ;
+                   }
+               }
+           }
+           pos++;
+       } /* for (i) */
+       for (c=0; c<NCHARS; c++) {
+           if (symbol[c] == 1) {
+               /* nextstate(s,c) */
+               count = icount;
+               for (i=3; i <= line; i++)
+                   tmpstat[i] = initstat[i];
+               pos = state[s] + 1;
+               for (i=0; i<num; i++) {
+                   curpos = positions[pos];
+                   if ((k = name[curpos]) >= 0)
+                       if ((k == c)
+                           || (k == DOT)
+                           || (k == CCL && member(c, right[curpos], 1))
+                           || (k == NCCL && member(c, right[curpos], 0))
+                           ) {
+                           number = positions[foll[curpos]];
+                           newpos = foll[curpos] + 1;
+                           for (j = 0; j < number; j++) {
+                               if (tmpstat[positions[newpos]] != 1) {
+                                   tmpstat[positions[newpos]] = 1;
+                                   count++;
+                               }
+                               newpos++;
+                           }
+                       }
+                   pos++;
+               } /* end nextstate */
+               if (notin(n)) {
+                   if (n >= NSTATES)
+                       overflo();
+                   add(state, ++n);
+                   if (tmpstat[line] == 1)
+                       out[n] = 1;
+                   gotofn[s][c] = n;
+               } else {
+                   gotofn[s][c] = xstate;
+               }
+           } /* if (symbol) */
+       } /* for(c) */
+    } /* for(s) */
+}
+
+static int
+cstate(int v)
+{
+       int b;
+       if (left[v] == 0) {
+               if (tmpstat[v] != 1) {
+                       tmpstat[v] = 1;
+                       count++;
+               }
+               return(1);
+       }
+       else if (right[v] == 0) {
+               if (cstate(left[v]) == 0) return (0);
+               else if (name[v] == PLUS) return (1);
+               else return (0);
+       }
+       else if (name[v] == CAT) {
+               if (cstate(left[v]) == 0 && cstate(right[v]) == 0) return (0);
+               else return (1);
+       }
+       else { /* name[v] == OR */
+               b = cstate(right[v]);
+               if (cstate(left[v]) == 0 || b == 0) return (0);
+               else return (1);
+       }
+}
+
+static int
+member(int symb, int set, int torf)
+{
+    unsigned int i, num, pos;
+
+    num = chars[set];
+    pos = set + 1;
+    for (i = 0; i < num; i++)
+       if (symb == (unsigned char)(chars[pos++]))
+           return (torf);
+    return (!torf);
+}
+
+static int
+notin(int n)
+{
+       int i, j, pos;
+       for (i=0; i<=n; i++) {
+               if (positions[state[i]] == count) {
+                       pos = state[i] + 1;
+                       for (j=0; j < count; j++)
+                               if (tmpstat[positions[pos++]] != 1) goto nxt;
+                       xstate = i;
+                       return (0);
+               }
+               nxt: ;
+       }
+       return (1);
+}
+
+static void
+add(int *array, int n)
+{
+    unsigned int i;
+
+    if (nxtpos + count > MAXPOS)
+       overflo();
+    array[n] = nxtpos;
+    positions[nxtpos++] = count;
+    for (i=3; i <= line; i++) {
+       if (tmpstat[i] == 1) {
+           positions[nxtpos++] = i;
+       }
+    }
+}
+
+static void
+follow(unsigned int v)
+{
+    unsigned int p;
+
+    if (v == line) 
+       return;
+    p = parent[v];
+    switch(name[p]) {
+    case STAR:
+    case PLUS: cstate(v);
+       follow(p);
+       return;
+
+    case OR:
+    case QUEST:        follow(p);
+       return;
+
+    case CAT:
+       if (v == left[p]) {
+           if (cstate(right[p]) == 0) {
+               follow(p);
+               return;
+           }
+       } else 
+           follow(p);
+       return;
+    case FINAL:
+       if (tmpstat[line] != 1) {
+           tmpstat[line] = 1;
+           count++;
+       }
+       return;
+    }
+}
+
+char *
+egrepinit(char *egreppat)
+{
+    /* initialize the global data */
+    memset(gotofn, 0, sizeof(gotofn));
+    memset(state, 0, sizeof(state));
+    memset(out, 0, sizeof(out));
+    line = 1;
+    memset(name, 0, sizeof(name));
+    memset(left, 0, sizeof(left));
+    memset(right, 0, sizeof(right));
+    memset(parent, 0, sizeof(parent));
+    memset(foll, 0, sizeof(foll));
+    memset(positions, 0, sizeof(positions));
+    memset(chars, 0, sizeof(chars));
+    nxtpos = 0;
+    nxtchar = 0;
+    memset(tmpstat, 0, sizeof(tmpstat));
+    memset(initstat, 0, sizeof(initstat));
+    xstate = 0;
+    count = 0;
+    icount = 0;
+    input = egreppat;
+    message = NULL;
+    if (setjmp(env) == 0) {
+       yyparse();
+       cfoll(line-1);
+       cgotofn();
+    }
+    return(message);
+}
+
+int
+egrep(char *file, FILE *output, char *format)
+{
+    char *p;
+    unsigned int cstat;
+    int ccount;
+    char buf[2*BUFSIZ];
+    char *nlp;
+    unsigned int istat;
+    int in_line;
+    FILE *fptr;
+
+    if ((fptr = myfopen(file, "r")) == NULL) 
+       return(-1);
+
+    ccount = 0;
+    lnum = 1;
+    in_line = 0;
+    p = buf;
+    nlp = p;
+    if ((ccount = fread(p, sizeof(char), BUFSIZ, fptr)) <= 0)
+       goto done;
+    in_line = 1;
+    istat = cstat = (unsigned int) gotofn[0]['\n'];
+    if (out[cstat])
+       goto found;
+    for (;;) {
+       if (!iflag)
+           cstat = (unsigned int) gotofn[cstat][(unsigned int)*p&0377];
+       /* all input chars made positive */
+       else
+           cstat = (unsigned int) gotofn[cstat][tolower((int)*p&0377)];
+       /* for -i option*/
+       if (out[cstat]) {
+       found:
+           for(;;) {
+               if (*p++ == '\n') {
+                   in_line = 0;
+               succeed:
+                   fprintf(output, format, file, lnum);
+                   if (p <= nlp) {
+                       while (nlp < &buf[2*BUFSIZ])
+                           putc(*nlp++, output);
+                       nlp = buf;
+                   }
+                   while (nlp < p)
+                       putc(*nlp++, output);
+                   lnum++;
+                   nlp = p;
+                   if ((out[(cstat=istat)]) == 0)
+                       goto brk2;
+               } /* if (p++ == \n) */
+           cfound:
+               if (--ccount <= 0) {
+                   if (p <= &buf[BUFSIZ]) {
+                       ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+                   } else if (p == &buf[2*BUFSIZ]) {
+                       p = buf;
+                       ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+                   } else {
+                       ccount = fread(p, sizeof(char), &buf[2*BUFSIZ] - p,
+                                      fptr);
+                   }
+                   if (ccount <= 0) {
+                       if (in_line) {
+                           in_line = 0;
+                           goto succeed;
+                       }
+                       goto done;
+                   }
+               } /* if(ccount <= 0) */
+               in_line = 1;
+           } /* for(ever) */
+       } /* if(out[cstat]) */
+
+       if (*p++ == '\n') {
+           in_line = 0;
+           lnum++;
+           nlp = p;
+           if (out[(cstat=istat)])
+               goto cfound;
+       }
+    brk2:
+       if (--ccount <= 0) {
+           if (p <= &buf[BUFSIZ]) {
+               ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+           } else if (p == &buf[2*BUFSIZ]) {
+               p = buf;
+               ccount = fread(p, sizeof(char), BUFSIZ, fptr);
+           } else {
+               ccount = fread(p, sizeof(char), &buf[2*BUFSIZ] - p, fptr);
+           }
+           if (ccount <= 0) 
+               break;
+       }
+       in_line = 1;
+    }
+done:
+    fclose(fptr);
+    return(0);
+}
+
+/* FIXME HBB: should export this to a separate file and use
+ * AC_REPLACE_FUNCS() */
+#if !STDC_HEADERS && !defined(HAVE_MEMSET) && !defined(HAVE_MEMORY_H)
+/*LINTLIBRARY*/
+/*
+ * Set an array of n chars starting at sp to the character c.
+ * Return sp.
+ */
+char *
+memset(char *sp, char c, int n)
+{
+       char *sp0 = sp;
+
+       while (--n >= 0)
+               *sp++ = c;
+       return (sp0);
+}
+#endif
+
+void
+egrepcaseless(int i)
+{
+       iflag = i;      /* simulate "egrep -i" */
+}
diff --git a/src/emacs.e b/src/emacs.e
new file mode 100644 (file)
index 0000000..9eff1ce
--- /dev/null
@@ -0,0 +1,102 @@
+/ ========================================================================= /
+/ Copyright (c) 1998-2000, The Santa Cruz Operation /
+/ All rights reserved./
+/ /
+/ Redistribution and use in source and binary forms, with or without/
+/ modification, are permitted provided that the following conditions are met:/
+//
+/ *Redistributions of source code must retain the above copyright notice,/
+/ this list of conditions and the following disclaimer./
+//
+/ *Redistributions in binary form must reproduce the above copyright notice,/
+/ this list of conditions and the following disclaimer in the documentation/
+/ and/or other materials provided with the distribution./
+//
+/ *Neither name of The Santa Cruz Operation nor the names of its contributors/
+/ may be used to endorse or promote products derived from this software/
+/ without specific prior written permission. /
+//
+/ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS/
+/ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,/
+/ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR/
+/ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE/
+/ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR/
+/ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF/
+/ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS/
+/ INTERRUPTION)/
+/ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT/
+/ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY/
+/ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH/
+/ DAMAGE. /
+/ ========================================================================= /
+
+/ $Id: emacs.e,v 1.1 2000/04/27 16:33:47 petr Exp $ /
+
+
+/ emacs menu for cscope /
+((X) cscope (find current word [MACRO])
+       (extern symbol-character)
+
+       / if this character is not part of a symbol /
+       (cond ((not symbol-character)
+               
+               / if the previous character is not part of a symbol, go to
+                 the next word /
+               back
+               (cond ((not symbol-character) forward-word back-word))
+       ))
+       / get the current symbol (leave cursor at beginning of symbol) /
+       (while symbol-character forward)        / go past last symbol character /
+       mark                                    / mark this point /
+       back                                    / back to last symbol character /
+       (while (cond (symbol-character (return back)))) / back fails at BOF /
+       (cond ((not symbol-character) forward))         / forward if not at BOF /
+       pickup-region                           / get the symbol /
+       (local-string symbol)
+       symbol=
+
+       / if arg > 0 then display the menu /
+       (cond ((> arg 0) (display-menu
+               (format symbol "5  Find functions calling %l()")
+               (format symbol "4  Find functions called by %l()")
+               (format symbol "3  Find global definition of %l")
+               (format symbol "2  Find symbol %l")
+               "1  Call cscope"
+               5)
+       ))
+       / get the selection /
+       (local selection)
+       (selection= (read-character "Selection?"))
+
+       / if the selection is in range /
+       (cond ((&& (>= selection '1') (<= selection '5'))
+       
+               / if the selection requests finding the symbol /
+               (local-string findsymbol)
+               (findsymbol= "")
+               (cond ((>= selection '2')
+                       (findsymbol= (format (char-to-string (- selection 2)) symbol "-%l '%l'"))))
+               
+               / if arg > 1 or < 0 then don't update the cross-reference database /
+               (local-string doption)
+               (doption= "")
+               (cond ((|| (> arg 1) (< arg 0)) (doption= "-d")))
+               
+               / call cscope with usilent mode off /
+               (local oldmode)                         / save old usilent mode /
+               (oldmode= (set-mode "usilent" 0))       / turn off usilent mode /
+               (run-command (format doption findsymbol "cscope %l %l"))
+               (set-mode "usilent" oldmode)            / restore usilent mode /
+       ))
+)
+/ see if the current character is part of a symbol /
+(symbol-character ()
+       (local c)
+       (c= current-character)
+       (return (cond   ((&& (>= c 'a') (<= c 'z')))
+                       ((&& (>= c 'A') (<= c 'Z')))
+                       ((&& (>= c '0') (<= c '9')))
+                       ((== c '_'))
+               )
+       )
+)
diff --git a/src/exec.c b/src/exec.c
new file mode 100644 (file)
index 0000000..56bd471
--- /dev/null
@@ -0,0 +1,190 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     process execution functions
+ */
+
+#include <unistd.h>
+#include "global.h"
+#include <stdarg.h>
+#include <sys/wait.h>
+#include <sys/types.h>      /* pid_t */
+#ifdef __DJGPP__
+#include <process.h>
+#endif
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+
+static char const rcsid[] = "$Id: exec.c,v 1.12 2009/04/10 13:39:23 broeker Exp $";
+
+static sighandler_t oldsigquit; /* old value of quit signal */
+static sighandler_t oldsighup; /* old value of hangup signal */
+static sighandler_t oldsigtstp; /* old value of SIGTSTP */
+
+#ifndef __MSDOS__ /* none of these is needed, there */
+static int     join(pid_t p);
+static int     myexecvp(char *a, char **args);
+static pid_t   myfork(void);
+#endif
+
+/* execute forks and executes a program or shell script, waits for it to
+ * finish, and returns its exit code.
+ */
+
+/*VARARGS1*/
+int
+execute(char *a, ...)  /* note: "exec" is already defined on u370 */
+{
+       va_list ap;
+       int     exitcode = -1;  /* initialize, to avoid warning */
+       char    *argv[BUFSIZ];
+       pid_t   p;
+
+       /* fork and exec the program or shell script */
+       endwin();       /* restore the terminal modes */
+       mousecleanup();
+       fflush(stdout);
+       va_start(ap, a);
+       for (p = 0; (argv[p] = va_arg(ap, char *)) != 0; p++)
+               ;
+#ifdef __MSDOS__
+       /* HBB 20010313: in MSDOG, everything is completely different.
+        * No fork()/exec()/wait(), but rather a single libc call: */
+        exitcode = spawnvp(P_WAIT, a, argv);
+#else
+       if ((p = myfork()) == 0) {
+               myexecvp(a, argv);      /* child */
+       }
+       else {
+               exitcode = join(p);     /* parent */
+       }
+#endif /* MSDOS */
+       
+       /* the menu and scrollbar may be changed by the command executed */
+#if UNIXPC || !TERMINFO
+# ifndef __DJGPP__ /* leave CRLF handling as is */      
+       nonl();
+# endif
+       raw();  /* endwin() turns off cbreak mode so restore it */
+       noecho();
+#endif
+       mousemenu();
+       drawscrollbar(topline, nextline);
+       va_end(ap);
+       return(exitcode);
+}
+
+#ifndef __MSDOS__ /* None of the following functions is used there */
+
+/* myexecvp is an interface to the execvp system call to
+ * modify argv[0] to reference the last component of its path-name.
+ */
+static int
+myexecvp(char *a, char **args)
+{
+    char    msg[MSGLEN + 1];
+       
+    /* modify argv[0] to reference the last component of its path name */
+    args[0] = mybasename(args[0]);
+
+    /* execute the program or shell script */
+    execvp(a, args);   /* returns only on failure */
+    snprintf(msg, sizeof(msg), "\nCannot exec %s", a);
+    perror(msg);               /* display the reason */
+    askforreturn();            /* wait until the user sees the message */
+    myexit(1);         /* exit the child */
+    /* NOTREACHED */
+}
+
+/* myfork acts like fork but also handles signals */
+
+static pid_t
+myfork(void)
+{
+       pid_t   p;              /* process number */
+
+       p = fork();
+       
+       /* the parent ignores the interrupt, quit, and hangup signals */
+       if (p > 0) {
+               oldsigquit = signal(SIGQUIT, SIG_IGN);
+               oldsighup = signal(SIGHUP, SIG_IGN);
+#ifdef SIGTSTP         
+               oldsigtstp = signal(SIGTSTP, SIG_DFL);
+#endif         
+       }
+       /* so they can be used to stop the child */
+       else if (p == 0) {
+               signal(SIGINT, SIG_DFL);
+               signal(SIGQUIT, SIG_DFL);
+               signal(SIGHUP, SIG_DFL);
+#ifdef SIGTSTP
+               signal(SIGTSTP, SIG_DFL);
+#endif                 
+       }
+       /* check for fork failure */
+       if (p == -1) {
+               myperror("Cannot fork");
+       }
+       return p;
+}
+
+/* join is the compliment of fork */
+
+static int
+join(pid_t p) 
+{
+       int     status;  
+       pid_t   w;
+
+       /* wait for the correct child to exit */
+       do {
+               w = wait(&status);
+       } while (p != -1 && w != p);
+
+       /* restore signal handling */
+       signal(SIGQUIT, oldsigquit);
+       signal(SIGHUP, oldsighup);
+#ifdef SIGTSTP
+       signal(SIGTSTP, oldsigtstp);
+#endif 
+
+       /* return the child's exit code */
+       return(status >> 8);
+}
+
+#endif /* !MSDOS */
diff --git a/src/find.c b/src/find.c
new file mode 100644 (file)
index 0000000..d8da542
--- /dev/null
@@ -0,0 +1,1302 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol or text cross-reference
+ *
+ *     searching functions
+ */
+
+#include "global.h"
+
+#include "build.h"
+#include "scanner.h"           /* for token definitions */
+
+#include <assert.h>
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#include <regex.h>
+
+static char const rcsid[] = "$Id: find.c,v 1.25 2012/06/15 11:18:11 nhorman Exp $";
+
+/* most of these functions have been optimized so their innermost loops have
+ * only one test for the desired character by putting the char and 
+ * an end-of-block marker (\0) at the end of the disk block buffer.
+ * When the inner loop exits on the char, an outer loop will see if
+ * the char is followed by a \0.  If so, it will read the next block
+ * and restart the inner loop.
+ */
+
+char   *blockp;                        /* pointer to current char in block */
+char   block[BUFSIZ + 2];              /* leave room for end-of-block mark */
+int    blocklen;                       /* length of disk block read */
+char   blockmark;                      /* mark character to be searched for */
+long   blocknumber;                    /* block number */
+
+static char    global[] = "<global>";  /* dummy global function name */
+static char    cpattern[PATLEN + 1];   /* compressed pattern */
+static long    lastfcnoffset;          /* last function name offset */
+static POSTING *postingp;              /* retrieved posting set pointer */
+static long    postingsfound;          /* retrieved number of postings */
+static regex_t regexp;                 /* regular expression */
+static BOOL    isregexp_valid = NO;    /* regular expression status */
+
+static BOOL    match(void);
+static BOOL    matchrest(void);
+static POSTING *getposting(void);
+static char    *lcasify(char *s);
+static void    findcalledbysub(char *file, BOOL macro);
+static void    findterm(char *pattern);
+static void    putline(FILE *output);
+static  char    *find_symbol_or_assignment(char *pattern, BOOL assign_flag);
+static  BOOL    check_for_assignment(void);
+static void    putpostingref(POSTING *p, char *pat);
+static void    putref(int seemore, char *file, char *func);
+static void    putsource(int seemore, FILE *output);
+
+\f/* find the symbol in the cross-reference */
+
+char *
+findsymbol(char *pattern)
+{
+    return find_symbol_or_assignment(pattern, NO);
+}
+
+\f/* find the symbol in the cross-reference, and look for assignments */
+char *
+findassign(char *pattern)
+{
+    return find_symbol_or_assignment(pattern, YES);
+}
+
+\f/* Test reference whether it's an assignment to the symbol found at
+ * (global variable) 'blockp' */
+static BOOL
+check_for_assignment(void) 
+{
+    /* Do the extra work here to determine if this is an
+     * assignment or not.  Do this by examining the next character
+     * or two in blockp */
+    char *asgn_char = blockp;
+
+    while (isspace((unsigned char) asgn_char[0])) {
+       /* skip any whitespace or \n */
+       asgn_char++;
+       if (asgn_char[0] == '\0') {
+           /* get the next block when we reach the end of
+            * the current block */
+           if (NULL == (asgn_char = read_block()))
+               return NO;
+       }
+    }
+    /* check for digraph starting with = */
+    if ((asgn_char[0] & 0x80) && (dichar1[(asgn_char[0] & 0177)/8] == '=')) {
+       return YES;
+    }
+    /* check for plain '=', not '==' */
+    if ((asgn_char[0] == '=') && 
+       (((asgn_char[1] != '=') && !(asgn_char[1] & 0x80)) || 
+        ((asgn_char[1] & 0x80) && (dichar1[(asgn_char[1]& 0177)/8] != '=')))) {
+       return YES;
+    }
+
+    /* check for operator assignments: +=, ... ^= ? */
+    if (   (   (asgn_char[0] == '+') 
+           || (asgn_char[0] == '-')
+           || (asgn_char[0] == '*') 
+           || (asgn_char[0] == '/') 
+           || (asgn_char[0] == '%') 
+           || (asgn_char[0] == '&') 
+           || (asgn_char[0] == '|') 
+           || (asgn_char[0] == '^') 
+          )
+       && ((asgn_char[1] == '=') || ((asgn_char[1] & 0x80) && (dichar1[(asgn_char[1] &0177)/8] == '=')))
+
+       ) {
+       return YES;
+    }
+
+    /* check for two-letter operator assignments: <<= or >>= ? */
+    if (   (   (asgn_char[0] == '<') 
+            || (asgn_char[0] == '>')
+           )
+       && (asgn_char[1] == asgn_char[0])
+       && ((asgn_char[2] == '=') || ((asgn_char[2] & 0x80) && (dichar1[(asgn_char[2] & 0177)/8] == '=')))
+       )
+       return YES;
+    return NO;
+}
+
+\f/* The actual routine that does the work for findsymbol() and
+* findassign() */
+static char *
+find_symbol_or_assignment(char *pattern, BOOL assign_flag)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+       char    function[PATLEN + 1];   /* function name */
+       char    macro[PATLEN + 1];      /* macro name */
+       char    symbol[PATLEN + 1];     /* symbol name */
+       char    *cp;
+       char    *s;
+       size_t  s_len = 0;
+       char firstchar;         /* first character of a potential symbol */
+       BOOL fcndef = NO;
+
+       if ((invertedindex == YES) && (assign_flag == NO)) {
+               long    lastline = 0;
+               POSTING *p;
+
+               findterm(pattern);
+               while ((p = getposting()) != NULL) {
+                       if (p->type != INCLUDE && p->lineoffset != lastline) {
+                               putpostingref(p, 0);
+                               lastline = p->lineoffset;
+                       }
+               }
+               return NULL;
+       }
+
+       (void) scanpast('\t');  /* find the end of the header */
+       skiprefchar();          /* skip the file marker */
+       fetch_string_from_dbase(file, sizeof(file));
+       strcpy(function, global); /* set the dummy global function name */
+       strcpy(macro, global);  /* set the dummy global macro name */
+       
+       /* find the next symbol */
+       /* note: this code was expanded in-line for speed */
+       /* other macros were replaced by code using cp instead of blockp */
+       cp = blockp;
+       for (;;) {
+               setmark('\n');
+               do {    /* innermost loop optimized to only one test */
+                       while (*cp != '\n') {
+                               ++cp;
+                       }
+               } while (*(cp + 1) == '\0' && (cp = read_block()) != NULL);
+
+               /* skip the found character */
+               if (cp != NULL && *(++cp + 1) == '\0') {
+                       cp = read_block();
+               }
+               if (cp == NULL) {
+                       break;
+               }
+               /* look for a source file, function, or macro name */
+               if (*cp == '\t') {
+                       blockp = cp;
+                       switch (getrefchar()) {
+
+                       case NEWFILE:           /* file name */
+
+                               /* save the name */
+                               skiprefchar();
+                               fetch_string_from_dbase(file, sizeof(file));
+                       
+                               /* check for the end of the symbols */
+                               if (*file == '\0') {
+                                       return NULL;
+                               }
+                               progress("Search", searchcount, nsrcfiles);
+                               /* FALLTHROUGH */
+                               
+                       case FCNEND:            /* function end */
+                               (void) strcpy(function, global);
+                               goto notmatched;        /* don't match name */
+                               
+                       case FCNDEF:            /* function name */
+                               fcndef = YES;
+                               s = function; 
+                               s_len = sizeof(function);
+                               break;
+
+                       case DEFINE:            /* macro name */
+                               if (fileversion >= 10) {
+                                       s = macro;
+                                       s_len = sizeof(macro);
+                               } else {        
+                                       s = symbol;
+                                       s_len = sizeof(symbol);
+                               }
+                               break;
+
+                       case DEFINEEND:         /* macro end */
+                               (void) strcpy(macro, global);
+                               goto notmatched;
+
+                       case INCLUDE:                   /* #include file */
+                               goto notmatched;        /* don't match name */
+                       
+                       default:                /* other symbol */
+                               s = symbol;
+                               s_len = sizeof(symbol);
+                       }
+                       /* save the name */
+                       skiprefchar();
+                       fetch_string_from_dbase(s, s_len);
+
+                       /* see if this is a regular expression pattern */
+                       if (isregexp_valid == YES) { 
+                               if (caseless == YES) {
+                                       s = lcasify(s);
+                               }
+                               if (*s != '\0' && regexec (&regexp, s, (size_t)0, NULL, 0) == 0) { 
+                                       goto matched;
+                               }
+                       }
+                       /* match the symbol to the text pattern */
+                       else if (strequal(pattern, s)) {
+                               goto matched;
+                       }
+                       goto notmatched;
+               }
+               /* if this is a regular expression pattern */
+               if (isregexp_valid == YES) {
+                       
+                       /* if this is a symbol */
+                       
+                       /**************************************************
+                        * The first character may be a digraph'ed char, so
+                        * unpack it into firstchar, and then test that.
+                        *
+                        * Assume that all digraphed chars have the 8th bit
+                        * set (0200).
+                        **************************************************/
+                       if (*cp & 0200) {       /* digraph char? */
+                               firstchar = dichar1[(*cp & 0177) / 8];
+                       }
+                       else {
+                               firstchar = *cp;
+                       }
+                       
+                       if (isalpha((unsigned char)firstchar) || firstchar == '_') {
+                               blockp = cp;
+                               fetch_string_from_dbase(symbol, sizeof(symbol));
+                               if (caseless == YES) {
+                                       s = lcasify(symbol);    /* point to lower case version */
+                               }
+                               else {
+                                       s = symbol;
+                               }
+                               
+                               /* match the symbol to the regular expression */
+                               if (*s != '\0' && regexec (&regexp, s, (size_t)0, NULL, 0) == 0) {
+                                       goto matched;
+                               }
+                               goto notmatched;
+                       }
+               }
+               /* match the character to the text pattern */
+               else if (*cp == cpattern[0]) {
+                       blockp = cp;
+
+                       /* match the rest of the symbol to the text pattern */
+                       if (matchrest()) {
+                               s = NULL;
+               matched:
+                               /* if the assignment flag is set then
+                                * we are looking for assignments and
+                                * some extra filtering is needed */
+                               if(assign_flag == YES
+                                 && ! check_for_assignment())
+                                      goto notmatched;
+
+
+                               /* output the file, function or macro, and source line */
+                               if (strcmp(macro, global) && s != macro) {
+                                       putref(0, file, macro);
+                               }
+                               else if (fcndef == YES || s != function) {
+                                       fcndef = NO;
+                                       putref(0, file, function);
+                               }
+                               else {
+                                       putref(0, file, global);
+                               }
+                       }
+               notmatched:
+                       if (blockp == NULL) {
+                               return NULL;
+                       }
+                       fcndef = NO;
+                       cp = blockp;
+               }
+       }
+       blockp = cp;
+
+       return NULL;
+}
+\f/* find the function definition or #define */
+
+char *
+finddef(char *pattern)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+
+       if (invertedindex == YES) {
+               POSTING *p;
+
+               findterm(pattern);
+               while ((p = getposting()) != NULL) {
+                       switch (p->type) {
+                       case DEFINE:/* could be a macro */
+                       case FCNDEF:
+                       case CLASSDEF:
+                       case ENUMDEF:
+                       case MEMBERDEF:
+                       case STRUCTDEF:
+                       case TYPEDEF:
+                       case UNIONDEF:
+                       case GLOBALDEF:/* other global definition */
+                               putpostingref(p, pattern);
+                       }
+               }
+               return NULL;
+       }
+
+
+       /* find the next file name or definition */
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+                       
+               case NEWFILE:
+                       skiprefchar();  /* save file name */
+                       fetch_string_from_dbase(file, sizeof(file));
+                       if (*file == '\0') {    /* if end of symbols */
+                               return NULL;
+                       }
+                       progress("Search", searchcount, nsrcfiles);
+                       break;
+
+               case DEFINE:            /* could be a macro */
+               case FCNDEF:
+               case CLASSDEF:
+               case ENUMDEF:
+               case MEMBERDEF:
+               case STRUCTDEF:
+               case TYPEDEF:
+               case UNIONDEF:
+               case GLOBALDEF:         /* other global definition */
+                       skiprefchar();  /* match name to pattern */
+                       if (match()) {
+               
+                               /* output the file, function and source line */
+                               putref(0, file, pattern);
+                       }
+                       break;
+               }
+       }
+       
+       return NULL;
+}
+\f/* find all function definitions (used by samuel only) */
+
+char *
+findallfcns(char *dummy)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+       char    function[PATLEN + 1];   /* function name */
+
+       (void) dummy;           /* unused argument */
+
+       /* find the next file name or definition */
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+                       
+               case NEWFILE:
+                       skiprefchar();  /* save file name */
+                       fetch_string_from_dbase(file, sizeof(file));
+                       if (*file == '\0') {    /* if end of symbols */
+                               return NULL;
+                       }
+                       progress("Search", searchcount, nsrcfiles);
+                       /* FALLTHROUGH */
+                       
+               case FCNEND:            /* function end */
+                       (void) strcpy(function, global);
+                       break;
+
+               case FCNDEF:
+               case CLASSDEF:
+                       skiprefchar();  /* save function name */
+                       fetch_string_from_dbase(function, sizeof(function));
+
+                       /* output the file, function and source line */
+                       putref(0, file, function);
+                       break;
+               }
+       }
+       return NULL;
+}
+
+\f/* find the functions calling this function */
+
+char *
+findcalling(char *pattern)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+       char    function[PATLEN + 1];   /* function name */
+       char    tmpfunc[10][PATLEN + 1];/* 10 temporary function names */
+       char    macro[PATLEN + 1];      /* macro name */
+       char    *tmpblockp;
+       int     morefuns, i;
+
+       if (invertedindex == YES) {
+               POSTING *p;
+               
+               findterm(pattern);
+               while ((p = getposting()) != NULL) {
+                       if (p->type == FCNCALL) {
+                               putpostingref(p, 0);
+                       }
+               }
+               return NULL;
+       }
+       /* find the next file name or function definition */
+       *macro = '\0';  /* a macro can be inside a function, but not vice versa */
+       tmpblockp = 0;
+       morefuns = 0;   /* one function definition is normal case */
+       for (i = 0; i < 10; i++) *(tmpfunc[i]) = '\0';
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+                       
+               case NEWFILE:           /* save file name */
+                       skiprefchar();
+                       fetch_string_from_dbase(file, sizeof(file));
+                       if (*file == '\0') {    /* if end of symbols */
+                               return NULL;
+                       }
+                       progress("Search", searchcount, nsrcfiles);
+                       (void) strcpy(function, global);
+                       break;
+                       
+               case DEFINE:            /* could be a macro */
+                       if (fileversion >= 10) {
+                               skiprefchar();
+                               fetch_string_from_dbase(macro, sizeof(macro));
+                       }
+                       break;
+
+               case DEFINEEND:
+                       *macro = '\0';
+                       break;
+
+               case FCNDEF:            /* save calling function name */
+                       skiprefchar();
+                       fetch_string_from_dbase(function, sizeof(function));
+                       for (i = 0; i < morefuns; i++)
+                               if ( !strcmp(tmpfunc[i], function) )
+                                       break;
+                       if (i == morefuns) {
+                               (void) strcpy(tmpfunc[morefuns], function);
+                               if (++morefuns >= 10) morefuns = 9;
+                       }
+                       break;
+                       
+               case FCNEND:
+                       for (i = 0; i < morefuns; i++)
+                               *(tmpfunc[i]) = '\0';
+                       morefuns = 0;
+                       break;
+
+               case FCNCALL:           /* match function called to pattern */
+                       skiprefchar();
+                       if (match()) {
+                               
+                               /* output the file, calling function or macro, and source */
+                               if (*macro != '\0') {
+                                       putref(1, file, macro);
+                               }
+                               else {
+                                       tmpblockp = blockp;
+                                       for (i = 0; i < morefuns; i++) {
+                                               blockp = tmpblockp;
+                                               putref(1, file, tmpfunc[i]);
+                                       }
+                               }
+                       }
+               }
+       }
+       
+       return NULL;
+}
+
+/* find the text in the source files */
+
+char *
+findstring(char *pattern)
+{
+       char    egreppat[2 * PATLEN];
+       char    *cp, *pp;
+
+       /* translate special characters in the regular expression */
+       cp = egreppat;
+       for (pp = pattern; *pp != '\0'; ++pp) {
+               if (strchr(".*[\\^$+?|()", *pp) != NULL) {
+                       *cp++ = '\\';
+               }
+               *cp++ = *pp;
+       }
+       *cp = '\0';
+       
+       /* search the source files */
+       return(findregexp(egreppat));
+}
+
+/* find this regular expression in the source files */
+
+char *
+findregexp(char *egreppat)
+{
+    unsigned int i;
+    char *egreperror;
+
+    /* compile the pattern */
+    if ((egreperror = egrepinit(egreppat)) == NULL) {
+
+       /* search the files */
+       for (i = 0; i < nsrcfiles; ++i) {
+           char *file = filepath(srcfiles[i]);
+
+           progress("Search", searchcount, nsrcfiles);
+           if (egrep(file, refsfound, "%s <unknown> %ld ") < 0) {
+               posterr ("Cannot open file %s", file);
+           }
+       }
+    }
+    return(egreperror);
+}
+
+/* find matching file names */
+
+char *
+findfile(char *dummy)
+{
+    unsigned int i;
+       
+    (void) dummy;              /* unused argument */
+
+    for (i = 0; i < nsrcfiles; ++i) {
+       char *s;
+
+       if (caseless == YES) {
+           s = lcasify(srcfiles[i]);
+       } else {
+           s = srcfiles[i];
+       }
+       if (regexec (&regexp, s, (size_t)0, NULL, 0) == 0) {
+           (void) fprintf(refsfound, "%s <unknown> 1 <unknown>\n", 
+                          srcfiles[i]);
+       }
+    }
+
+    return NULL;
+}
+
+/* find files #including this file */
+
+char *
+findinclude(char *pattern)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+
+       if (invertedindex == YES) {
+               POSTING *p;
+
+               findterm(pattern);
+               while ((p = getposting()) != NULL) {
+                       if (p->type == INCLUDE) {
+                               putpostingref(p, 0);
+                        }
+                }
+                return NULL;
+        }
+
+       /* find the next file name or function definition */
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+                       
+               case NEWFILE:           /* save file name */
+                       skiprefchar();
+                       fetch_string_from_dbase(file, sizeof(file));
+                       if (*file == '\0') {    /* if end of symbols */
+                               return NULL;
+                       }
+                       progress("Search", searchcount, nsrcfiles);
+                       break;
+                       
+               case INCLUDE:           /* match function called to pattern */
+                       skiprefchar();
+                       skiprefchar();  /* skip global or local #include marker */
+                       if (match()) {
+                               
+                               /* output the file and source line */
+                               putref(0, file, global);
+                       }
+               }
+       }
+       
+       return NULL;
+}
+
+/* initialize */
+
+FINDINIT
+findinit(char *pattern)
+{
+       char    buf[PATLEN + 3];
+       BOOL    isregexp = NO;
+       int     i;
+       char    *s;
+       unsigned char c;        /* HBB 20010427: changed uint to uchar */
+
+       /* HBB: be nice: free regexp before allocating a new one */
+       if(isregexp_valid == YES)
+               regfree(&regexp);
+
+       isregexp_valid = NO;
+
+       /* remove trailing white space */
+       for (s = pattern + strlen(pattern) - 1; 
+            isspace((unsigned char)*s);
+            --s) {
+               *s = '\0';
+       }
+
+       /* HBB 20020620: new: make sure pattern is lowercased. Curses
+        * mode gets this right all on its own, but at least -L mode
+        * doesn't */
+       if (caseless == YES) {
+               pattern = lcasify(pattern);
+       }
+
+       /* allow a partial match for a file name */
+       if (field == FILENAME || field == INCLUDES) {
+               if (regcomp (&regexp, pattern, REG_EXTENDED | REG_NOSUB) != 0) { 
+                       return(REGCMPERROR);
+               } else {
+                       isregexp_valid = YES;
+               }
+               return(NOERROR);
+       }
+       /* see if the pattern is a regular expression */
+       if (strpbrk(pattern, "^.[{*+$") != NULL) {
+               isregexp = YES;
+       } else {
+               /* check for a valid C symbol */
+               s = pattern;
+               if (!isalpha((unsigned char)*s) && *s != '_') {
+                       return(NOTSYMBOL);
+               }
+               while (*++s != '\0') {
+                       if (!isalnum((unsigned char)*s) && *s != '_') {
+                               return(NOTSYMBOL);
+                       }
+               }
+               /* look for use of the -T option (truncate symbol to 8
+                  characters) on a database not built with -T */
+               if (trun_syms == YES && isuptodate == YES &&
+                   dbtruncated == NO && s - pattern >= 8) {
+                       (void) strcpy(pattern + 8, ".*");
+                       isregexp = YES;
+               }
+       }
+       /* if this is a regular expression or letter case is to be ignored */
+       /* or there is an inverted index */
+       if (isregexp == YES || caseless == YES || invertedindex == YES) {
+
+               /* remove a leading ^ */
+               s = pattern;
+               if (*s == '^') {
+                       (void) strcpy(newpat, s + 1);
+                       (void) strcpy(s, newpat);
+               }
+               /* remove a trailing $ */
+               i = strlen(s) - 1;
+               if (s[i] == '$') {
+                       if (i > 0  && s[i-1] == '\\' ) {
+                               s[i-1] = '$';
+                       }
+                       s[i] = '\0';
+               }
+               /* if requested, try to truncate a C symbol pattern */
+               if (trun_syms == YES && strpbrk(s, "[{*+") == NULL) {
+                       s[8] = '\0';
+               }
+               /* must be an exact match */
+               /* note: regcomp doesn't recognize ^*keypad$ as a syntax error
+                        unless it is given as a single arg */
+               (void) snprintf(buf, sizeof(buf), "^%s$", s);
+               if (regcomp (&regexp, buf, REG_EXTENDED | REG_NOSUB) != 0) {
+                       return(REGCMPERROR);
+               }
+               else
+               {
+                       isregexp_valid = YES;
+               }
+       }
+       else {
+               /* if requested, truncate a C symbol pattern */
+               if (trun_syms == YES && field <= CALLING) {
+                       pattern[8] = '\0';
+               }
+               /* compress the string pattern for matching */
+               s = cpattern;
+               for (i = 0; (c = pattern[i]) != '\0'; ++i) {
+                       if (IS_A_DICODE(c, pattern[i + 1])) {
+                               c = DICODE_COMPRESS(c, pattern[i + 1]);
+                               ++i;
+                       }
+                       *s++ = c;
+               }
+               *s = '\0';
+       }
+       return(NOERROR);
+}
+
+void
+findcleanup(void)
+{
+       /* discard any regular expression */
+}
+
+/* match the pattern to the string */
+
+static BOOL
+match(void)
+{
+       char    string[PATLEN + 1];
+
+       /* see if this is a regular expression pattern */
+       if (isregexp_valid == YES) {
+               fetch_string_from_dbase(string, sizeof(string));
+               if (*string == '\0') {
+                       return(NO);
+               }
+               if (caseless == YES) {
+                       return (regexec (&regexp, lcasify(string), (size_t)0, NULL, 0) ? NO : YES);
+               }
+               else {
+                       return (regexec (&regexp, string, (size_t)0, NULL, 0) ? NO : YES);
+               }
+       }
+       /* it is a string pattern */
+       return((BOOL) (*blockp == cpattern[0] && matchrest()));
+}
+
+/* match the rest of the pattern to the name */
+
+static BOOL
+matchrest(void)
+{
+       int     i = 1;
+       
+       skiprefchar();
+       do {
+               while (*blockp == cpattern[i]) {
+                       ++blockp;
+                       ++i;
+               }
+       } while (*(blockp + 1) == '\0' && read_block() != NULL);
+       
+       if (*blockp == '\n' && cpattern[i] == '\0') {
+               return(YES);
+       }
+       return(NO);
+}
+
+/* put the reference into the file */
+
+static void
+putref(int seemore, char *file, char *func)
+{
+       FILE    *output;
+
+       if (strcmp(func, global) == 0) {
+               output = refsfound;
+       }
+       else {
+               output = nonglobalrefs;
+       }
+       (void) fprintf(output, "%s %s ", file, func);
+       putsource(seemore, output);
+}
+
+/* put the source line into the file */
+
+static void
+putsource(int seemore, FILE *output)
+{
+       char *tmpblockp;
+       char    *cp, nextc = '\0';
+       BOOL Change = NO, retreat = NO;
+       
+       if (fileversion <= 5) {
+               (void) scanpast(' ');
+               putline(output);
+               (void) putc('\n', output);
+               return;
+       }
+       /* scan back to the beginning of the source line */
+       cp = tmpblockp = blockp;
+       while (*cp != '\n' || nextc != '\n') {
+               nextc = *cp;
+               if (--cp < block) {
+                       retreat = YES;
+                       /* read the previous block */
+                       (void) dbseek((blocknumber - 1) * BUFSIZ);
+                       cp = &block[BUFSIZ - 1];
+               }
+       }
+       blockp = cp;
+       if (*blockp != '\n' || getrefchar() != '\n' || 
+           (!isdigit(getrefchar()) && fileversion >= 12)) {
+               postfatal("Internal error: cannot get source line from database");
+               /* NOTREACHED */
+       }
+       /* until a double newline is found */
+       do {
+               /* skip a symbol type */
+               if (*blockp == '\t') {
+                       /* if retreat == YES, that means tmpblockp and blockp
+                        * point to different blocks.  Offset comparison should
+                        * NOT be performed until they point to the same block.
+                        */
+                       if (seemore && Change == NO && retreat == NO &&
+                               blockp > tmpblockp) {
+                                       Change = YES;
+                                       cp = blockp;
+                       }
+                       skiprefchar();
+                       skiprefchar();
+               }
+               /* output a piece of the source line */
+               putline(output);
+               if (retreat == YES) retreat = NO;
+       } while (blockp != NULL && getrefchar() != '\n');
+       (void) putc('\n', output);
+       if (Change == YES) blockp = cp;
+}
+
+/* put the rest of the cross-reference line into the file */
+
+static void
+putline(FILE *output)
+{
+       char    *cp;
+       unsigned c;
+       
+       setmark('\n');
+       cp = blockp;
+       do {
+               while ((c = (unsigned)(*cp)) != '\n') {
+                       
+                       /* check for a compressed digraph */
+                       if (c > '\177') {
+                               c &= 0177;
+                               (void) putc(dichar1[c / 8], output);
+                               (void) putc(dichar2[c & 7], output);
+                       }
+                       /* check for a compressed keyword */
+                       else if (c < ' ') {
+                               (void) fputs(keyword[c].text, output);
+                               if (keyword[c].delim != '\0') {
+                                       (void) putc(' ', output);
+                               }
+                               if (keyword[c].delim == '(') {
+                                       (void) putc('(', output);
+                               }
+                       }
+                       else {
+                               (void) putc((int) c, output);
+                       }
+                       ++cp;
+               }
+       } while (*(cp + 1) == '\0' && (cp = read_block()) != NULL);
+       blockp = cp;
+}
+
+
+/* put the rest of the cross-reference line into the string */
+void
+fetch_string_from_dbase(char *s, size_t length)
+{
+       char    *cp;
+       unsigned int c;
+
+       assert(length > sizeof (char *));
+
+       setmark('\n');
+       cp = blockp;
+       do {
+               while (length > 1 && (c = (unsigned int)(*cp)) != '\n') {
+                       if (c >= 0x80 && length > 2) {
+                               c &= 0x7f;
+                               *s++ = dichar1[c / 8];
+                               *s++ = dichar2[c & 7];
+                               length -= 2;
+                       } else {
+                               *s++ = c;
+                               length--;
+                       }
+                       ++cp;
+               }
+       } while (length > 0 && cp[1] == '\0' && (cp = read_block()) != NULL);
+       blockp = cp;
+       *s = '\0';
+}
+
+\f
+/* scan past the next occurence of this character in the cross-reference */
+char *
+scanpast(char c)
+{
+       char *cp;
+       
+       setmark(c);
+       cp = blockp;
+       do {    /* innermost loop optimized to only one test */
+               while (*cp != c) {
+                       ++cp;
+               }
+       } while (*(cp + 1) == '\0' && (cp = read_block()) != NULL);
+       blockp = cp;
+       if (cp != NULL) {
+               skiprefchar();  /* skip the found character */
+       }
+       return(blockp);
+}
+
+/* read a block of the cross-reference */
+/* HBB 20040430: renamed from readblock(), to avoid name clash on QNX */
+char *
+read_block(void)
+{
+       /* read the next block */
+       blocklen = read(symrefs, block, BUFSIZ);
+       blockp = block;
+       
+       /* add the search character and end-of-block mark */
+       block[blocklen] = blockmark;
+       block[blocklen + 1] = '\0';
+       
+       /* return NULL on end-of-file */
+       if (blocklen == 0) {
+               blockp = NULL;
+       }
+       else {
+               ++blocknumber;
+       }
+       return(blockp);
+}
+
+static char    *
+lcasify(char *s)
+{
+       static char ls[PATLEN+1];       /* largest possible match string */
+       char *lptr = ls;
+       
+       while(*s) {
+               *lptr = tolower((unsigned char)*s);
+               lptr++;
+               s++;
+       }
+       *lptr = '\0';
+       return(ls);
+}
+
+/* find the functions called by this function */
+
+/* HBB 2000/05/05: for consitency of calling interface between the
+ * different 'find...()' functions, this now returns a char pointer,
+ * too. Implemented as a pointer to static storage containing 'y' or
+ * 'n', for the boolean result values YES and NO */
+
+char *
+findcalledby(char *pattern)
+{
+       char    file[PATHLEN + 1];      /* source file name */
+       static char found_caller = 'n'; /* seen calling function? */
+       BOOL    macro = NO;
+
+       if (invertedindex == YES) {
+               POSTING *p;
+               
+               findterm(pattern);
+               while ((p = getposting()) != NULL) {
+                       switch (p->type) {
+                       case DEFINE:            /* could be a macro */
+                       case FCNDEF:
+                               if (dbseek(p->lineoffset) != -1 &&
+                                   scanpast('\t') != NULL) {   /* skip def */
+                                       found_caller = 'y';
+                                       findcalledbysub(srcfiles[p->fileindex], macro);
+                               }
+                       }
+               }
+               return(&found_caller);
+       }
+       /* find the function definition(s) */
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+                       
+               case NEWFILE:
+                       skiprefchar();  /* save file name */
+                       fetch_string_from_dbase(file, sizeof(file));
+                       if (*file == '\0') {    /* if end of symbols */
+                               return(&found_caller);
+                       }
+                       progress("Search", searchcount, nsrcfiles);
+                       break;
+
+               case DEFINE:            /* could be a macro */
+                       if (fileversion < 10) {
+                               break;
+                       }
+                       macro = YES;
+                       /* FALLTHROUGH */
+
+               case FCNDEF:
+                       skiprefchar();  /* match name to pattern */
+                       if (match()) {
+                               found_caller = 'y';
+                               findcalledbysub(file, macro);
+                       }
+                       break;
+               }
+       }
+
+       return (&found_caller);
+}
+
+/* find this term, which can be a regular expression */
+
+static void
+findterm(char *pattern)
+{
+       char    *s;
+       int     len;
+       char    prefix[PATLEN + 1];
+       char    term[PATLEN + 1];
+
+       npostings = 0;          /* will be non-zero after database built */
+       lastfcnoffset = 0;      /* clear the last function name found */
+       boolclear();            /* clear the posting set */
+
+       /* get the string prefix (if any) of the regular expression */
+       (void) strcpy(prefix, pattern);
+       if ((s = strpbrk(prefix, ".[{*+")) != NULL) {
+               *s = '\0';
+       }
+       /* if letter case is to be ignored */
+       if (caseless == YES) {
+               
+               /* convert the prefix to upper case because it is lexically
+                  less than lower case */
+               s = prefix;
+               while (*s != '\0') {
+                       *s = toupper((unsigned char)*s);
+                       ++s;
+               }
+       }
+       /* find the term lexically >= the prefix */
+       (void) invfind(&invcontrol, prefix);
+       if (caseless == YES) {  /* restore lower case */
+               (void) strcpy(prefix, lcasify(prefix));
+       }
+       /* a null prefix matches the null term in the inverted index,
+          so move to the first real term */
+       if (*prefix == '\0') {
+               (void) invforward(&invcontrol);
+       }
+       len = strlen(prefix);
+       do {
+               (void) invterm(&invcontrol, term);      /* get the term */
+               s = term;
+               if (caseless == YES) {
+                       s = lcasify(s); /* make it lower case */
+               }
+               /* if it matches */
+               if (regexec (&regexp, s, (size_t)0, NULL, 0) == 0) {
+       
+                       /* add its postings to the set */
+                       if ((postingp = boolfile(&invcontrol, &npostings, BOOL_OR)) == NULL) {
+                               break;
+                       }
+               }
+               /* if there is a prefix */
+               else if (len > 0) {
+                       
+                       /* if ignoring letter case and the term is out of the
+                          range of possible matches */
+                       if (caseless == YES) {
+                               if (strncmp(term, prefix, len) > 0) {
+                                       break;  /* stop searching */
+                               }
+                       }
+                       /* if using letter case and the prefix doesn't match */
+                       else if (strncmp(term, prefix, len) != 0) {
+                               break;  /* stop searching */
+                       }
+               }
+               /* display progress about every three seconds */
+               if (++searchcount % 50 == 0) {
+                       progress("Symbols matched", searchcount, totalterms);
+               }
+       } while (invforward(&invcontrol));      /* while didn't wrap around */
+       
+       /* initialize the progress message for retrieving the references */
+       searchcount = 0;
+       postingsfound = npostings;
+}
+
+/* get the next posting for this term */
+
+static POSTING *
+getposting(void)
+{
+       if (npostings-- <= 0) {
+               return(NULL);
+       }
+       /* display progress about every three seconds */
+       if (++searchcount % 100 == 0) {
+               progress("Possible references retrieved", searchcount,
+                   postingsfound);
+       }
+       return(postingp++);
+}
+
+/* put the posting reference into the file */
+
+static void
+putpostingref(POSTING *p, char *pat)
+{
+       static char     function[PATLEN + 1];   /* function name */
+
+       if (p->fcnoffset == 0) {
+               if (p->type == FCNDEF) { /* need to find the function name */
+                       if (dbseek(p->lineoffset) != -1) {
+                               scanpast(FCNDEF);
+                               fetch_string_from_dbase(function,
+                                                       sizeof(function));
+                       }
+               }
+               else if (p->type != FCNCALL) {
+                       strcpy(function, global);
+               }
+       }
+       else if (p->fcnoffset != lastfcnoffset) {
+               if (dbseek(p->fcnoffset) != -1) {
+                       fetch_string_from_dbase(function, sizeof(function));
+                       lastfcnoffset = p->fcnoffset;
+               }
+       }
+       if (dbseek(p->lineoffset) != -1) {
+               if (pat)
+                       putref(0, srcfiles[p->fileindex], pat);
+               else
+                       putref(0, srcfiles[p->fileindex], function);
+       }
+}
+
+/* seek to the database offset */
+
+long
+dbseek(long offset)
+{
+       long    n;
+       int     rc = 0;
+       
+       if ((n = offset / BUFSIZ) != blocknumber) {
+               if ((rc = lseek(symrefs, n * BUFSIZ, 0)) == -1) {
+                       myperror("Lseek failed");
+                       (void) sleep(3);
+                       return(rc);
+               }
+               (void) read_block();
+               blocknumber = n;
+       }
+       blockp = block + offset % BUFSIZ;
+       return(rc);
+}
+
+static void
+findcalledbysub(char *file, BOOL macro)
+{
+       /* find the next function call or the end of this function */
+       while (scanpast('\t') != NULL) {
+               switch (*blockp) {
+               
+               case DEFINE:            /* #define inside a function */
+                       if (fileversion >= 10) {        /* skip it */
+                               while (scanpast('\t') != NULL &&
+                                   *blockp != DEFINEEND) 
+                                       ;
+                       }
+                       break;
+               
+               case FCNCALL:           /* function call */
+
+                       /* output the file name */
+                       (void) fprintf(refsfound, "%s ", file);
+
+                       /* output the function name */
+                       skiprefchar();
+                       putline(refsfound);
+                       (void) putc(' ', refsfound);
+
+                       /* output the source line */
+                       putsource(1, refsfound);
+                       break;
+
+               case DEFINEEND:         /* #define end */
+                       
+                       if (invertedindex == NO) {
+                               if (macro == YES) {
+                                       return;
+                               }
+                               break;  /* inside a function */
+                       }
+                       /* FALLTHROUGH */
+
+               case FCNDEF:            /* function end (pre 9.5) */
+
+                       if (invertedindex == NO) break;
+                       /* FALLTHROUGH */
+
+               case FCNEND:            /* function end */
+               case NEWFILE:           /* file end */
+                       return;
+               }
+       }
+}
diff --git a/src/fscanner.c b/src/fscanner.c
new file mode 100644 (file)
index 0000000..aa091a0
--- /dev/null
@@ -0,0 +1,32257 @@
+
+#line 3 "fscanner.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               *yy_cp = (yy_hold_char); \
+               YY_RESTORE_YY_MORE_OFFSET \
+               (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via yyrestart()), so that the user can continue scanning by
+        * just pointing yyin at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+
+       };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;                /* whether we need to initialize */
+static int yy_start = 0;       /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
+
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+       (yytext_ptr) = yy_bp; \
+       (yytext_ptr) -= (yy_more_len); \
+       yyleng = (size_t) (yy_cp - (yytext_ptr)); \
+       (yy_hold_char) = *yy_cp; \
+       *yy_cp = '\0'; \
+       (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 67
+#define YY_END_OF_BUFFER 68
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+       {
+       flex_int32_t yy_verify;
+       flex_int32_t yy_nxt;
+       };
+static yyconst flex_int16_t yy_accept[5144] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       33,   33,    0,    0,    0,    0,   58,   58,   68,   66,
+       55,   44,   66,   47,    7,   36,   66,   45,   19,   20,
+       23,   66,   66,   64,   22,   24,   21,   41,   66,   42,
+       36,   36,   36,   36,   36,    6,   18,   53,   53,   66,
+       36,   36,   27,   26,   27,   27,   27,   27,   67,   10,
+       40,   40,   40,   38,   40,   34,   33,   34,   32,   51,
+       49,   48,   51,   46,   58,   60,   59,   55,   54,   56,
+        7,   36,    1,    2,   64,   57,   63,   64,   43,   36,
+       36,   36,   36,   36,   53,   53,    3,   36,   36,   28,
+
+       28,   28,   28,   28,   28,   10,    0,    0,    0,    0,
+       39,   38,    0,   38,   38,   38,    0,   38,    0,   38,
+        0,    0,    0,   33,   33,    0,   32,    0,    0,   50,
+       52,   58,   60,   59,   61,   59,   62,   55,   56,   63,
+       63,   36,   36,    0,   35,    0,   36,   36,   53,   53,
+       36,   36,   28,   28,   28,   28,   13,   28,   28,   28,
+        0,    0,    0,    0,   39,   38,   38,    0,   37,    0,
+        0,    0,   38,   38,   38,    0,    0,    0,    0,    0,
+        0,    0,   33,   33,    0,   31,    0,    0,    0,   36,
+       30,    0,    0,   36,   36,   36,   36,   28,   28,   14,
+
+       28,   28,   28,   28,    0,    0,    0,    0,   38,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   36,    0,
+        0,    0,   36,   36,   36,   28,   15,   14,    8,   28,
+       28,   28,    9,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   36,   65,
+       28,   14,    8,   12,   28,   28,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   33,
+        0,    0,    0,    0,    0,   36,    4,    4,    0,    8,
+
+       11,   28,    0,    0,   10,    0,    0,   38,    0,    0,
+       39,    0,    0,    0,    0,   33,    0,   32,    0,    0,
+        0,    0,   29,    0,    0,    0,    0,   36,    4,   25,
+        0,    0,    0,    0,    0,    0,   38,   38,    0,   38,
+       38,    0,   38,    0,    0,   39,    0,   39,    0,    0,
+        0,    0,   33,   33,   33,    0,   31,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   35,    0,    5,   25,
+        0,    0,    0,    0,    0,    0,   37,    0,   38,   38,
+        0,   37,    0,   38,   38,   38,    0,   38,   38,   38,
+       38,    0,    0,    0,   38,   38,   38,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   39,
+        0,    0,    0,    0,    0,    0,   31,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       16,   17,    0,    0,    0,    0,    0,   38,   38,    0,
+        0,   38,   38,   38,    0,   38,   38,   38,    0,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   37,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   33,    0,    0,    0,   33,    0,   33,    0,
+
+        0,    0,    0,    0,    9,    0,    0,    0,   10,    0,
+       10,    0,    0,    0,    0,   38,    0,    0,   38,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   39,    0,    0,    0,
+        0,    0,    0,    0,   33,    0,   32,    0,   33,    0,
+       33,    0,   33,    0,   33,   33,    0,   32,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
+        0,   10,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,   38,   38,    0,   38,   38,    0,   38,    0,
+        0,    0,    0,   38,   38,    0,    0,    0,   38,   38,
+       38,    0,   38,    0,   38,    0,   38,   38,   38,   38,
+       38,    0,   38,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   39,    0,   33,    0,   33,    0,    0,   33,    0,
+        0,   33,   33,    0,    0,    0,   33,    0,   33,   33,
+        0,   32,   33,   33,   33,    0,   31,    0,    0,    0,
+        0,    0,    0,    0,   29,    0,    0,    0,    0,    0,
+        0,   35,    0,    0,    0,   10,    0,    0,    0,    0,
+
+        0,    0,    0,    0,   37,    0,    0,    0,   38,    0,
+        0,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+        0,   38,    0,    0,    0,   38,   38,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,   38,   38,    0,   38,
+        0,   38,    0,    0,    0,   38,   38,   38,    0,   37,
+        0,   38,   38,   38,   38,    0,    0,    0,    0,   38,
+        0,   38,   38,   38,   38,   38,   38,   38,    0,   38,
+        0,    0,   38,   38,   38,    0,    0,   38,   38,    0,
+       38,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+       39,    0,    0,    0,   33,    0,   33,    0,   31,    0,
+       31,   33,   33,    0,   32,    0,    0,    0,    0,   33,
+       33,    0,    0,   33,   33,    0,   32,    0,    0,    0,
+        0,   29,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   10,    0,    0,    0,    0,    0,    0,    0,
+        0,   37,   37,   38,   38,   38,    0,   38,   38,    0,
+       38,    0,   38,   38,   38,   38,   38,    0,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
+       38,   38,    0,    0,   38,   38,   38,    0,    0,    0,
+
+        0,    0,   38,   38,   38,    0,   38,   38,    0,   38,
+        0,   38,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,   38,   38,    0,   38,   38,   38,   38,
+        0,    0,    0,   38,   38,   38,   38,   38,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,   38,   38,   38,
+        0,   37,    0,   38,   38,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   39,    0,    0,   39,    0,    0,   33,    0,
+        0,    0,    0,    0,   31,   33,   33,    0,   31,    0,
+        0,    0,    0,    0,   33,    0,   33,   33,    0,   32,
+
+        0,   33,   33,    0,   31,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   35,    0,    0,    0,    0,    0,    9,
+        0,    0,    0,   37,    0,    0,    0,   37,    0,    0,
+        0,   37,   37,   38,   38,    0,   38,   38,   38,    0,
+       38,   38,   38,   38,    0,    0,    0,   38,   38,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,    0,   38,   38,    0,   38,    0,
+       38,   38,    0,    0,   37,    0,    0,    0,    0,    0,
+
+        0,    0,   38,   38,    0,   37,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,   38,    0,   38,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,   38,   38,    0,   38,   38,    0,
+       38,    0,   38,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   39,    0,    0,    0,   33,
+        0,   31,    0,    0,    0,    0,   33,    0,    0,    0,
+       33,    0,    0,   31,   33,   33,   33,    0,   31,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,   38,    0,    0,   38,   38,   38,    0,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   37,   37,   38,
+       38,    0,    0,   37,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,   38,    0,    0,    0,   38,   38,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,    0,    0,   38,   38,   38,   38,    0,
+
+       38,   38,   38,    0,   38,    0,    0,    0,   38,    0,
+        0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,    0,   38,   38,   38,    0,    0,
+        0,    0,    0,    0,    0,   38,   38,    0,   37,    0,
+       38,   38,   38,    0,   38,   38,   38,   38,    0,   38,
+       38,   38,    0,    0,    0,    0,    0,    0,   37,    0,
+        0,    0,   37,   37,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   37,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,   33,    0,    0,
+        0,   33,    0,   33,   33,    0,    0,    0,    0,    0,
+        0,    0,   33,    0,   33,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   29,
+        0,    0,    9,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,   38,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,   38,
+        0,    0,   38,   38,   38,   38,    0,   38,   38,   38,
+
+        0,   38,    0,    0,    0,    0,   37,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,   38,    0,   38,   38,    0,    0,   38,    0,    0,
+        0,    0,   38,    0,    0,    0,   38,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,   38,    0,
+        0,   38,   38,   38,    0,   38,   38,   38,    0,   38,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   37,   37,    0,    0,    0,    0,   37,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   33,    0,
+       33,    0,   31,    0,   33,    0,   33,    0,   33,    0,
+       33,    0,   31,   33,    0,   31,    0,    0,    0,   33,
+        0,   33,    0,   33,    0,   33,    0,   33,    0,   33,
+       33,    0,   32,    0,    0,    0,    0,    0,    0,   29,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,   38,
+
+        0,    0,   37,   37,    0,    0,    0,   38,   38,    0,
+        0,    0,   38,    0,    0,   37,   37,   38,    0,    0,
+        0,   37,    0,    0,   38,    0,    0,   37,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,   38,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,   38,    0,
+        0,    0,   38,    0,   38,   38,   38,    0,   38,   38,
+        0,   38,    0,   38,    0,   38,   38,   38,   38,    0,
+       38,   38,    0,   38,    0,    0,    0,   38,    0,    0,
+        0,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+
+       38,   38,    0,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   33,    0,
+       33,   33,    0,   31,    0,    0,    0,   33,    0,   33,
+        0,   31,   33,    0,    0,    0,    0,    0,   33,    0,
+       33,    0,   32,    0,   33,    0,    0,   32,   33,   33,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   29,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   29,    0,    0,    0,    0,    0,    0,
+        0,   38,    0,   38,   37,   38,   38,    0,    0,   38,
+        0,   38,   37,   37,    0,    0,    0,    0,    0,   38,
+        0,    0,   37,   37,   38,   38,    0,   38,   38,   38,
+       38,    0,    0,    0,   38,   38,    0,    0,    0,    0,
+        0,   38,    0,    0,   37,   37,    0,   38,    0,    0,
+        0,   37,    0,    0,    0,    0,   38,   38,    0,   38,
+       38,    0,   38,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,   38,   38,   38,   38,   38,    0,
+
+       38,    0,    0,    0,    0,   38,   38,   38,   38,   38,
+       38,   38,   38,    0,   38,   38,    0,   38,    0,    0,
+        0,   38,   38,   38,   38,    0,    0,    0,    0,    0,
+       38,    0,   38,   38,    0,   37,    0,   38,   38,   38,
+       38,    0,   38,   38,    0,   38,    0,   38,   38,   38,
+       38,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   38,   38,    0,   38,   38,
+        0,   38,   38,    0,   38,   38,   38,   38,   38,    0,
+       38,    0,    0,    0,    0,    0,   37,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   37,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       33,   33,   33,    0,   31,    0,    0,    0,    0,    0,
+        0,   33,    0,    0,   33,   33,    0,   31,   33,   33,
+        0,    0,   33,    0,    0,   33,    0,   32,    0,   33,
+        0,    0,    0,    0,   29,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   29,    0,    0,    0,    0,    0,
+        0,    0,   38,   38,   38,    0,    0,    0,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+
+       38,    0,   38,   37,   38,   38,    0,    0,   38,   38,
+        0,   38,   37,   37,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,    0,    0,    0,    0,    0,    0,   38,
+        0,   38,    0,    0,    0,    0,    0,   38,   38,   38,
+       38,   38,   38,    0,   38,   38,    0,   38,    0,    0,
+        0,   38,   38,   38,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,    0,   38,   38,    0,
+       38,   38,   38,   38,   38,   38,   38,   38,    0,   38,
+        0,    0,   38,   38,   38,    0,    0,   38,   38,    0,
+       38,    0,   38,   38,    0,    0,    0,   38,   38,   38,
+
+       38,   38,   38,    0,   38,   38,   38,    0,    0,    0,
+       38,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,   38,    0,   38,   38,    0,    0,   38,
+       38,   38,   38,    0,   38,   38,   38,    0,    0,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+        0,   38,    0,    0,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,    0,    0,    0,   37,    0,    0,    0,
+
+        0,    0,   37,   37,    0,    0,    0,    0,    0,    0,
+        0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   33,   33,    0,   31,    0,    0,    0,
+       33,    0,   33,   33,    0,   31,   33,   33,   33,    0,
+       31,    0,    0,    0,   32,    0,   33,    0,   33,   33,
+        0,   32,    0,    0,    0,   33,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,   38,   37,
+       38,   38,    0,    0,   38,   38,    0,   38,   37,   37,
+       38,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   37,   38,   38,    0,    0,   38,   38,    0,
+       38,   37,   37,    0,    0,    0,   38,   38,    0,   38,
+       38,   38,   38,    0,   38,   38,   38,   38,    0,   38,
+       38,   38,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,   37,   38,   38,    0,    0,   38,   38,
+        0,   38,   37,   37,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,   38,   38,   38,   38,    0,   38,   38,
+
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,   38,
+       38,    0,   38,   38,    0,   38,    0,   38,   38,   38,
+       38,   38,   38,   38,    0,   38,    0,    0,   38,   38,
+       38,   38,   38,   38,   38,    0,   38,   38,   38,   38,
+        0,    0,    0,   38,   38,   38,   38,   38,   38,   38,
+       38,   38,    0,    0,    0,    0,    0,   38,   38,   38,
+       38,   38,   38,    0,    0,    0,    0,   38,    0,    0,
+        0,   38,    0,    0,    0,    0,    0,    0,   38,    0,
+        0,   38,    0,    0,   38,    0,    0,    0,    0,    0,
+
+        0,    0,    0,   38,   38,   38,   38,   38,    0,   38,
+       38,   38,    0,    0,    0,    0,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,   38,    0,   38,   38,   38,
+       38,   38,   38,   38,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   37,    0,    0,    0,    0,    0,    0,
+        0,   37,   37,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   33,   33,    0,   31,    0,    0,    0,   33,    0,
+       33,   33,   33,    0,   31,    0,    0,    0,    0,    0,
+
+        0,    0,   33,    0,   33,   33,   33,    0,   31,    0,
+        0,   33,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
+       38,    0,    0,   38,    0,    0,   38,   38,   38,   38,
+        0,   38,   38,   38,   38,    0,    0,    0,   38,   38,
+       38,    0,    0,    0,    0,    0,    0,    0,   38,   38,
+        0,    0,   38,   38,   38,    0,   38,   38,   38,   38,
+        0,    0,    0,   38,   38,   38,    0,    0,    0,    0,
+
+        0,    0,    0,   38,    0,   38,   38,    0,    0,   38,
+       38,   38,   38,    0,   38,   38,   38,    0,    0,    0,
+        0,   38,    0,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,   38,
+        0,   38,   38,   38,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,    0,    0,    0,    0,    0,    0,   38,
+       37,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,    0,   38,   37,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,   38,    0,   38,   38,   38,
+
+       38,    0,    0,    0,    0,    0,   38,   38,   38,   38,
+       38,   38,   38,   38,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,   38,   38,    0,   38,   38,    0,   38,
+        0,   38,   38,   38,    0,    0,    0,   38,    0,    0,
+        0,   38,   38,   38,   38,    0,   38,   38,   38,    0,
+        0,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,   37,    0,
+        0,    0,    0,    0,    0,    0,    0,   37,   37,    0,
+        0,    0,   37,    0,    0,    0,    0,    0,    0,    0,
+       37,   37,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   33,    0,    0,   33,
+       33,    0,    0,    0,   31,    0,    0,    0,    0,    0,
+        0,    0,   29,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   38,   38,    0,    0,   38,
+       38,   38,   38,    0,   38,   38,   38,    0,   38,    0,
+        0,    0,   38,    0,    0,    0,   38,    0,    0,    0,
+
+        0,    0,    0,   38,   38,    0,    0,   38,   38,   38,
+        0,   38,   38,   38,    0,    0,    0,   37,    0,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,   38,   38,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,   38,    0,    0,
+       38,    0,    0,   38,   38,    0,    0,   38,   38,   38,
+        0,   38,   38,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   37,    0,   38,    0,    0,    0,    0,    0,
+       38,   38,    0,    0,   38,   38,   38,   38,    0,   38,
+
+       38,   38,    0,    0,    0,    0,   38,    0,    0,    0,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,    0,    0,    0,    0,    0,
+       38,   38,    0,    0,   37,    0,   38,   38,   38,    0,
+       38,   38,   38,   38,    0,   38,   38,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,   37,   37,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,   38,   38,   38,    0,   38,   38,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   37,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   33,    0,   33,   33,    0,   31,
+       33,   33,    0,   31,    0,   31,    0,   33,    0,   33,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+       29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,    0,   38,    0,   38,    0,   38,   38,    0,    0,
+       38,    0,    0,    0,    0,   38,    0,    0,   38,    0,
+       38,   38,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   38,    0,    0,   38,
+        0,    0,   37,   37,   38,    0,   38,   38,    0,    0,
+       37,   37,   38,    0,   38,    0,    0,    0,    0,    0,
+        0,   38,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,   37,   37,
+
+        0,    0,   38,    0,   38,   38,    0,    0,   38,    0,
+        0,    0,    0,    0,    0,    0,   38,    0,    0,    0,
+       37,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,    0,    0,   38,   38,   38,    0,   38,
+       38,   38,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,   38,    0,    0,    0,    0,    0,    0,    0,   38,
+       37,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,    0,    0,    0,    0,    0,   37,   37,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   37,
+       37,   33,   33,    0,   31,    0,    0,    0,   31,    0,
+        0,    0,    0,    0,   33,    0,    0,   32,    0,   33,
+        0,    0,    0,    0,    0,   29,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   29,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,    0,    0,   37,   37,   38,   38,   38,    0,
+
+       38,   38,    0,   38,   37,   37,   38,    0,   38,   38,
+       38,   38,   38,    0,   38,   38,   37,    0,    0,    0,
+       37,   37,    0,    0,   37,   37,   38,    0,   38,    0,
+        0,   38,    0,    0,   37,   37,    0,    0,   38,    0,
+        0,   38,   38,   38,   38,    0,   38,   38,   38,   38,
+        0,   38,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,   37,   37,   38,    0,   38,    0,   37,
+        0,    0,    0,    0,    0,   38,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,   38,    0,    0,    0,    0,    0,    0,   38,   38,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,   38,   38,    0,    0,   37,   37,    0,   37,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   38,    0,    0,    0,
+        0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   37,
+        0,    0,    0,   37,    0,    0,    0,    0,    0,   33,
+        0,    0,    0,    0,    0,   33,    0,    0,   33,    0,
+       33,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   29,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+        0,   38,    0,    0,    0,   38,   38,   38,    0,    0,
+        0,    0,    0,   38,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,   38,    0,   38,   38,   38,   38,   38,
+       38,   38,   38,    0,   38,   38,   38,   38,    0,    0,
+        0,    0,   38,   38,   38,    0,   38,   38,   38,   38,
+        0,   38,    0,    0,    0,    0,    0,   38,    0,   37,
+
+        0,   38,    0,   38,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,   38,
+       38,    0,   38,   38,    0,   38,   38,    0,   38,   38,
+       38,   38,   38,    0,   38,    0,    0,    0,    0,    0,
+        0,   38,    0,    0,    0,    0,    0,    0,    0,   38,
+
+        0,    0,    0,    0,   37,   37,    0,    0,    0,    0,
+        0,    0,    0,   37,   37,    0,    0,    0,   37,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   33,    0,    0,
+       33,    0,    0,   32,    0,   33,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   38,    0,   38,   38,
+       38,   38,   38,   38,    0,   38,   38,   38,    0,    0,
+        0,   38,    0,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   38,    0,   38,   38,
+
+       38,   38,    0,   38,   38,   38,   38,    0,   38,   38,
+       38,   38,   38,   38,   38,   38,   38,    0,    0,    0,
+       38,    0,    0,    0,    0,   38,    0,   38,   38,   38,
+        0,   38,   38,   38,   38,    0,    0,    0,    0,    0,
+        0,   38,    0,    0,    0,    0,   38,    0,    0,    0,
+        0,    0,   38,    0,   38,   38,   38,   38,    0,   38,
+       38,   38,   38,    0,    0,    0,    0,    0,   38,    0,
+       38,   38,   38,   38,    0,   38,   38,   38,   38,    0,
+        0,   38,    0,    0,    0,    0,   38,    0,    0,    0,
+        0,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+
+        0,   38,    0,    0,    0,   38,   38,   38,   38,    0,
+       38,   38,   38,   38,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,    0,    0,   37,    0,    0,   37,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,    0,
+
+        0,    0,    0,    0,    0,   38,    0,    0,    0,   38,
+        0,    0,    0,    0,    0,   38,   37,   38,   38,    0,
+        0,   38,   38,    0,   38,   37,   37,    0,    0,    0,
+       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,   38,   38,   38,    0,   38,    0,    0,    0,
+        0,    0,   38,    0,   38,    0,    0,   37,    0,    0,
+        0,    0,    0,   38,   38,   38,   38,   38,    0,   38,
+       38,   38,    0,    0,    0,    0,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,   38,    0,   38,   38,   38,
+       38,   38,   38,   38,   38,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   33,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,   38,   38,   38,
+       38,    0,   38,   38,   38,    0,    0,    0,    0,    0,
+       38,   38,    0,    0,   38,   38,   38,    0,   38,   38,
+       38,   38,    0,   38,   38,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,   38,   38,   38,   38,    0,   38,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       38,    0,    0,    0,   38,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+       33,    0,   31,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   38,    0,    0,    0,   38,    0,   38,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,   38,
+       38,    0,    0,   38,   38,   38,    0,   38,   38,   38,
+
+        0,    0,    0,    0,    0,    0,    0,    0,   38,    0,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,   38,    0,    0,   37,   38,   38,   38,
+       38,   38,   38,   38,    0,   38,   38,   38,   38,   38,
+       37,    0,    0,   37,   37,   38,    0,    0,    0,   38,
+       38,   38,    0,   38,   38,   38,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   38,    0,   38,    0,    0,
+        0,    0,   38,    0,    0,    0,   38,    0,   38,   38,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   38,    0,    0,    0,    0,   38,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   38,    0,
+        0,    0,    0,   37,   38,   38,   38,   38,   38,   38,
+       38,   38,    0,    0,    0,   38,    0,    0,   37,   37,
+        0,    0,    0,    0,    0,    0,    0,    0,   33,    0,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,   38,    0,   37,   38,    0,   38,   38,    0,
+       37,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   37,    0,    0,    0,    0,    0,
+
+        0,    0,   38,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   38,   38,   38,    0,   38,   38,   38,
+       38,    0,   38,    0,    0,    0,    0,    0,   37,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+       37,    0,    0,    0,   38,    0,   38,   38,   38,   38,
+        0,   38,   38,   38,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,    0,    0,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+
+        0,    0,   38,    0,    0,    0,    0,    0,    0,   38,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+       38,   38,   38,   38,   38,    0,   38,   38,    0,    0,
+        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
+        0,    0,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        4,    4,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    5,    1,    6,    7,    8,    9,   10,   11,   12,
+       13,   14,    1,   15,    1,   16,   17,   18,   18,   18,
+       18,   18,   18,   18,   18,   18,   18,   19,   20,   21,
+       22,   23,    1,    1,   24,   25,   25,   26,   27,   25,
+       28,   28,   28,   28,   28,   25,   28,   29,   28,   28,
+       28,   28,   30,   31,   25,   28,   28,   25,   28,   28,
+       32,   33,   34,    1,   28,    1,   35,   25,   36,   37,
+
+       38,   39,   28,   28,   40,   28,   28,   41,   42,   43,
+       44,   28,   28,   45,   46,   47,   48,   28,   28,   25,
+       28,   28,   49,    1,   50,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[51] =
+    {   0,
+        1,    2,    3,    4,    2,    5,    6,    7,    1,    8,
+        1,    9,   10,   11,    8,   12,   13,   14,   10,    1,
+        1,    8,   15,   16,   16,   16,   16,   17,   17,   17,
+       17,    8,    1,    8,   16,   16,   16,   16,   16,   17,
+       16,   17,   17,   17,   17,   17,   17,   16,   18,    1
+    } ;
+
+static yyconst flex_int32_t yy_base[6482] =
+    {   0,
+        0,   49,   25,   55,   85,    0, 7389, 7383,   63,   67,
+      134,  138,  141,  142,  143,  146,   59,   60, 7329,123454,
+      156,123454,  160,123454,  148,    0,  117,123454,123454,123454,
+    123454, 7293,  154,    0,123454,123454,123454,123454, 7284,123454,
+     7245, 7242, 7233, 7161, 7141,123454,123454,  186,  190,  147,
+     7153, 6994,123454,123454,    0, 6963,   35,  130,123454,  196,
+    123454,  202,  206,  222,  163,123454,  226,  164,123454,123454,
+    123454,123454, 6996,123454, 6927,123454,  231,  247,123454,  255,
+      180,    0,123454,123454,    0,123454, 6926,    0,123454, 6893,
+     6867,  259, 6756, 6737,  263,  275,123454, 6749, 6682,    0,
+
+     6666,  175, 6667,  268, 6653,  279,  283,  275,  289,    0,
+        0,  322,  281,    0,  355,    0,  304,    0,  283,  374,
+      421, 6613, 6608,  326,  344,  285,123454, 6595, 6592,123454,
+    123454, 6591,123454,  301,123454,  349,123454,  376,  380, 6587,
+    123454, 6540, 6473,  402,123454,  296, 6466, 6457,  392,  425,
+     6465, 6457, 6447, 6447, 6422, 6300,  416, 6290, 6281, 6272,
+      440, 6205, 6229, 6239,    0,  479,  498,  444,123454,  305,
+     6215, 6221,    0,    0,    0,  545,  578,  328,  597, 6189,
+      336, 6199,  460,  468,  350,123454, 6172,  374, 6181, 5877,
+        0, 5907, 5912, 5866, 5849, 5859, 5735, 5718,  464,  474,
+
+     5709, 5703, 5434, 5407,  501, 5369,  437, 5379,    0,    0,
+     5367, 5365, 5190,  473, 5106,  644,  663, 5094, 5104,    0,
+        0,    0, 5080,  474, 5017, 5026, 4996,  485,  524, 4991,
+      490, 5001, 4744, 4757,  510, 4736,  516,    0,  711,  538,
+     4663, 4664,  549, 4662, 4650, 4155,  551, 4135,  552, 4144,
+     4026,  556,    0,    0, 4002,  557, 4011, 3981,  558, 3980,
+      570, 3990, 3966,  572,  599,  591, 3960,  592, 3835,  612,
+      623,    0,    0,  635,  639, 3804, 3801, 3782, 3805,  636,
+     3790,  638, 3789,  650, 3788,  651,  761, 3782,  655,  811,
+      860, 3722, 3716, 3195,  656, 3181,    0,123454,  678,    0,
+
+      689,  864,  701, 3156,  879, 3179,  657,  909, 3142,  678,
+      952, 1000,  693, 3141,  857, 1050,  873, 3067, 1099, 1147,
+      874, 1195,123454, 3066,  875, 3076, 1103,  892,    0,    0,
+      963,    0,    0, 1117,  881, 1244, 1287,    0, 1335, 1385,
+        0,  885, 1420, 1468, 1518,    0, 1568,    0, 1618, 1121,
+      886,  219, 1125, 1141,    0,  887, 3052,  891,  239, 1667,
+     1715,    0, 2988, 2887, 2867,  947, 2851,  957,123454,    0,
+     2791, 2764, 1165,  337,  958,  300, 2766, 1096,    0, 1749,
+        0, 2743, 1119,    0,    0,    0,    0, 1797,    0, 1846,
+        0,    0, 1120,  438,    0,    0,    0, 1873, 1921,    0,
+
+     1139, 1956, 2004, 2054, 2104, 2147, 1154, 2180, 2228, 2278,
+     2328,    0, 1158,  472, 1159, 1163, 2742, 1164,  505,  542,
+     1189, 2377, 2425, 2727, 1168, 2737, 2725, 1169, 1170,  604,
+    123454,123454, 1686,  616, 1201, 1174,  617,    0,    0, 1202,
+      672, 2467, 2500,    0, 2548, 2598,    0, 2633, 2681,    0,
+     1206,  682, 1207, 2724, 2757,    0, 2805,    0, 2854, 2873,
+     1208,  694,    0,    0,    0, 2921, 2956, 3004, 2719, 1212,
+     3047,    0,    0, 3095,    0, 3144, 3163, 1213,  959,    0,
+        0,    0, 3211, 1214, 2676, 1228, 1293, 3261, 1218, 1294,
+     2642, 1219, 3311, 1295, 1434, 1436, 3361, 1446, 3411, 2641,
+
+     1220, 3461, 1438, 1450, 1673,  348,  232, 1440, 1690, 1695,
+     1733, 1696, 1708, 2532, 1224, 3511, 1699, 1727, 3561, 1700,
+     2519, 1712, 1728, 3611, 3661,    0, 3696, 3744, 3787, 3820,
+     3868, 1740, 2487, 1226,    0, 1744, 1745, 3918,    0, 1285,
+     1746, 3961, 3994, 4042, 4092,    0, 4127,    0, 1749, 1758,
+     1765, 4175, 1766, 1767, 1775, 1868, 4225, 1852, 1872, 1873,
+     2486, 1286, 2473, 1287, 4275, 1448, 2468, 1874, 2383, 1970,
+     4325, 1880, 4375, 1972, 2164, 4425, 1982, 2460, 2448, 1659,
+     4475, 1691, 1881, 2197, 2209, 2399,  394,  436, 1893, 2403,
+     2395, 2443, 2157, 2419, 1974, 4525, 2437, 4575, 2447, 1707,
+
+     2442, 1739, 4625, 4668,    0, 4716,    0, 1777, 4751, 4799,
+     1976, 4849, 2438, 4899, 4949, 2450, 2410, 2454, 4998, 5032,
+     5075, 5123,    0, 2455, 5158, 5206, 5256, 5306, 5349, 5397,
+        0, 1779, 5432, 2411, 2446, 2420, 2456, 5480, 2425, 1840,
+     2462, 2463, 5530, 2475, 2428, 2476, 2514, 5580, 2516, 2485,
+     5630, 5680, 2518, 5729, 2526, 2741, 2407, 1875, 2858, 2379,
+     1984, 5778, 5828, 1986, 2520, 2647, 5877, 2649, 3148, 5926,
+     2650, 2389, 5976, 3804, 6026, 2659, 2388, 2651, 2381, 6076,
+     6126, 6169, 2208, 6210, 2206, 2210, 2733, 2771, 2774, 2786,
+     2875, 2207, 2879, 2899,  518, 2982, 3165, 2380, 2871, 2205,
+
+     2880, 6258, 2902, 3713, 2200, 2903, 2166, 2401, 6307, 2165,
+     2467, 6356, 6406, 6441, 6482,    0,    0,    0, 6530,    0,
+     6579, 6581, 6629, 2528, 2881,    0,    0,    0, 6672, 6720,
+        0, 2530, 6755, 2974, 6803, 3053, 6853, 6896, 6944,    0,
+     3168, 6979, 7027, 3169, 2976, 7077, 7127, 7162, 7210, 2167,
+     3177, 7253,    0,    0, 7300, 7334, 7377, 3189, 7410, 7458,
+     3193, 7508, 7543, 7584,    0,    0, 7632,    0, 7681, 7700,
+     2661, 3054,    0,    0,    0, 3055, 3710, 7748, 7791, 7839,
+        0, 3725, 7874, 2150, 2663, 2149, 2720, 3161, 7922, 3726,
+     7972, 3834, 3170, 3846, 8021, 8055, 8098, 3967, 8131, 8179,
+
+     8229, 8279, 4008, 3796, 6467, 4010, 7394, 4020, 2155, 2721,
+    123454, 8329, 8379, 2785, 2143, 2142, 2787, 3836, 4141, 8429,
+     8479, 3838, 1999, 8529, 8579, 4143, 3840, 3968, 1975, 8629,
+     2901, 1962, 8679, 8722,    0, 2959, 3969, 4012, 4153, 4768,
+     4014, 1903, 5184, 5733, 4674, 5881, 8770, 4145, 1902, 5449,
+     2961, 8819, 8852, 8886, 8936, 8979, 9027, 9077,    0, 2984,
+     9112, 9160, 9210,    0, 9253, 9286,    0, 9334, 9384,    0,
+     9419, 9467, 4780, 1879, 2986, 4147, 4781, 9510, 9543,    0,
+     9591,    0, 9640, 9642, 3045, 4675,    0,    0,    0, 9690,
+     9740, 9775, 4676, 1876, 9816,    0,    0, 9863, 9912, 9955,
+
+     5004, 9988,10036,10086,10129,10177,10227,    0, 5081,10262,
+    10310,10360,    0, 4765, 1871,10410,10445, 5082, 1864,10486,
+        0,    0,    0,10527,    0,10575,10625,    0,10675,10710,
+    10758, 5355, 5083,10808,    0, 3046,10843, 3047,10891, 3160,
+    10928,    0, 5446, 1844, 3724, 5176, 5461,10976,11026,11061,
+    11109, 1850, 5462,11152,    0,    0, 1838, 3783, 1781, 3784,
+    11200, 5178,11250, 5736, 5737, 5356,11300,11350,11385,11426,
+        0,    0,11474,11524,11574,    0,11624,11674, 7569, 5357,
+     1774, 1757, 1752, 3848, 1737, 9801,11724, 3850, 1732, 3959,
+     5738, 1725, 3961, 5741,11774, 5742,11824,11874, 5746, 5754,
+
+     1703,10471,11924, 5755, 5761, 5884, 5762,11974,    0, 4022,
+     5763,12024,    0, 1687, 4024,12074, 5885, 5886, 5890,12124,
+     5892,12174, 5908, 5893, 5902, 6187, 6459, 6216, 5894, 4169,
+      209, 2483,12224, 6217, 6313, 1682, 1686, 1669,12274,    0,
+     4666,12324,12374,    0,12409, 4667,12450,    0,    0,    0,
+    12498,    0,12547,12581,    0, 4668, 6218,    0,    0,    0,
+    12622,12670,    0, 4779,12705, 4992, 1668, 5005, 6460, 6480,
+    12753,    0,12788,12836,12879,12912, 6482, 1667, 5009, 6461,
+     6488,12960,13010,13053,13101,13151,    0, 6584,13186,13234,
+    13284,    0, 1671, 5010,13333,13367,13402, 6489, 1463,13443,
+
+        0,    0,13491,13526,13574, 6490, 6586,13617,13665,    0,
+        0,    0,13715,    0,13765,13800,13848,    0,    0,    0,
+        0,13891,13939,    0, 6607,13974,14022,    0,14072,14122,
+     6609,14172, 6599, 6611,14222,14265,14313,14363,    0, 6678,
+    14398,14446,14496,    0, 6601, 1439,14546,14596,14646,14696,
+    14739, 5011,14772,14820, 5073,14870,14920,14970,15013, 6769,
+    15046,15094,    0,15144,15194,15244,15294,    0, 6771,11411,
+     6781, 6679, 5074, 6680, 5075, 6773,15344, 6775, 6902, 6903,
+    15394, 6993, 5161, 1426,12435,12607,15444, 6995, 6904, 7005,
+     6997, 7176, 6999, 7178, 7188, 1307, 5163, 1306, 5186,15494,
+
+     5188, 7180,15544, 7192,15594, 7182,15644, 7259, 7304,15694,
+     7309, 7424, 7260, 7561, 2396,  252, 7436, 7261, 5347, 7317,
+    15744,    0, 5348, 7386,15787,15820,    0,15868,15918,    0,
+    15953,16001, 7573, 7426, 7582,16044,16077,    0,16125,    0,
+    16174,16208, 5349, 7428,    0,    0,    0, 7586, 7430, 7687,
+    16256, 1305, 5460, 7574, 7703,16306, 5753,16356,16406,16456,
+    16491,16539,    0, 7591, 7705,16582,16630,    0,    0,    0,
+    16680,    0,16730,16765,16813, 7726, 7592,    0,    0,    0,
+    16863,16906,16954,    0, 7728,16989, 1292, 1236,17037,    0,
+     1208,17087,    0, 7730, 7707,17130,17171,17204,    0,17252,
+
+    17302,    0,17337,17385,    0, 7797,17428,17461,    0,    0,
+    17509,    0,17559,17594, 7888, 7709,    0,    0,    0,17642,
+     7890,    0,    0,    0,    0,17692,    0,17727,17775, 7900,
+     7798,17825, 8027, 7799, 8104,17875,17910,17958, 7892, 8145,
+    18001,    0,    0,    0,18049,    0,18099,18134,18182,    0,
+        0,    0,    0,18225,18273,    0, 8147,18308, 1188,18356,
+        0, 5757,18406,18449,    0,18482, 5900,    0,    0,    0,
+    18530,    0,18579,18613, 6164, 7894,    0,    0,    0,18661,
+    18711,18761,18811,18854, 8157,18887,18935,18970,19018, 8105,
+     8728,19061,19109,    0,    0,19159,    0,19209,19244,    0,
+
+        0,    0,19292, 8825, 8106, 8149, 8844,19342, 8151, 8846,
+     8729,19392, 8861,19442,13428, 6165, 8730, 8985, 8845, 8869,
+     9126, 8986,    0, 9128,19492, 8987,19542, 9138,19592, 1187,
+     6166,19641, 1181, 6171,19690,19733,19774, 6208, 9130, 9132,
+    19822, 9259,19865, 9300,19913,19963,20006, 9302,20047, 1191,
+     9260, 1190, 9304, 9528, 9645, 6682, 2863, 9261, 9312,20095,
+     9317, 9433,20145, 9435, 1186, 9437, 9445,20195,20245,    0,
+    20280,20328,20371,20404, 9449, 1149, 6209,20452, 9439, 9516,
+     9557, 9518,20502, 9559, 9561, 9569, 6444, 9574,20552,    0,
+     9647, 9648,20595,20643,20678,    0,20726,20776,    0,20811,
+
+    20859,    0, 9670, 9660, 9672, 6571,20909,20952,20985,21033,
+        0,21083,    0,21133,21168, 9805, 9662,    0,    0,    0,
+     9793,21216, 9814,21266,21316,21366,    0,21416,21451,21499,
+    21542,21575,21623, 9818, 9795, 9822,    0, 9823, 9869,    0,
+    21673,21716, 6674,21749, 9961, 9824,21797,21847,    0,10002,
+     9962,21890,21923,    0,21971,22021,    0,22056,22104,    0,
+    10004,22147,22180,    0,    0,22228,    0,22278,22313,10014,
+     9963,    0,    0,    0, 6783,10006,22361,    0, 6785,10008,
+    22404,22437,22485,22535,    0,22570,10135,10136,10276,22618,
+     6894,22668,22711,22759,22794,22842,    0,10137,10278,22885,
+
+    22933,    0,    0,22983,    0,23033,23068,10288,10280,    0,
+        0,    0,23116,    0,10475,10282,23159,    0,23192,23240,
+    23290,    0,23325,    0,10484,23373,10488,10463,23423,10492,
+    23473, 6895, 1140,10465,23522,10533,23571,10493,12896,10724,
+    14756,10726, 1144,23621,10736,10494, 1127, 6896,10534,23670,
+    10857,23719,10535,23769,10859,15030,10728,15804,10869,16061,
+    23819,10944,10730,10861,23869,10945,23918,23967,10954, 1137,
+    24016, 7007,24065,24115, 7009,24158,    0, 1118, 7190,10863,
+    11075,24206,24249,24290,10946, 1111,24338,24388,11077,24438,
+    24481,    0,11079, 1106,11403,11405,11081,24529,11087,24579,
+
+    24629, 7251,24679,24729,11158,24779,11415,24829,24879,11424,
+    11159,11432,24928,24977,12439,25027,25077, 7252,11160,  983,
+     7253,25127,11161,12448,25177,11433,12452,11434,12456,12553,
+    12427,25227,  971, 7310,12429,    0,12611,25277,25327,12457,
+      960,12458,12620,25377, 7311,12599,25427,    0,25477,25512,
+    25560,25603,25636,25684,12624,12601,25734,12628,    0,12629,
+    12719,12630,25784,12721,25834,25884,25927,25975,26025,    0,
+    12731,26060,26108,26158,12802,26208,26258,26308,26351,26399,
+    26449,    0,12804,26484,26532,26582,26625, 7316,26658,26706,
+    12814,    0,26756,26806,26849,12926,26882,12723,26930,12938,
+
+    26980,27030,27080,    0,    0,27115,27163,27206,27239,27287,
+    13059,12725,13200,    0,12806,13202,27337,12808,13212,27387,
+    12888,  904,12928,13339,27437, 7373,12930,27487,    0,13432,
+    12932,27530,27578,27613,27661,27711,    0,27746,    0,13441,
+    13060,13445,13061,27794,13449,27844,27894,13204,27944,13540,
+    17188,27994,13542,  903, 7374,13206,13420,28043,13552,17445,
+    13623,  877,28092,13422,  873,13814,13450,13451,28141,13816,
+    28190,13826,13544,13546,28240,13897,13988,  872,18466,28290,
+    13990,13624,28340,28390,    0,13625,  864,  700,  706,28440,
+    28483, 7438,  670,    0, 7440,28524, 7675,13818,  663, 7688,
+
+    13820,28572,14000,28622,28672,14271,28715,    0,  653,28763,
+    28806,14412,28847,13898,14414,13899,28895,    0,13992,17148,
+    14005,28945,14424,28994,  648,29043,29086,29134,    0,    0,
+    14786,29169,29217,    0, 7697,14272,14273,29267,14798,    0,
+    29317,15060,29367,29417,29467,29510,    0,29558,    0,29608,
+    29643,29691,15072,14416,29741,29791,15834, 7789,14418,14748,
+    15846,    0,29841,15967,29891,29941,14788,29991,15969,14790,
+    15979,14792,16091,15022,    0,16103,30041,30084,30132,30182,
+        0,16180,30217,30265,30315,16222,15062,16224,30365,16234,
+    30415,  628, 7790,30465,30515,30565,30608,30656,    0,16505,
+
+    30691,15064,  626,15066,16507,30739,30789,30839,30874,30915,
+    30963,    0,    0,31013,31063,    0,31113,31148,31196,16517,
+    15796,    0,    0,    0,    0,31239,31287,    0,16588,31322,
+    31370,16779,31420,31455,31503,15836,16781,31546,31594,    0,
+        0,    0,31644,    0,31694,31729,31777,    0,    0,    0,
+    31827,16791,31870,31903,    0,    0,31951,    0, 7791,31986,
+        0,    0,    0,15838,16912,32034,32077,32125,32175,    0,
+    17003,32210,32258,17005,32308,32358,32401,32449,    0,17015,
+    32484,15840,32532,17136,32582, 7902,32632,15971,32682,17218,
+    32732,32782,17230,15973,17351,32831,17353,32880,  597, 7904,
+
+    16053,    0,17363,32930,16093,  596,16095,17475,32980,16097,
+    33030,17487,33073,33121,33171,33214,17608,33247,33295,17610,
+    33345,18871,33395,17620,  595,16226,  587,  571, 8015,16228,
+    17741,33445,16509,  575,33495,33545,17743,16511,20388,33595,
+    17753,16589,33645,16590,  573,20969,17924,16783,16785,21559,
+    17926,33695,33745,17936,16913,33795,    0,33838, 8028,16914,
+     8032,17007,17009,18007,17138,33886,18148,33936, 8033,33986,
+    34029,34070,18150,34111,17180,18160,17220,34159,34202,    0,
+    18231,17222,34250,34300,34335,18322,17224,  549,34376,    0,
+        0,34424,34467,18324,34500,  517, 8034,34548,17355,  527,
+
+    34598,18334,34648,17357,34698,34741,34789,    0,34839,    0,
+    18496,34874,34922,    0, 8096,34972, 8097,35022,35072, 8098,
+    35122,35159,35207,18508,17437,  496, 8159,17477,18585,35257,
+    17479,35307,18627,17481,35357,18629,35407,35457,35507,35542,
+    35583,    0,    0,35631,35681,    0,35731,35766,35814,18639,
+    17612,    0,    0,    0,35857,35905,    0,18901,35940,18913,
+    17614,35988,36038,36081,36129,    0, 8161,36164,36212,18984,
+    36262,36297,36338,36386,    0,    0,36436,    0,36486,36521,
+    18986,17745,    0,    0,    0,17747,18996,36569,36612,    0,
+        0,19067,36645,36693,36743,19258,36793,36843,    0,36886,
+
+    36934,36969,    0,37017,37067,    0,37102,37150,19260,17928,
+        0,19270,37193,37226,    0,    0,37274,    0,37324,37359,
+    19645,17930,    0,    0,    0,37407,37457,37500,    0,37548,
+    37598,    0,37648,37683,37731,37781,    0,19647,18008, 8720,
+    37831,37866, 8721,37914,37964, 8722,38001,38049,    0,19649,
+    19653,18009,38092,    0,    0,38125,38173,    0,38208,    0,
+    19654,38256,38306,38341,38382,    0,    0,38430,38480,    0,
+    38530,38565,38613,19662,18152,    0,    0,    0,38663,19666,
+    38713,38748,38789,    0,    0,38837,    0,38887,38922,    0,
+        0,    0,18154,38970,19670,39019,  497,39068,39118,39161,
+
+    19671,39194,    0,    0, 8813,18232,18233,39242,19672,    0,
+    19739,39292,39342,    0,39392,39435,39483,39518,19780,18326,
+    39566,18328,    0,19871,39616,20012,18458,20053,20294,39666,
+    39716,39751,39799,    0,39849,39892,39940,39975,20296,18498,
+        0,    0,    0,40023,40073,20306,18500,18502,  464,18631,
+    40123,20418,    0,40173,20430,18633,30900,    0,40223,20601,
+    18863,20692,18903,20694,18905,18907,34361,20704,40273,40323,
+    20825,18988,20827,18990,19068,21733,20837,40373,    0,20999,
+    19069,40423,    0,19262,21011,40473,19264,21182,19740,40523,
+    21184,40573,40623, 8826,19741,40673,40716,    0,21194,19781,
+
+    19782,21465,40764,    0,19872,    0,21467,40814,40864,19873,
+    40914,40957,41005,    0,41055,    0,21477,41090,41138,    0,
+    41188,    0,20013,  457,41238,41273,20014,  456,41314,    0,
+        0,    0,20054,41362,41405,41453,    0,41503,    0,21589,
+    41538,41586,    0,21601,21763,20055,41636,41671,21775,41712,
+    41760,    0,    0,41810,41860,    0,41910,41945,41993,    0,
+        0,    0,    0,42036,42084,    0,21896,42119,42167,21937,
+    20298,21939,    0,20300,42217,42260,42308,    0,42358,    0,
+    21949,42393,42441,    0,42491,20380,42541,22070,22072,    0,
+    22082,    0,42591,    0,42634,42667,    0,42715,42765,    0,
+
+    42800,42848,22153,20420,42898,22194,42941,42974,    0,43022,
+        0,43072,43107,22196,20422,    0,    0,    0,43155,43205,
+    43248,43296,43346,    0,22206,43381,43429,43479,43514,43555,
+        0,    0,43603,    0,43652,43686, 8859,20424,    0,    0,
+        0,43734,    0,43777,    0,43825,43875,    0,43925,43960,
+    44008,22327,20602,44058,    0, 8863,44108,44143, 8865,44191,
+     8977,44228,    0,22329,20603,44276,22339,44326,44376,44411,
+    44452,    0,    0,22410,20696,44500,20698,44550,22451,44600,
+        0,44650,44685,44733,44776,44809,22453,20829,44842,22463,
+    44890,44940,22584,20831,    0,22586,44990,20961,22596, 8978,
+
+    45040,22717,45090,45140,    0,45183,45216,    0,45264,45314,
+        0,45349,45397,22808,21001,45447,22810,45497,45547,45590,
+        0,45638,45688,    0,45738,45773,45821,45871,    0, 8979,
+    45906, 9140,45954, 9142,45991,    0,22820,46039,46089,46124,
+    21003,  455,46165,    0,    0,  418, 9251,46213,21005,  414,
+    46263,22891,46313,21186,46363,46413,    0,46463,46506,23082,
+    46539,    0,    0,46587,23084,21188,46637, 9253,    0,23094,
+    46687,    0,46737,46772,46820,46863,46896,23165,21469, 9316,
+    23206,35568,46944,23208,21471,23218,21551,21591,46994,23339,
+    36323,38367,47044,23341,21593,23351,21595,23526,21725,23527,
+
+    21765,21767,38774,23528,41299,47094,47144,23532,21769,23534,
+    21897,47194,21898,47244,23544,47294,47344, 9447,21941,47394,
+    23549,47444,21943,47494,23550,47543,47592,23551,47642,23674,
+    22074,  402, 9506,47692,    0,22076,    0,23675,47742,22154,
+    47792,23676,47842,22155,    0,23680,47892,47935,23682,47983,
+    48026,48074,23692,48109,48157,23697,    0,48207,    0,    0,
+        0,48257,    0,48307,48342,    0,23698,22198,    0,    0,
+        0,48383,48431,    0,23699,48466,48514,    0,48564,48599,
+    48647,23922,48690,    0,    0,48738,48788,    0,48838,48873,
+    48921,23924,22200,    0,    0,    0,48971,49014,49062,    0,
+
+    23926,49097,22331,49145,23930,49195,    0,23931,22333,49238,
+        0,49271,    0,49319,49369,    0,49404,49452,23939,49495,
+    49528,    0,    0,49576,    0,49626,49661,23943,22411,    0,
+        0,    0,49709,23947,23948,22412,22455,23949,49759,49794,
+    24022,49835,    0,    0,49883,49933,    0,49983,50018,50066,
+        0,    0,    0,50116,50159,50207,    0,24023,50242,50290,
+    22457,24024,50340,22588,  400,24028,22590,50390,22718,50440,
+    24029,50490,    0,50525,50573,50616,50649,24041,22719,50697,
+    24045,50747,50782,50830,50880,22812,24046,50923,    0,    0,
+        0,    0,50971,    0,51021,51056,51104,    0,    0,    0,
+
+        0,51147,51195,    0,24047,51230,51278,    0,51321,51354,
+        0,51402,    0,51437,24164,  388, 9508,22814,24255,51485,
+    51535,24296,51585,51635,51678,51726,51776,    0,24487,51811,
+    51859,51909,    0,51959,24934,52009,22892,    0,25526,52059,
+    25528,52109,52159,52202,    0,52250,52300,    0,52335,52383,
+    22893,    0,25538,52433,25609,52483,25650,25652,23086,52533,
+    23088,52583,25662,52633,52683,25933,52733,52783,23166,52833,
+    52876,52924,    0,52974,    0,26074,53009,    0,    0,53057,
+        0,    0,23167,53107,53157,    0,53207,53250,26076,53283,
+        0,    0,26086,26357,23210,53331,53366,26498,53407,53455,
+
+        0,53505,53555,    0,53605,53640,    0,    0,    0,    0,
+    26500,53688,53738,53788,53838,53881,26510,53914,26631,23212,
+    53962,23343,    0,26672,26674,23345,41697,26684,23556,54012,
+    54062,26855,23704,26896,24165,24166,54112,26898,54161,54210,
+    54253,26908,  352, 9510,24256,24257,54301,27129,54350,54399,
+    27131,54449,24297,  331,54499,    0,27141,24298,24488,    0,
+    27212,54549,27253,24489,54599,27255,54642,27265,54690,54733,
+    54774,27536,25530,27627,25532,54822,    0,27629,25610,54865,
+    54913,54948,    0,54996,55046,    0,55081,55129,55179,27639,
+    55222,55255,    0,    0,55303,    0,55353,55388,27760,25611,
+
+        0,    0,    0,55436,    0,27762,25654,55479,55512,    0,
+    55560,55610,    0,55645,55693,27772, 9512,55743,55786,55819,
+    55867,    0,55917,    0,55967,56002,28047,25656,    0,    0,
+        0,56050,56100,56150,    0,56200,56235,56283,56326,56359,
+    28048,25934,28049,56407,    0,56457,56500,56548,56583,25935,
+        0,28053,56631,56681,    0,28055,26078,56724,56757,    0,
+    56805,56855,    0,56890,56938,28065,56981,57014,    0,    0,
+    57062,    0,57112,57147,28070,26080,    0,    0,    0,28071,
+    26358,57195,26359,28072,57245,28145,57295,26502,57345,28146,
+    57395,    0,28147,26504,57438, 9573,57471,    0,57519,57569,
+
+        0,57604,57652,28151,57695,57728, 9632,    0,57776,    0,
+    57826,57861,28153,26632,    0,    0,    0,57909,26633,  330,
+      306, 9671,26676,28163,57959,58009,28168,58059, 9778,58102,
+        0,58150,58200,    0,58235,58283,28169,26678,58333,28170,
+    58383,58418,58466,58516,26856,28489,58559,    0,    0,    0,
+    58607,    0,58657,58692,58740,    0,    0,    0,    0,58783,
+    58831,    0,28530,58866,58914,28721,58964,59014,28812,26857,
+    28853,59064,59114,59164,59207,59255,    0, 9780,59290,59338,
+    29000,59388,29092,59438,59481,    0,59529,59579,    0,59614,
+    59662,59712,29183,59762,59812,29185,59847,29195,59888,59936,
+
+        0,    0,59986,    0,60036,60071,29516,26900,    0,    0,
+        0,60119,60154,60202,29657,60245,    0,60293,60343,    0,
+    60393,60428,29659,26902,    0,    0,    0,27133,60476,29669,
+    60526,    0,30090,27135,60569,    0,60602,60650,60700,    0,
+    60735,30231,30233,27213,60783,60818,60866,60916,27214,30243,
+    60959,    0,    0,    0,61007,    0,61057,61092,    0,    0,
+        0,61140,30614,27257,61190,30705,61240,61290,30707,27259,
+    61340,    0,30717,27537,30904,27538,27631,    0,30913,31887,
+    30917,27633,61390,61440,30921,    0,61483,27764,  309,  260,
+     9816,27766,31162,61531,28077,  214,61581,61631,61674,31164,
+
+    28175,61722,61772,61815,31174,28490,61863,    0,61906,28491,
+      199,61954,61997,31245,62045,    0,28531,    0,31336,28532,
+    62095,31338,62145,28722,    0,31348,62195,62245,62295,    0,
+        0,62330,62378,62421,62454,62502,31469,28723,    0,31471,
+    62552,62602,62652, 9953,28813,62702,    0,62752,62787,62835,
+    62878,62911,31481,28814,62959,31552,63009,28854,31743,63059,
+    63109,31745,63159,63209,63259,31755,63309,63359,63409,31917,
+    63459,63509,63559,31929,    0,63609,63659,63709,63752,32000,
+    63785,63833,63883,63933,    0,63983,64018,64066,64109,64142,
+    32002,28855,32012,64190,32083,29093,64240,32224,64290,64340,
+
+    32226,29094,64390,32236,64440,64490,64540,    0,64590,64625,
+    64673,64716,64749,32407,29187,32498,64797,64847,32500,32510,
+    64897,29189,32837,64947,64990,65038,    0, 9954,65073,33079,
+    29517,65121,    0,33220,29518,65164,65197,    0,65245,65295,
+        0,65330,65378,    0,33261,65421,65454,    0,    0,65502,
+        0,65552,65587,33263,29661,    0,    0,    0,65635,65685,
+    29663,33273,65735,65785,65835,65885,65928,33844,65961,66009,
+    66059,66102,66150,66185,66233,34035,66283,34076,66333,66383,
+    66433,66476,66524,    0, 9955,66559,34117,30091,66607,    0,
+    34208,30092,66650,66698,66733,66781,66831,    0,66866,66914,
+
+    34365,66964,    0,34374,30235,67007,67040,67088,67138,    0,
+    67173,34378,67221,67271,67321,67364,    0,34382,30237,    0,
+    67412,67447,67495,67545,    0,67580,34473,67628,34514,67678,
+    67721,67769,67819,34516,30615,34526,30616,34747,30709,34888,
+    30711,34890,30892,30894,67869,34900,35175,30922,30923,36629,
+    35176,67919,67969,68012,35185,31166,31168,  183,68060,    0,
+    31246,68110,35572,    0,68160,68203,35581,31247,68251,35585,
+        0,68294,35589,31340,68335,35780,68383,    0,31342,68433,
+    35782,68483,68533,35792,    0,68576,35863,31473,31475,68624,
+    35954,68674,68724,35956,68774,68824,68874,68924,68967,69015,
+
+    69065,    0,35966,69100,69148,    0,69198,36087,69248,69298,
+    69341,69389,    0,36178,69424,69472,31553,69522,    0,36180,
+    69572,    0,69622,36190,69672,69722,69772,36327,69822,31554,
+      169,    0,69872,36336,69922,69972,31747,36340,70022,36344,
+    31749,70072,70122,70165,    0,70213,70263,    0,70313,70348,
+    70396,70446,36535,36537,36547,31879,70489,70522,36659,    0,
+        0,    0,    0,70570,    0,70620,70655,    0,    0,    0,
+    70703,70753,36671,70803,70853,70903,36892,70953,36983,71003,
+    36985,31919,71053,36995,71103,71153,37116,71203,71253,71296,
+    71344,71394,    0,71444,71479,37118,31921,10016,71527,71577,
+
+    71620,71668,71703,71751,37128,31923,71801,37199,71851,71901,
+    71951,    0,10018,71986,72034,72077,72110,72158,37240,32004,
+    37242,    0,72208,72258,37252,72308,72351,10127,72399,37373,
+    32006,    0,72434,    0,72475,    0,    0,72523,    0,72573,
+    72608,37375,32084,    0,    0,    0,72656,37385,72706,72756,
+    72806,72849,72897,72932,72980,37506,32085,73030,37697,73080,
+    32228,    0,37699,73130,73180,73230,73280,73330,37709,73380,
+    73430,37880,37882,73480,32230,    0,37892,73530,73580,73630,
+    38017,32408,38018,32409,32502,73680,38027,32504,43540,38098,
+    73730,38139,33080,73780,38141,    0,73823,38151,33081,33221,
+
+    73871,38222,73921,73971,38224,    0,74014,38234,33222,38371,
+    33265,74062,    0,    0,74105,38380,33267,33845,    0,38384,
+    74153,74203,74246,38388,74287,33846,38579,34036,74335,38581,
+    34037,74385,74420,74461,74509,    0,    0,74559,74609,    0,
+    74659,74694,74742,38591,34077,    0,    0,    0,74785,74833,
+        0,38778,74868,74916,74966,75009,    0,75057,75107,    0,
+    75157,75192,75240,75290,38787,75340,75375,75416,75464,    0,
+        0,75514,    0,75564,75599,    0,    0,    0,38791,34078,
+    38795,34118,75647,75690,    0,75738,75788,    0,75838,75873,
+    75921,75971,38936,38938,34119,34209,38948,76020,39025,76069,
+
+    34210,76119,39167,76169,39208,10128,    0,76219,10129,76269,
+    76319,10290,76369,76406,76454,34353,76504,39210,76554,    0,
+    39220,34355,76597,76645,76680,76728,76778,    0,76813,    0,
+    39441,39532,34383,76861,    0,76904,    0,76952,77002,    0,
+    77052,77087,77135,77185,39534,39544,34384,34474,77235,39765,
+    39767,34475,77285,39777,    0,77328,    0,77376,    0,77426,
+    77461,39898,34518,39989,77509,39991,34520,77559,40001,77609,
+    77652,77700,77750,    0,40722,77785,77833,40963,77883,77933,
+    77976,78024,    0,41104,78059,10292,34748,78107,78157,    0,
+    78200,10448,78233,78281,78331,    0,78366,41106,78414,78464,
+
+    41116,78514,78564,41303,78614,78657,78705,78755,    0,78805,
+    78848,41312,78881,    0,    0,78929,41316,41320,78979,79029,
+    41411,41552,34749,79079,79129,79172,79220,79270,    0,79320,
+    79355,41554,34892,41564,79403,41701,34894,79453,41710,35177,
+    44437,41714,41718,35560,35562,    0,41959,41961,35590,79503,
+        0,79553,41971,35591,79603,    0,79653,79703,79753,79796,
+        0,42042,35784,79844,42133,35786,79894,42135,79944,    0,
+    79987,80035,80070,    0,80118,80168,    0,80203,80251,42145,
+    35864,    0,42266,80294,80327,    0,    0,80375,    0,80425,
+    80460,42407,35865,    0,    0,    0,80508,42409,10450,    0,
+
+    80558,10486,80608,80658,10525,80708,80745,80793,80843,    0,
+    80886,80934,80969,    0,81017,    0,81052,81100,42419,35958,
+        0,42640,35960,81150,42681,81200,42683,10526,81250,10527,
+    81300,81350,10738,81400,81437,81485,42693,36088,36089,    0,
+    42814,81535,42816,81585,42826,36182,81635,42947,81685,36184,
+    81735,42988,81785,42990,10740,81835,81885,10871,81935,81985,
+    10873,82035,82072,82120,36315,    0,43000,36317,    0,43121,
+    82170,82220,82263,    0,82311,82361,    0,82411,82446,82494,
+    82544,82594,43123,43133,36345,36346,    0,43254,82644,43395,
+    36539,82694,82744,82779,82820,    0,    0,82868,82918,    0,
+
+    82968,83003,83051,43397,36541,    0,    0,    0,83101,43407,
+    83151,83186,83227,    0,    0,83275,    0,83325,83360,    0,
+        0,    0,  156,10956,43544,83408,83458,43553,83508,43557,
+    36621,83551,83584,83632,    0,83682,    0,10958,83717,43561,
+    36661,    0,    0,    0,83765,83815,83858,83906,83956,    0,
+    84006,84041,43658,36663,84089,84132,84180,84230,    0,84280,
+    84315,36665,84363,43700,84413,43702,36893,84463,43712,43783,
+    36894,43974,36987,36989,84513,43976,84563,84613,84663,43986,
+    37120,84713,    0,84763,44157,84813,44159,84863,    0,37122,
+        0,44169,84913,44244,37200,84963,85013,    0,85063,85098,
+
+    85146,85189,85222,44245,37201,85270,44254,44441,85320,85370,
+    44450,85420,44454,85470,44458,85520,37244,85570,85613,85661,
+        0,85711,    0,44699,85746,85794,    0,85844,44701,37246,
+        0,44711,85894,44782,44823,85944,44825,85994,44835,86044,
+    44848,86094,86137,86185,    0,86235,86270,44856,37377,37379,
+    86318,44858,86368,37507,    0,44868,45189,86418,37508,45230,
+        0,45232,    0,86468,    0,86511,86544,    0,86592,86642,
+        0,86677,86725,45242,37701,86775,45363,86825,86875,86918,
+        0,86966,87016,    0,87066,87101,87149,87199,    0,11089,
+    87234,11091,87282,11151,87319,    0,45365,45375,37703,87367,
+
+    45596,45787,37884,37886,87417,45789,87460,    0,87508,87543,
+    87591,    0,87626,45799,38019,    0,45920,87674,45922,38099,
+    87724,45932,87774,46007,46008,38100,    0,46017,87824,87874,
+    87924,46138,87967,    0,46140,38143,88015,46150,46163,38145,
+    46165,38226,38228,88065,46167,88108,46171,38359,88156,46512,
+    46553,88206,38361,88256,46555,88306,46565,88356,88406,88449,
+        0,88497,88547,    0,88582,88630,88680,46786,88730,46788,
+    88780,88815,88863,46798,88906,    0,    0,88954,89004,    0,
+    89054,89089,89137,    0,    0,    0,    0,89180,89228,    0,
+    46869,89263,89311,89361,89404,89452,89487,89535,89585,46910,
+
+    89635,46912,89685,89735,89778,89826,89861,46922,38389,89909,
+    47547,38390,47549,89959,90009,90052,90100,    0,47551,90135,
+    90183,38583,   80,47555,38585,90233,38766,    0,47556,90283,
+    90333,47564,90383,38768,90433,47568,90483,    0,90526,90574,
+    90624,    0,90674,90709,38796,    0,47572,11152,47573,47574,
+    90757,47941,38797,90807,    0,48032,38940,48123,38942,39168,
+    90857,48125,39169,90907,48135,90957,    0,91000,48356,39212,
+    48358,91048,91098,91148,91198,91241,91289,91324,91372,91422,
+    91472,91515,11388,91548,91596,91646,91689,91737,91772,91820,
+        0,48368,39214,91863,91896,    0,91944,91994,    0,92029,
+
+    92077,48381,92120,92153,92201,    0,92251,    0,92301,92336,
+    48383,39442,    0,    0,    0,92384,48385,92434,    0,92484,
+    92527,48389,92560,92608,92658,92708,92751,92799,92834,11390,
+    48480,39443,48482,92882,48492,48613,92932,92982,93017,93058,
+        0,    0,93106,    0,93156,93191,    0,    0,    0,93239,
+    39536,    0,48615,    0,    0,93289,48625,93339,48696,93389,
+    93432,    0,93480,93530,    0,93565,93613,93663,48887,93713,
+    48889,48899,49020,39538,39769,93763,49111,39771,93813,49113,
+    93863,49123,39899,    0,49244,    0,49285,93913,49287,93963,
+    94013,94056,94104,94139,94187,49297,94237,49418,94287,94337,
+
+    94387,    0,94437,94472,94520,94563,94596,49420,39900,    0,
+    49430,94644,49501,94694,94729,94770,    0,    0,94818,94868,
+        0,94918,94953,49542,39993,    0,    0,    0,95001,49544,
+    49554,95051,49675,95101,95136,    0,95177,    0,    0,95225,
+        0,95260,49677,49687,39995,95308,95358,49808,95408,95458,
+    95508,95551,95599,    0,12412,95634,49810,40723,95682,49820,
+    95732,95775,49833,40724,49835,40964,49837,95823,49841,50032,
+    50034,40965,95873,50044,95923,95973,50165,96023,96073,50256,
+    96123,96173,    0,96216,96264,96299,96347,96397,    0,96432,
+    50258,96480,50268,50539,96530,50541,41108,96580,96630,96673,
+
+    96721,96764,96812,96847,96895,50551,96945,96995,41110,97045,
+    50622,50663,41291,97095,97138,    0,97186,97236,    0,97286,
+    97321,97369,97419,50665,50675,41293,97469,50796,97519,41321,
+    97569,50798,97619,50808,97669,50929,97719,97769,51070,51072,
+    97819,41322,    0,51082,12414,51153,    0,97869,    0,    0,
+        0,   44,    0,97919,    0,    0,41412,    0,51244,97969,
+    51246,51256,41413,98019,    0,98062,98110,98160,    0,98210,
+    98245,51327,41556,51368,41558,51370,12450,51380,98293,98343,
+    98386,98434,98484,    0,98534,98569,41689,    0,51451,    0,
+        0,    0,    0,98617,    0,98667,    0,51453,41691,98717,
+
+    51463,41719,    0,51684,98767,51825,12584,51827,98817,98867,
+    51837,    0,98910,98958,    0,99008,99043,52208,99091,52349,
+    12586,99141,12622,99191,12733,99241,99278,99326,52351,    0,
+        0,   39,    0,99376,    0,99426,52361,52882,12735,53023,
+    53025,53035,123454,99476,99494,99512,99530,99548,99560,99566,
+    99576,99592,99608,99624,99642,99660,99678,99696,99708,99724,
+    99740,99757,99774,99792,99809,99827,99845,99863,99881,99899,
+    99917,99934,99951,99969,99987,100005,100023,100041,100059,100077,
+    100095,100113,100131,100149,100167,100185,100203,100221,100239,100257,
+    100275,100293,100311,100328,100345,100362,100379,100397,100415,100433,
+
+    100450,100468,100486,100498,100514,100530,100547,100565,100577,100594,
+    100612,100629,100646,100664,100682,100700,100717,100735,100753,100771,
+    100789,100807,100825,100842,100859,100877,100895,100913,100931,100949,
+    100967,100985,101003,101021,101039,101056,101074,101092,101110,101128,
+    101146,101164,101182,101200,101218,101236,101254,101272,101290,101308,
+    101326,101344,101362,101379,101396,101414,101432,101449,101466,101484,
+    101502,101520,101538,101556,101574,101592,101610,101628,101646,101664,
+    101682,101700,101718,101736,101754,101772,101790,101808,101826,101844,
+    101862,101880,101898,101916,101934,101952,101970,101988,102006,102024,
+    102042,102060,102078,102096,102114,102132,102150,102168,102186,102203,
+
+    102220,102238,102256,102274,102292,102310,102328,102346,102364,102382,
+    102400,102418,102435,102453,102471,102489,102507,102525,102543,102561,
+    102579,102597,102615,102633,102651,102669,102687,102705,102723,102741,
+    102759,102777,102795,102813,102831,102848,102865,102883,102901,102919,
+    102937,102955,102973,102991,103009,103027,103045,103063,103081,103099,
+    103117,103135,103153,103171,103189,103206,103224,103242,103260,103278,
+    103296,103314,103332,103350,103368,103386,103404,103422,103440,103458,
+    103476,103494,103512,103530,103548,103565,103583,103601,103619,103637,
+    103655,103673,103691,103709,103727,103745,103763,103780,103797,103814,
+    103831,103849,103867,103885,103903,103921,103939,103957,103975,103993,
+
+    104011,104029,104047,104065,104083,104101,104119,104137,104155,104173,
+    104191,104209,104227,104245,104263,104281,104299,104317,104335,104353,
+    104371,104389,104407,104425,104443,104460,104477,104493,104510,104528,
+    104546,104564,104582,104600,104618,104636,104654,104672,104690,104708,
+    104726,104744,104762,104780,104798,104816,104834,104852,104870,104888,
+    104906,104924,104942,104960,104978,104996,105014,105032,105050,105068,
+    105086,105104,105122,105140,105158,105176,105194,105212,105230,105248,
+    105266,105284,105302,105320,105338,105356,105374,105392,105410,105428,
+    105446,105464,105482,105500,105518,105536,105554,105572,105590,105607,
+    105624,105642,105660,105678,105696,105714,105732,105750,105768,105786,
+
+    105804,105822,105840,105858,105876,105894,105912,105930,105948,105966,
+    105984,106002,106020,106038,106056,106074,106092,106110,106128,106146,
+    106164,106182,106200,106218,106236,106253,106270,106288,106306,106324,
+    106342,106360,106378,106396,106414,106432,106450,106468,106486,106504,
+    106522,106540,106558,106576,106594,106612,106630,106648,106666,106684,
+    106702,106720,106738,106756,106774,106792,106810,106828,106846,106864,
+    106882,106900,106918,106936,106954,106972,106990,107008,107026,107044,
+    107062,107080,107098,107116,107134,107152,107170,107188,107206,107224,
+    107242,107260,107278,107296,107314,107331,107349,107367,107385,107403,
+    107421,107439,107457,107475,107493,107511,107529,107547,107565,107583,
+
+    107601,107619,107637,107655,107673,107691,107709,107727,107745,107763,
+    107781,107799,107817,107835,107853,107871,107889,107907,107925,107943,
+    107961,107979,107997,108015,108033,108051,108069,108087,108105,108123,
+    108141,108159,108177,108195,108213,108231,108249,108267,108285,108303,
+    108321,108339,108357,108375,108393,108411,108429,108447,108465,108483,
+    108501,108518,108536,108554,108572,108590,108608,108626,108644,108662,
+    108679,108697,108714,108732,108750,108768,108786,108804,108822,108840,
+    108858,108876,108894,108912,108930,108948,108966,108984,109002,109020,
+    109038,109056,109074,109092,109110,109128,109146,109164,109182,109200,
+    109218,109236,109254,109272,109290,109308,109326,109344,109362,109380,
+
+    109398,109416,109434,109452,109470,109488,109506,109524,109542,109560,
+    109578,109596,109614,109632,109650,109668,109686,109704,109722,109740,
+    109758,109776,109794,109811,109829,109847,109865,109883,109901,109919,
+    109937,109955,109973,109991,110009,110027,110045,110063,110081,110099,
+    110117,110135,110153,110171,110189,110207,110225,110243,110261,110279,
+    110297,110315,110333,110351,110369,110387,110405,110423,110441,110459,
+    110477,110495,110513,110531,110549,110567,110585,110603,110621,110639,
+    110657,110675,110693,110711,110729,110747,110765,110783,110801,110819,
+    110837,110855,110873,110891,110909,110927,110945,110963,110981,110999,
+    111017,111035,111053,111071,111089,111107,111125,111143,111161,111179,
+
+    111197,111215,111233,111251,111269,111287,111305,111323,111341,111359,
+    111377,111395,111413,111431,111449,111467,111485,111503,111521,111539,
+    111557,111575,111593,111611,111629,111647,111665,111683,111701,111719,
+    111737,111755,111773,111791,111809,111827,111845,111863,111881,111899,
+    111917,111935,111953,111971,111989,112007,112025,112043,112061,112079,
+    112097,112115,112133,112151,112169,112187,112205,112223,112241,112259,
+    112277,112295,112313,112331,112349,112367,112385,112403,112421,112439,
+    112457,112475,112493,112511,112529,112547,112565,112583,112601,112619,
+    112637,112655,112673,112691,112709,112727,112745,112763,112781,112799,
+    112817,112835,112853,112871,112889,112907,112925,112943,112961,112979,
+
+    112997,113015,113033,113051,113069,113087,113105,113123,113141,113159,
+    113177,113195,113213,113231,113249,113267,113285,113303,113321,113339,
+    113357,113375,113393,113411,113429,113447,113465,113483,113501,113519,
+    113537,113555,113573,113591,113609,113627,113645,113663,113681,113699,
+    113717,113735,113753,113771,113789,113807,113825,113843,113861,113879,
+    113897,113915,113933,113951,113969,113987,114005,114023,114041,114059,
+    114077,114095,114113,114131,114148,114166,114184,114202,114220,114238,
+    114256,114274,114292,114310,114328,114346,114364,114382,114400,114418,
+    114436,114454,114472,114490,114508,114526,114544,114562,114580,114598,
+    114616,114634,114652,114670,114688,114706,114724,114742,114760,114778,
+
+    114796,114814,114832,114850,114868,114886,114904,114922,114940,114958,
+    114976,114994,115012,115030,115048,115066,115084,115102,115120,115138,
+    115156,115174,115192,115210,115228,115246,115264,115281,115299,115317,
+    115335,115353,115371,115389,115407,115425,115443,115461,115479,115497,
+    115515,115533,115551,115569,115587,115605,115623,115641,115659,115677,
+    115695,115713,115731,115749,115767,115785,115803,115821,115839,115857,
+    115875,115893,115911,115929,115947,115965,115983,116001,116019,116037,
+    116055,116073,116091,116109,116127,116145,116163,116181,116199,116217,
+    116235,116253,116271,116289,116307,116325,116343,116361,116379,116397,
+    116415,116433,116451,116469,116487,116505,116523,116541,116559,116577,
+
+    116595,116613,116631,116649,116667,116685,116703,116721,116739,116757,
+    116775,116793,116811,116829,116847,116865,116883,116901,116919,116937,
+    116955,116973,116991,117009,117027,117045,117063,117081,117099,117117,
+    117135,117153,117171,117189,117207,117225,117243,117261,117279,117297,
+    117315,117333,117351,117369,117387,117405,117423,117441,117459,117477,
+    117495,117513,117531,117549,117567,117585,117603,117621,117639,117657,
+    117675,117693,117711,117729,117747,117765,117783,117801,117819,117837,
+    117855,117873,117891,117909,117927,117945,117963,117981,117999,118017,
+    118035,118053,118071,118089,118107,118125,118143,118161,118179,118197,
+    118215,118233,118251,118269,118287,118305,118323,118341,118359,118377,
+
+    118395,118413,118431,118449,118467,118485,118503,118521,118539,118557,
+    118575,118593,118611,118629,118647,118665,118683,118701,118719,118737,
+    118755,118773,118791,118809,118827,118845,118863,118881,118899,118917,
+    118935,118953,118971,118989,119007,119025,119043,119061,119079,119097,
+    119115,119133,119151,119169,119187,119205,119223,119241,119259,119277,
+    119295,119313,119331,119349,119367,119385,119403,119421,119439,119457,
+    119475,119493,119511,119529,119547,119565,119583,119601,119619,119637,
+    119655,119673,119691,119709,119727,119745,119763,119781,119799,119817,
+    119835,119853,119871,119889,119907,119925,119943,119961,119979,119997,
+    120015,120033,120051,120069,120087,120105,120123,120141,120159,120177,
+
+    120195,120213,120231,120249,120267,120285,120303,120321,120339,120357,
+    120375,120393,120411,120429,120447,120465,120483,120501,120519,120537,
+    120555,120573,120591,120609,120627,120645,120663,120681,120699,120717,
+    120735,120753,120771,120789,120807,120825,120843,120861,120879,120897,
+    120915,120933,120951,120969,120987,121005,121023,121041,121059,121077,
+    121095,121113,121131,121149,121167,121185,121203,121221,121239,121257,
+    121275,121293,121311,121329,121347,121365,121383,121401,121419,121437,
+    121455,121473,121491,121509,121527,121545,121563,121581,121599,121617,
+    121635,121653,121671,121689,121707,121725,121743,121761,121779,121797,
+    121815,121833,121851,121869,121887,121905,121923,121941,121959,121977,
+
+    121995,122013,122031,122049,122067,122085,122103,122121,122139,122157,
+    122175,122193,122211,122229,122247,122265,122283,122301,122319,122337,
+    122355,122373,122391,122409,122427,122445,122463,122481,122499,122517,
+    122535,122553,122571,122589,122607,122625,122643,122661,122679,122697,
+    122715,122733,122751,122769,122787,122805,122823,122841,122859,122877,
+    122895,122913,122931,122949,122967,122985,123003,123021,123039,123057,
+    123075,123093,123111,123129,123147,123165,123183,123201,123219,123237,
+    123255,123273,123291,123309,123327,123345,123363,123381,123399,123417,
+    123435
+    } ;
+
+static yyconst flex_int16_t yy_def[6482] =
+    {   0,
+     5143,    1,    1,    1, 5143,    5, 5144, 5144, 5145, 5145,
+     5146, 5146, 5147, 5147, 5147, 5147, 5148, 5148, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5149, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5150, 5143, 5143, 5143, 5143, 5143, 5143,
+     5149, 5149, 5149, 5149, 5149, 5143, 5143, 5143, 5143, 5143,
+     5149, 5149, 5143, 5143, 5151, 5151, 5151, 5151, 5143, 5143,
+     5143, 5152, 5152, 5153, 5143, 5143, 5154, 5143, 5143, 5143,
+     5143, 5143, 5155, 5143, 5156, 5143, 5157, 5143, 5143, 5143,
+     5143, 5149, 5143, 5143, 5150, 5143, 5158, 5150, 5143, 5149,
+     5149, 5149, 5149, 5149, 5143, 5143, 5143, 5149, 5149, 5151,
+
+     5151, 5151, 5151, 5151, 5151, 5143, 5143, 5143,   63,   63,
+     5159, 5153, 5143,  112, 5160,  112, 5161,  112, 5143,  112,
+     5162, 5163, 5164, 5154, 5165, 5143, 5143, 5166, 5167, 5143,
+     5143, 5156, 5143, 5157, 5143, 5157, 5143, 5143, 5143, 5158,
+     5143, 5149, 5149, 5143, 5143, 5143, 5149, 5149, 5143, 5143,
+     5149, 5149, 5151, 5151, 5151, 5151, 5143, 5151, 5151, 5151,
+     5143, 5143, 5168, 5169, 5159, 5160,  166, 5161, 5143, 5143,
+     5170, 5171,  120,  120,  167, 5172, 5162, 5143,  177, 5163,
+     5173, 5164, 5143, 5165, 5143, 5143, 5166, 5174, 5167, 5149,
+     5149, 5175, 5176, 5149, 5149, 5149, 5149, 5151, 5151, 5151,
+
+     5151, 5151, 5151, 5151, 5143, 5168, 5177, 5169,  167,  167,
+     5178, 5179, 5170, 5180, 5171, 5172,  216, 5181, 5182,  179,
+      179,  217, 5163, 5183, 5184, 5185, 5166, 5186, 5149, 5175,
+     5187, 5176, 5149, 5149, 5149, 5151, 5143, 5188, 5143, 5151,
+     5151, 5151, 5143, 5143, 5143, 5168, 5189, 5178, 5190, 5179,
+     5170, 5191,  217,  217, 5181, 5192, 5182, 5163, 5183, 5184,
+     5193, 5185, 5166, 5186, 5194, 5143, 5175, 5195, 5149, 5196,
+     5151, 5188, 5197, 5143, 5151, 5151, 5143, 5143, 5168, 5189,
+     5178, 5198, 5170, 5191, 5181, 5199, 5143, 5184, 5200, 5143,
+     5201, 5202, 5203, 5175, 5195, 5149, 5204, 5143, 5205, 5197,
+
+     5143, 5151, 5143, 5143, 5168, 5178, 5198, 5143, 5181, 5199,
+     5163, 5143, 5163, 5184, 5200, 5143, 5166, 5166, 5206, 5207,
+     5143, 5201, 5143, 5202, 5208, 5203, 5175, 5149, 5204, 5209,
+     5143, 5210, 5211, 5168, 5168, 5143,  308,  308, 5143, 5143,
+      308, 5170,  308, 5143, 5143,  311, 5143,  311, 5143, 5212,
+     5213, 5214, 5184, 5166,  316, 5166, 5166, 5215, 5216, 5217,
+     5207,  361, 5218, 5219, 5202, 5220, 5175, 5175, 5143, 5209,
+     5210, 5211, 5168, 5168, 5221, 5222, 5223, 5223,  337,  337,
+      339, 5170, 5170,  308,  337,  308,  339, 5143,  308, 5224,
+      343,  344, 5225, 5226,  343,  343,  380,  344, 5143,  344,
+
+     5170,  344, 5143, 5143, 5143,  403, 5227,  406, 5143, 5143,
+     5143,  409, 5228, 5229, 5230, 5231, 5231, 5232, 5233, 5234,
+     5235, 5236, 5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243,
+     5143, 5143, 5244, 5245, 5246, 5247, 5248,  380,  380, 5249,
+     5250,  380,  380,  442, 5143, 5143,  442,  442, 5143,  442,
+     5251, 5252, 5253,  449,  454,  454, 5143,  449, 5254,  449,
+     5255, 5256,  460,  460,  455, 5143,  466, 5143, 5257, 5257,
+      466,  466,  468, 5143,  471, 5258,  471, 5259, 5260,  477,
+      477,  467, 5143, 5261, 5262, 5261, 5263, 5143, 5264, 5265,
+     5266, 5267, 5143, 5268, 5269, 5270, 5143, 5271, 5143, 5272,
+
+     5273, 5143, 5274, 5275, 5276, 5276, 5276, 5277, 5276, 5278,
+     5279, 5280, 5281, 5282, 5283, 5143, 5284, 5285, 5143, 5286,
+     5287, 5286, 5288, 5143, 5143,  525,  525, 5143,  527,  529,
+     5143, 5289, 5290, 5291,  531, 5292, 5293, 5143,  538, 5294,
+     5295,  538,  538, 5143, 5143,  542,  542,  542, 5289, 5296,
+     5297, 5143, 5298, 5298, 5299, 5300, 5143, 5301, 5302, 5303,
+     5304, 5305, 5304, 5306, 5143, 5307, 5307, 5308, 5309, 5310,
+     5143, 5311, 5143, 5312, 5313, 5143, 5314, 5314, 5315, 5316,
+     5143, 5317, 5318, 5319, 5320, 5321, 5322, 5322, 5323, 5322,
+     5324, 5143, 5325, 5325, 5326, 5143, 5327, 5143, 5328, 5329,
+
+     5328, 5330, 5143,  603,  596, 5143,  604, 5331,  604, 5143,
+     5332, 5143, 5333, 5143, 5143, 5334, 5334, 5335, 5336, 5143,
+      620, 5143,  621, 5337,  621, 5143, 5143, 5143,  628, 5143,
+      629, 5338,  629, 5339, 5337, 5339, 5340, 5143, 5341, 5342,
+     5343, 5344, 5143, 5345, 5346, 5345, 5347, 5143, 5348, 5349,
+     5143, 5143, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 5354,
+     5355, 5143, 5143, 5357, 5358, 5359, 5360, 5361, 5356, 5143,
+     5353, 5353, 5143, 5362, 5143, 5362, 5362, 5363, 5362, 5143,
+     5143,  681, 5364,  681, 5364, 5365, 5366, 5367, 5368, 5369,
+     5143, 5370, 5370, 5371, 5371, 5372, 5373, 5373, 5372, 5373,
+
+     5374, 5143, 5375, 5376, 5377, 5377, 5378, 5379, 5143, 5378,
+     5379, 5143, 5143,  713,  713,  713,  715,  702, 5143,  715,
+     5376,  715, 5143, 5380, 5381,  722,  722,  714,  723, 5143,
+      723, 5382,  723, 5383, 5143, 5384, 5143,  737, 5143,  738,
+     5377,  738, 5143, 5385, 5386, 5143, 5143,  747, 5143, 5387,
+     5387,  748,  752,  748, 5388, 5143,  756, 5387,  757, 5143,
+     5389, 5143,  762,  762,  762,  764, 5143,  764, 5390,  764,
+     5391, 5392,  770,  770,  763, 5389, 5393, 5143,  778, 5143,
+      779, 5394,  779, 5395, 5396, 5395, 5397, 5398, 5143, 5399,
+     5143, 5400, 5400, 5401, 5390, 5143,  796, 5394,  797, 5143,
+
+     5143, 5143, 5402, 5403, 5404, 5405, 5143, 5406, 5406, 5143,
+     5143, 5143, 5143, 5407, 5407, 5407, 5408, 5409, 5410, 5143,
+     5143, 5411, 5412, 5143, 5143, 5413, 5413, 5409, 5412, 5143,
+     5414, 5414, 5143,  833,  834, 5415, 5416, 5417, 5418, 5419,
+     5419, 5420, 5421, 5422, 5422, 5423, 5143, 5424, 5425, 5426,
+     5143, 5427, 5428, 5143, 5143,  855, 5143, 5143,  856, 5429,
+      856, 5143, 5143,  863,  863,  863,  865, 5143, 5143,  865,
+      865, 5143, 5430, 5429, 5431, 5432, 5433,  872,  878,  878,
+     5143,  872, 5426,  872, 5434, 5435,  884,  884,  879, 5143,
+     5143,  891, 5436, 5437,  892,  895,  892, 5143, 5143,  899,
+
+     5425,  900, 5143, 5143,  904, 5143, 5143,  905, 5438,  905,
+     5143, 5143,  912, 5432, 5437, 5143,  916, 5439, 5430,  917,
+      920,  917,  903,  903,  903, 5143, 5143,  903, 5143,  903,
+     5143, 5440, 5438, 5143,  934,  929,  934,  929, 5143,  929,
+      929,  931, 5430, 5441, 5442, 5439, 5443, 5143, 5143,  949,
+     5143, 5444, 5444,  950,  954,  950, 5445, 5446, 5445, 5446,
+     5143, 5447, 5143, 5448, 5449, 5450, 5143, 5143,  968,  969,
+      970,  969, 5143, 5143, 5143,  973, 5143, 5143, 5451, 5451,
+     5452, 5453, 5454, 5453, 5453, 5453, 5143, 5453, 5453, 5455,
+     5456, 5453, 5457, 5458, 5143, 5459, 5143, 5143, 5460, 5460,
+
+     5454, 5461, 5143, 5461, 5461, 5462, 5461, 5143, 1008, 5463,
+     5464, 5143, 1012, 5465, 5466, 5143, 5467, 5468, 5469, 5143,
+     5470, 5143, 5471, 5472, 5472, 5473, 5473, 5474, 5473, 5475,
+     5475, 5475, 5143, 5476, 5476, 5477, 5478, 5477, 5143, 1039,
+     5477, 5143, 5143, 1043, 1043, 5477, 1043, 1043, 1047, 1039,
+     5143, 1047, 5143, 1047, 1042, 5479, 5480, 1054, 1054, 1045,
+     1042, 5143, 1042, 5477, 1042, 1033, 5477, 5481, 5482, 5483,
+     5143, 1071, 1071, 5143, 1073, 1075, 5484, 5485, 5486, 5487,
+     5488, 5143, 5143, 1083, 5143, 5143, 1084, 5489, 1084, 5143,
+     5143, 1091, 5478, 5143, 5490, 5143, 1096, 5491, 5492, 1097,
+
+     1100, 1097, 5143, 1103, 5143, 5493, 5493, 1103, 5143, 1103,
+     1108, 1105, 5143, 1108, 5143, 1108, 5143, 1116, 1116, 1104,
+     1109, 1117, 5143, 1117, 5493, 1117, 5143, 1127, 5143, 5143,
+     5494, 5143, 5494, 5495, 5143, 1135, 5143, 5143, 1136, 5496,
+     1136, 5143, 5143, 1143, 5497, 5492, 5143, 5143, 5143, 5143,
+     1148, 5498, 1151, 5143, 1132, 5143, 5143, 5143, 1156, 5499,
+     1159, 5143, 1162, 5143, 5143, 5143, 5143, 1164, 5500, 5501,
+     5502, 5502, 5503, 5504, 5505, 5506, 5143, 5507, 5508, 5509,
+     5143, 5510, 5511, 5511, 5512, 5511, 5143, 5512, 5512, 5513,
+     5514, 5515, 5514, 5516, 5517, 5518, 5519, 5518, 5520, 5143,
+
+     5521, 5522, 5143, 5523, 5143, 5524, 5143, 5525, 5526, 5143,
+     5527, 5528, 5529, 5530, 5531, 5531, 5532, 5533, 5534, 5535,
+     5143, 1221, 5536, 5537, 1221, 1221, 1225, 5143, 5143, 1225,
+     1225, 5143, 5538, 5539, 5540, 1232, 1236, 1236, 5143, 1232,
+     5143, 1232, 5541, 5542, 1242, 1242, 1237, 5543, 5543, 5544,
+     5143, 5545, 5546, 5547, 5548, 5143, 5549, 5143, 5143, 5143,
+     1260, 5143, 1256, 5550, 5550, 1260, 5143, 1260, 1266, 1262,
+     5143, 1266, 5143, 1266, 5143, 5551, 5552, 1274, 1274, 1261,
+     5143, 1275, 5143, 1275, 5550, 1275, 5545, 5553, 5143, 1289,
+     5553, 5143, 1292, 5554, 5552, 1292, 1259, 1292, 1296, 5143,
+
+     5143, 1296, 1296, 5143, 1296, 5555, 1304, 1307, 1297, 1307,
+     5143, 1304, 5143, 1304, 5556, 5557, 1314, 1314, 1308, 5143,
+     5557, 1297, 1259, 1297, 1256, 5143, 1297, 1297, 5143, 5558,
+     5559, 5143, 5559, 5559, 5560, 5143, 1336, 5143, 5561, 5561,
+     1336, 1336, 1341, 1338, 5143, 1341, 5143, 1341, 5143, 1348,
+     1348, 1337, 1329, 1349, 5143, 1349, 5561, 1349, 5562, 5143,
+     1360, 5562, 5143, 1363, 1364, 1364, 5562, 1363, 1364, 1360,
+     5143, 1363, 5143, 1363, 5563, 5564, 1374, 1374, 1366, 5143,
+     5143, 5143, 5143, 1381, 5565, 1384, 5143, 1387, 5143, 5566,
+     5566, 1387, 5143, 1387, 1389, 5143, 1392, 5143, 1392, 1399,
+
+     1399, 1388, 5143, 5567, 5568, 5569, 5570, 5143, 5571, 5572,
+     5573, 5143, 5574, 5143, 5575, 5576, 5577, 5578, 5579, 5577,
+     5580, 5573, 1412, 5581, 5143, 5582, 5143, 5583, 5143, 5584,
+     5585, 5586, 5584, 5585, 5143, 1427, 1427, 5587, 5588, 5589,
+     5143, 5590, 1429, 5591, 5143, 5143, 1446, 5592, 1446, 5592,
+     5593, 5592, 5594, 5594, 5594, 5595, 5595, 5596, 5597, 5143,
+     5598, 5599, 5143, 5600, 5601, 5600, 5602, 5143, 5143, 1469,
+     1469, 5143, 1471, 1473, 5603, 5604, 5605, 5143, 5606, 5607,
+     5608, 5609, 5143, 5610, 5610, 5611, 5612, 5613, 5143, 1489,
+     5614, 5615, 1489, 5143, 1489, 1493, 5143, 5143, 1493, 1493,
+
+     5143, 1493, 5601, 5613, 5616, 5617, 5143, 1501, 1508, 5143,
+     1508, 5143, 1501, 5143, 1501, 5618, 5619, 1515, 1515, 1509,
+     5620, 5143, 5621, 5143, 5143, 5143, 1526, 5143, 1526, 5143,
+     1529, 1531, 5143, 5622, 5623, 5624, 1533, 5623, 5625, 1507,
+     5143, 1507, 1542, 1542, 5626, 5627, 5143, 5143, 1548, 5628,
+     5619, 1548, 1548, 1552, 5143, 5143, 1552, 1552, 5143, 1552,
+     5622, 1559, 1562, 1542, 1562, 5143, 1559, 5143, 1559, 5629,
+     5630, 1569, 1569, 1563, 5631, 5632, 5143, 1577, 5633, 5634,
+     1577, 1577, 5143, 5143, 1581, 1581, 5635, 5636, 5637, 5143,
+     5638, 5143, 1592, 5143, 1594, 5143, 1590, 5639, 5639, 1594,
+
+     5143, 1594, 1596, 5143, 1600, 5143, 1600, 5640, 5641, 1607,
+     1607, 1595, 5143, 1613, 5642, 5641, 1613, 1592, 1613, 5143,
+     5143, 1617, 1617, 1617, 5635, 5143, 5643, 5644, 5143, 5645,
+     5143, 5646, 5646, 5647, 5648, 5649, 5143, 5650, 1629, 5651,
+     5652, 5653, 5653, 5143, 5654, 5654, 5648, 5655, 5647, 5648,
+     5656, 5143, 5657, 5143, 5658, 1631, 5650, 1629, 5651, 1644,
+     5143, 5654, 5654, 5659, 5143, 5660, 5661, 5143, 5662, 5662,
+     5663, 5143, 5143, 5143, 5664, 1665, 1676, 5664, 5665, 5666,
+     5667, 5143, 1668, 1668, 5668, 5669, 5143, 5143, 5670, 5143,
+     1690, 1691, 5666, 5669, 5671, 5671, 5672, 5143, 5673, 5143,
+
+     5143, 5674, 5143, 5143, 5675, 5143, 5676, 5143, 5143, 5677,
+     5677, 5678, 5143, 5143, 5679, 5143, 5143, 1698, 5680, 5681,
+     5682, 5143, 5680, 5683, 5143, 5684, 5685, 5686, 5686, 5687,
+     5688, 5143, 5689, 5690, 5675, 1706, 5691, 5143, 5143, 5692,
+     5681, 5692, 5693, 5143, 5694, 5695, 5143, 1747, 5143, 1747,
+     5143, 1750, 1752, 5143, 5696, 5697, 5143, 5698, 1754, 5695,
+     5699, 5700, 5143, 5701, 5143, 5143, 1766, 5143, 5143, 1767,
+     5686, 1767, 5143, 5143, 5702, 5143, 5143, 5143, 1778, 5143,
+     5143, 1779, 5703, 1779, 5143, 5143, 1785, 1777, 1787, 5143,
+     5704, 1777, 5143, 5143, 1793, 5703, 1795, 5705, 5143, 5706,
+
+     5143, 5143, 5143, 1803, 1787, 1803, 5143, 1806, 1808, 5143,
+     5707, 5704, 5708, 1810, 5709, 5710, 5143, 5711, 5712, 5143,
+     5713, 5714, 5713, 5715, 5143, 5716, 5717, 5143, 1828, 5718,
+     5719, 1828, 5143, 1828, 5143, 5143, 1832, 1832, 1832, 5714,
+     5717, 5720, 5713, 5143, 5721, 5143, 5143, 5722, 5143, 5723,
+     5724, 5143, 5725, 5725, 5726, 5727, 5728, 5729, 5730, 5724,
+     5731, 5731, 5143, 5732, 5725, 5733, 5727, 5728, 5729, 5730,
+     5143, 5734, 5734, 5735, 5143, 5736, 5725, 5725, 1863, 5143,
+     5737, 5738, 5143, 5143, 1884, 5739, 5740, 5741, 5742, 5143,
+     1890, 5741, 5741, 1890, 5741, 1890, 5743, 5744, 5741, 5745,
+
+     5746, 5143, 5747, 5143, 5143, 5748, 1884, 1907, 5742, 5143,
+     1910, 5749, 1910, 5749, 5750, 5749, 5143, 1917, 5751, 5751,
+     5752, 5143, 5753, 5143, 5754, 5143, 1926, 5143, 1928, 1927,
+     5754, 1927, 5143, 1926, 5755, 5756, 5757, 5143, 5758, 1924,
+     5143, 5759, 5143, 5143, 5143, 1945, 1938, 5143, 1946, 5143,
+     1946, 5143, 5760, 5752, 5143, 5143, 5761, 5762, 5763, 5761,
+     5764, 1924, 5143, 5765, 5143, 5143, 5756, 5143, 5766, 5767,
+     5768, 5769, 5769, 5757, 1938, 5758, 5143, 1977, 5143, 5143,
+     1978, 5770, 1978, 5143, 5143, 5771, 5771, 5772, 5143, 5773,
+     5143, 5774, 5775, 5143, 5143, 5143, 1996, 5143, 1997, 5776,
+
+     1997, 5777, 5773, 5777, 5778, 5143, 5143, 5143, 2008, 2008,
+     5143, 2008, 2010, 5143, 5143, 2010, 5143, 2010, 5143, 5779,
+     5780, 2018, 2018, 2009, 2011, 2019, 5143, 2019, 5780, 2019,
+     5143, 5781, 5143, 2033, 5143, 5782, 5782, 2033, 5143, 2033,
+     2038, 2035, 5143, 2038, 5143, 2038, 5143, 2046, 2046, 2034,
+     5143, 5783, 2047, 2053, 2039, 2053, 5143, 2047, 2045, 2047,
+     2060, 2060, 2054, 5784, 5785, 5143, 2066, 5143, 5143, 2067,
+     5786, 2067, 5143, 5781, 5143, 5143, 2076, 5143, 2077, 5783,
+     2077, 5787, 5143, 5788, 5143, 5789, 5143, 5790, 5143, 5791,
+     5143, 5143, 5792, 5792, 5793, 5143, 5794, 5143, 5795, 5796,
+
+     5790, 2089, 5797, 5143, 5798, 5799, 5798, 5800, 5143, 5792,
+     5143, 5793, 2087, 5143, 5143, 2114, 5801, 2116, 5143, 5783,
+     5143, 5802, 5143, 5802, 5802, 5803, 5802, 5804, 5805, 5806,
+     5807, 5143, 5808, 5802, 5143, 5143, 5809, 5809, 2132, 5143,
+     5810, 5806, 5143, 5811, 5802, 2135, 5809, 5809, 5809, 2135,
+     5812, 5143, 5143, 5813, 5813, 5143, 2156, 2156, 5814, 5815,
+     5816, 5817, 5818, 5819, 5820, 5143, 5821, 5143, 5822, 5143,
+     2168, 2170, 5823, 2170, 5823, 5824, 5825, 5143, 2178, 2179,
+     5826, 5825, 5143, 5143, 2184, 5827, 5828, 5827, 2185, 2189,
+     2185, 5143, 2192, 5827, 2193, 5829, 5830, 5143, 5831, 5827,
+
+     5143, 5832, 5143, 5833, 5143, 2205, 5143, 2207, 5143, 2206,
+     5833, 2206, 5143, 2205, 2201, 5143, 2201, 5143, 5143, 2201,
+     5143, 2201, 5143, 5834, 5828, 5829, 5835, 5836, 5837, 5143,
+     5838, 5143, 5839, 5840, 5143, 5841, 5143, 5143, 5143, 2239,
+     2239, 2239, 2241, 5143, 5143, 2241, 5143, 2241, 5143, 5842,
+     5838, 2248, 2248, 2240, 2249, 5143, 2249, 5843, 2249, 5844,
+     5845, 5143, 5143, 2263, 5143, 2264, 5846, 2264, 5143, 5847,
+     5143, 2271, 2271, 5143, 2271, 2273, 5143, 2273, 5143, 2273,
+     5848, 5849, 2280, 2280, 2272, 5847, 5850, 5143, 2288, 2237,
+     2289, 5851, 2289, 5143, 5143, 5852, 5143, 5143, 2298, 2298,
+
+     5143, 2298, 2300, 5143, 5143, 2300, 2300, 5143, 5853, 5852,
+     2294, 5854, 2308, 2313, 2301, 2313, 5143, 2308, 5143, 2308,
+     5855, 5856, 2320, 2320, 2314, 5143, 5143, 2326, 2326, 5143,
+     5143, 2326, 5143, 2326, 5143, 5143, 2336, 5857, 5858, 2333,
+     5143, 2336, 2333, 5143, 5143, 2333, 2333, 5143, 2335, 5853,
+     5859, 5860, 2348, 2353, 2341, 2353, 5143, 2348, 2348, 2348,
+     5853, 5143, 5143, 2363, 2363, 2363, 2365, 5143, 5143, 2365,
+     5143, 2365, 5143, 5861, 5856, 2372, 2372, 2364, 5143, 5862,
+     5143, 2381, 2381, 2381, 2383, 5143, 2383, 5143, 2383, 2389,
+     2389, 2382, 5863, 5143, 5864, 5143, 5865, 5143, 5143, 2398,
+
+     5865, 2400, 2400, 2398, 5866, 5867, 5868, 5143, 5869, 2396,
+     5870, 5143, 5143, 2408, 5143, 2413, 5143, 2416, 5871, 5863,
+     5143, 5868, 2408, 5869, 5143, 5872, 5872, 5873, 5865, 5143,
+     5143, 2431, 5143, 2431, 5143, 2431, 5143, 2436, 5874, 5875,
+     2438, 2438, 2432, 5143, 5143, 5876, 5876, 5877, 5878, 5877,
+     5143, 5879, 2444, 5143, 5880, 5880, 5881, 2444, 5143, 5881,
+     5881, 5882, 5876, 5880, 5880, 5880, 5883, 5884, 5143, 5143,
+     5885, 5885, 5886, 5881, 5881, 2444, 5882, 5143, 2478, 5887,
+     5888, 5143, 2482, 5889, 5890, 5143, 5891, 5892, 5893, 5143,
+     5894, 5143, 5143, 5895, 5896, 5143, 2496, 2497, 5897, 5898,
+
+     5896, 5899, 5143, 2503, 5893, 2490, 5900, 5143, 5143, 5901,
+     5143, 2511, 5143, 2513, 5143, 2512, 5901, 2512, 5143, 2511,
+     5143, 2521, 5902, 5903, 5143, 2525, 5904, 5903, 2526, 2529,
+     2526, 2509, 5905, 5143, 2534, 5143, 2536, 5143, 2535, 5905,
+     2535, 5143, 2534, 5906, 5907, 5908, 5143, 2547, 5906, 2547,
+     5143, 2547, 2550, 5143, 5143, 2550, 5143, 2550, 5143, 2558,
+     2558, 2548, 2551, 2559, 5143, 2559, 5906, 2559, 5143, 5909,
+     5904, 5910, 2509, 5911, 5143, 2575, 5143, 2577, 5143, 2576,
+     5911, 2576, 5143, 2575, 5143, 5912, 5143, 5913, 5914, 2536,
+     5905, 2542, 5143, 2593, 2593, 2593, 2595, 5143, 5143, 2595,
+
+     2595, 5143, 5915, 5905, 5143, 5916, 2602, 2607, 2607, 5143,
+     2602, 5143, 2602, 5917, 5912, 2613, 2613, 2608, 5143, 5143,
+     2620, 5143, 5143, 2621, 5918, 2621, 5143, 5143, 2628, 2628,
+     2628, 2630, 5143, 2630, 5143, 2630, 5919, 5920, 2636, 2636,
+     2629, 5143, 2619, 2642, 2642, 5143, 5143, 2642, 5143, 2642,
+     5143, 5921, 5918, 5143, 2654, 2649, 5143, 2654, 2649, 5143,
+     2649, 2649, 2651, 5922, 5923, 5143, 5924, 5143, 5143, 2669,
+     2670, 2671, 2670, 5925, 5926, 5143, 5926, 5143, 5927, 5143,
+     2680, 5143, 2680, 5143, 2683, 2685, 5928, 5920, 2636, 5929,
+     5143, 5143, 5930, 5920, 2689, 5931, 5143, 5932, 5933, 2697,
+
+     5143, 5934, 5143, 5143, 2704, 2704, 2704, 2706, 5143, 5143,
+     2706, 2706, 5143, 5928, 5934, 5143, 5935, 5143, 5143, 2718,
+     2718, 5143, 5143, 2718, 5143, 2718, 5143, 5143, 2728, 2725,
+     2728, 2725, 5143, 2725, 2725, 2727, 5928, 5143, 5143, 2739,
+     5936, 5937, 2740, 2743, 2740, 5938, 5939, 5143, 5940, 5937,
+     5143, 5941, 5143, 5942, 5143, 5143, 2756, 5143, 2755, 5942,
+     2759, 2759, 2755, 5143, 5943, 5944, 5143, 2751, 2756, 5942,
+     5143, 2771, 5143, 2771, 5143, 2774, 2776, 5945, 5942, 2751,
+     5946, 5947, 5143, 5947, 5947, 5948, 5947, 5949, 5143, 5950,
+     5951, 5952, 5143, 5951, 5951, 5953, 5947, 5954, 5947, 5955,
+
+     5947, 5951, 5952, 5953, 5956, 5143, 5143, 5956, 5956, 5957,
+     5956, 5143, 5958, 5143, 5959, 5143, 5143, 5960, 5961, 5143,
+     5962, 5143, 5963, 5143, 5964, 5965, 5143, 5966, 5143, 5967,
+     5967, 5968, 5969, 5143, 2834, 5961, 2820, 5970, 5143, 5971,
+     5143, 5972, 5143, 5963, 2824, 5964, 5143, 2829, 5967, 5143,
+     2850, 5143, 5973, 2851, 5143, 5973, 2850, 5143, 2851, 2850,
+     2852, 5143, 2850, 5143, 2850, 2855, 5974, 5973, 2865, 2865,
+     2854, 2855, 5143, 2855, 5973, 2855, 5143, 2877, 5143, 2879,
+     5143, 5975, 2879, 2879, 2883, 5143, 5143, 2883, 5143, 2883,
+     5143, 5976, 5973, 2890, 2890, 2880, 5143, 2891, 5143, 2891,
+
+     5975, 2891, 5977, 5143, 5978, 5143, 2906, 5979, 5973, 2906,
+     2904, 2906, 2910, 5143, 5143, 2910, 2910, 5143, 5980, 2918,
+     2920, 2904, 2920, 5143, 2918, 5143, 2918, 5981, 5977, 2927,
+     2927, 2921, 5143, 5977, 5982, 5983, 5983, 5984, 5143, 2939,
+     5985, 2939, 2939, 2942, 5143, 5143, 2942, 5143, 2942, 5143,
+     2949, 2949, 2940, 5143, 2950, 5143, 2950, 5985, 2950, 5143,
+     5986, 5986, 5143, 5987, 5988, 5989, 5990, 5143, 5991, 5143,
+     5992, 5143, 2972, 2972, 5143, 2974, 2976, 5988, 5993, 5143,
+     5994, 5143, 2982, 5143, 5143, 5995, 5995, 2982, 2985, 2982,
+     2988, 2984, 5143, 2988, 5143, 2988, 5143, 2996, 2996, 2983,
+
+     2985, 2997, 5143, 2997, 5995, 2997, 5143, 3007, 3007, 3007,
+     3009, 5143, 3009, 3009, 5996, 5997, 5998, 5999, 6000, 5143,
+     5143, 6001, 5143, 5143, 3024, 5143, 5143, 3025, 6002, 3025,
+     5143, 5143, 3032, 5143, 6003, 5143, 5999, 3009, 6004, 5143,
+     6005, 5143, 5143, 3042, 3042, 5143, 5143, 3042, 3042, 5143,
+     5999, 3009, 6004, 5143, 6006, 5143, 6006, 6007, 6008, 5143,
+     6009, 5143, 6010, 5143, 5143, 6006, 5143, 5143, 6011, 5143,
+     3070, 5143, 3072, 5143, 3071, 6011, 3071, 3071, 3070, 5143,
+     3080, 3068, 6012, 5143, 5143, 3085, 5143, 3084, 6012, 3088,
+     3088, 3084, 6013, 6014, 6015, 5143, 3096, 6013, 3096, 5143,
+
+     3096, 5143, 5143, 3099, 5143, 3099, 3106, 3106, 3097, 3085,
+     6012, 5143, 5143, 5143, 5143, 3113, 6015, 3116, 6016, 6013,
+     5143, 6013, 3100, 6017, 6018, 6019, 6020, 6021, 6022, 5143,
+     5143, 6023, 6024, 6025, 6025, 6026, 5143, 6027, 6028, 5143,
+     3140, 6029, 6029, 6030, 6031, 6032, 5143, 6033, 6028, 5143,
+     6034, 5143, 6035, 6029, 5143, 3155, 6036, 6031, 6032, 3147,
+     6033, 5143, 6037, 6038, 5143, 6039, 3140, 6029, 5143, 3155,
+     3155, 6040, 6041, 6042, 6043, 5143, 3176, 6044, 6043, 3176,
+     5143, 3176, 3180, 5143, 5143, 3180, 3180, 5143, 5143, 6045,
+     3188, 3191, 3181, 3191, 5143, 3188, 5143, 3188, 6046, 6043,
+
+     3198, 3198, 3192, 5143, 3204, 6047, 6048, 3204, 3204, 3208,
+     5143, 5143, 3208, 3208, 5143, 6045, 6049, 5143, 3215, 3219,
+     5143, 3219, 5143, 3215, 5143, 3215, 6050, 6051, 3226, 3226,
+     3220, 5143, 5143, 5143, 3234, 5143, 3234, 5143, 3237, 3239,
+     6052, 6053, 6054, 5143, 3218, 5143, 3218, 5143, 3247, 6053,
+     3236, 6055, 5143, 5143, 3254, 6056, 6051, 3254, 3254, 3258,
+     5143, 5143, 3258, 3258, 5143, 6052, 3265, 3267, 3247, 3267,
+     5143, 3265, 5143, 3265, 6057, 6058, 3274, 3274, 3268, 6059,
+     6060, 5143, 6061, 6061, 5143, 6060, 5143, 6062, 5143, 6063,
+     5143, 3291, 6064, 6065, 3291, 3248, 3291, 3295, 5143, 5143,
+
+     3295, 3295, 5143, 6066, 3303, 3305, 3248, 3305, 5143, 3303,
+     5143, 3303, 6067, 6065, 3312, 3312, 3306, 5143, 6068, 6066,
+     6069, 6070, 6068, 6071, 5143, 5143, 6065, 5143, 3248, 3328,
+     3328, 5143, 5143, 3328, 3328, 5143, 6072, 6073, 5143, 6073,
+     5143, 3341, 5143, 5143, 6074, 6074, 3341, 3341, 3347, 3343,
+     5143, 3347, 5143, 3347, 5143, 3354, 3354, 3342, 3344, 3355,
+     5143, 3355, 6074, 3355, 5143, 6075, 5143, 5143, 6076, 6068,
+     6071, 5143, 5143, 5143, 3367, 5143, 3367, 3367, 3367, 5143,
+     6076, 5143, 6075, 5143, 3384, 3384, 5143, 5143, 3384, 3384,
+     5143, 5143, 6077, 5143, 5143, 6078, 3394, 6078, 3394, 5143,
+
+     3394, 3395, 5143, 3399, 5143, 3399, 6079, 6078, 3406, 3406,
+     3397, 5143, 3412, 5143, 6080, 3412, 3412, 5143, 5143, 3416,
+     5143, 3416, 6081, 6078, 3422, 3422, 3413, 6082, 5143, 6083,
+     5143, 3431, 6084, 6078, 3431, 3429, 3431, 5143, 5143, 3435,
+     3435, 6085, 6086, 6078, 5143, 3445, 5143, 5143, 6087, 6087,
+     3445, 3448, 3445, 3447, 5143, 3451, 5143, 3451, 3458, 3458,
+     3446, 5143, 6088, 6089, 5143, 6090, 5143, 5143, 6091, 6091,
+     5143, 3468, 6092, 6092, 6093, 6093, 6089, 3465, 6094, 3467,
+     6095, 6096, 5143, 5143, 6097, 3484, 3484, 6098, 6097, 6099,
+     6100, 6101, 6102, 5143, 6103, 6097, 5143, 5143, 3498, 6104,
+
+     6104, 5143, 5143, 3503, 6105, 6101, 5143, 3484, 3484, 6106,
+     6097, 5143, 3498, 6104, 5143, 3515, 6104, 3512, 6107, 6108,
+     5143, 6109, 5143, 6108, 3521, 6109, 5143, 5143, 5143, 3529,
+     3521, 3529, 5143, 3532, 3534, 5143, 6110, 6108, 3521, 6109,
+     5143, 5143, 5143, 6111, 6112, 5143, 3546, 5143, 3546, 5143,
+     3549, 3551, 6113, 6114, 5143, 6115, 5143, 6112, 6116, 5143,
+     5143, 6117, 5143, 5143, 5143, 6118, 5143, 5143, 5143, 6119,
+     5143, 5143, 5143, 6120, 3568, 5143, 5143, 5143, 3576, 6121,
+     3579, 5143, 5143, 5143, 3584, 5143, 3584, 5143, 3587, 3589,
+     6122, 6123, 6124, 5143, 6125, 6126, 5143, 6127, 5143, 5143,
+
+     6126, 6128, 5143, 6129, 5143, 5143, 5143, 3607, 5143, 3607,
+     5143, 3610, 3612, 6130, 6131, 6132, 5143, 5143, 6133, 6134,
+     5143, 6131, 6135, 5143, 3599, 5143, 3599, 3599, 3599, 6136,
+     6137, 5143, 3632, 6138, 6139, 3632, 3632, 3636, 5143, 5143,
+     3636, 3636, 5143, 3636, 6130, 3643, 3646, 3624, 3646, 5143,
+     3643, 5143, 3643, 6140, 6139, 3653, 3653, 3647, 5143, 5143,
+     6133, 6133, 5143, 5143, 5143, 5143, 3664, 6133, 3667, 5143,
+     5143, 3670, 5143, 3672, 5143, 6141, 5143, 6142, 5143, 5143,
+     5143, 3679, 5143, 3679, 3679, 3679, 6143, 6144, 5143, 3689,
+     6145, 6144, 3689, 5143, 3689, 5143, 5143, 3693, 3693, 5143,
+
+     6146, 5143, 3702, 6147, 6148, 3702, 3702, 5143, 5143, 3706,
+     3706, 6146, 5143, 5143, 5143, 3700, 3716, 6149, 6150, 3700,
+     5143, 3716, 5143, 5143, 3700, 3700, 6146, 5143, 6151, 5143,
+     3730, 5143, 5143, 6152, 6152, 6153, 6152, 6154, 6154, 6155,
+     6152, 6156, 6157, 6158, 5143, 6159, 6152, 6152, 6160, 3745,
+     6161, 5143, 5143, 3753, 6162, 6162, 6163, 6164, 5143, 3759,
+     6163, 5143, 6165, 3752, 5143, 3765, 6166, 6166, 5143, 6167,
+     3769, 3769, 6168, 6162, 3765, 6166, 5143, 3777, 6166, 5143,
+     6169, 5143, 5143, 6170, 3769, 3769, 6171, 6167, 6167, 5143,
+     6168, 5143, 5143, 6172, 5143, 5143, 5143, 5143, 3798, 5143,
+
+     5143, 3799, 6173, 3799, 5143, 3798, 5143, 6174, 5143, 5143,
+     3810, 5143, 3811, 6175, 3811, 5143, 6175, 5143, 3818, 6175,
+     5143, 3810, 5143, 6176, 5143, 5143, 5143, 6174, 5143, 6177,
+     6178, 3816, 5143, 6179, 5143, 5143, 6177, 6180, 5143, 6181,
+     6173, 5143, 5143, 3842, 3842, 5143, 5143, 3842, 5143, 3842,
+     5143, 5143, 6182, 6183, 6184, 6185, 3821, 3857, 6175, 3821,
+     3816, 3857, 3818, 5143, 3821, 5143, 3821, 3867, 3867, 3858,
+     5143, 5143, 6186, 5143, 5143, 5143, 6182, 5143, 6187, 5143,
+     6188, 6185, 5143, 6173, 5143, 5143, 6185, 5143, 5143, 3889,
+     5143, 5143, 3889, 5143, 3889, 6189, 6190, 3894, 5143, 5143,
+
+     3899, 5143, 3901, 5143, 6191, 6192, 5143, 6193, 5143, 5143,
+     5143, 3911, 3894, 3911, 5143, 3914, 3916, 5143, 6194, 6191,
+     6195, 3918, 5143, 5143, 6196, 5143, 3926, 6197, 5143, 6198,
+     6190, 3927, 3927, 3926, 3929, 3927, 3924, 5143, 3926, 5143,
+     3926, 6199, 6196, 3941, 3941, 3933, 5143, 6200, 5143, 5143,
+     5143, 3950, 5143, 3952, 5143, 6201, 6202, 5143, 6203, 5143,
+     6202, 3958, 6203, 5143, 5143, 5143, 5143, 5143, 6204, 5143,
+     5143, 6205, 6206, 5143, 6202, 3958, 6207, 5143, 5143, 5143,
+     6208, 6209, 6210, 6209, 6211, 5143, 6212, 6213, 6214, 6215,
+     5143, 6216, 6209, 5143, 6217, 3994, 3994, 6218, 6217, 6219,
+
+     5143, 6220, 5143, 5143, 6221, 4004, 4004, 6222, 6217, 6223,
+     6217, 5143, 4012, 4004, 4004, 6224, 6217, 6221, 4003, 6222,
+     5143, 5143, 4021, 6225, 4021, 6225, 6226, 6225, 5143, 6227,
+     6228, 5143, 4032, 4032, 5143, 4032, 4034, 5143, 5143, 4034,
+     5143, 4034, 5143, 6229, 6230, 4042, 4042, 4033, 4043, 5143,
+     4043, 6230, 4043, 5143, 5143, 4054, 4054, 5143, 5143, 4054,
+     5143, 4054, 5143, 5143, 6231, 5143, 4066, 4066, 5143, 4066,
+     4068, 5143, 4068, 5143, 4068, 4075, 4075, 4067, 6232, 6233,
+     6234, 6230, 5143, 4083, 4083, 5143, 5143, 4083, 5143, 4083,
+     5143, 5143, 6235, 6236, 6233, 6235, 6237, 5143, 6238, 5143,
+
+     6239, 5143, 6240, 5143, 6241, 4104, 4102, 5143, 4104, 5143,
+     5143, 4104, 5143, 4104, 5143, 6242, 5143, 6243, 5143, 4119,
+     6244, 6233, 4119, 5143, 4119, 5143, 5143, 4123, 4123, 4123,
+     6245, 6246, 6247, 5143, 4102, 4134, 4134, 5143, 5143, 4134,
+     5143, 4134, 5143, 5143, 6242, 6248, 6233, 6249, 5143, 6250,
+     6251, 6247, 5143, 6252, 4117, 4117, 4149, 5143, 4117, 5143,
+     4117, 6253, 6254, 6255, 5143, 6256, 6257, 5143, 6258, 5143,
+     4170, 5143, 5143, 4171, 6259, 4171, 5143, 6252, 5143, 5143,
+     4180, 5143, 4181, 6256, 4181, 6260, 6254, 5143, 5143, 4189,
+     4189, 4160, 4189, 5143, 5143, 4191, 4191, 6261, 5143, 5143,
+
+     6262, 5143, 5143, 6256, 5143, 4205, 5143, 5143, 4172, 5143,
+     4208, 6259, 4211, 4211, 4208, 5143, 6263, 6264, 5143, 5143,
+     6263, 6265, 6259, 5143, 5143, 4224, 5143, 5143, 4224, 5143,
+     4224, 6266, 6256, 6259, 5143, 6256, 6267, 5143, 6268, 6269,
+     6270, 6271, 6267, 6267, 6267, 4238, 6268, 6272, 6273, 5143,
+     4250, 5143, 6274, 6275, 5143, 4255, 5143, 5143, 5143, 4259,
+     4260, 6276, 6277, 5143, 6278, 6279, 5143, 6280, 5143, 4269,
+     4269, 5143, 4269, 4271, 5143, 5143, 4271, 4271, 5143, 6281,
+     6279, 4267, 6282, 4279, 4284, 4272, 4284, 5143, 4279, 5143,
+     4279, 6283, 6284, 4291, 4291, 4285, 5143, 6285, 4297, 4267,
+
+     5143, 4297, 5143, 5143, 4297, 5143, 4297, 5143, 5143, 4309,
+     4309, 5143, 4309, 4311, 5143, 4311, 4311, 5143, 6281, 6279,
+     4267, 6286, 6287, 5143, 6288, 5143, 6285, 4326, 5143, 4326,
+     5143, 5143, 4326, 5143, 4326, 5143, 6289, 6279, 6287, 4324,
+     6290, 5143, 6291, 5143, 6292, 6293, 5143, 6294, 5143, 6295,
+     5143, 6296, 5143, 6297, 4353, 5143, 5143, 4353, 5143, 5143,
+     4353, 5143, 4353, 5143, 6295, 4351, 6298, 6279, 4267, 6299,
+     5143, 5143, 4371, 4371, 5143, 5143, 4371, 5143, 4371, 5143,
+     5143, 5143, 6300, 6301, 6302, 6293, 4347, 6303, 5143, 6304,
+     6305, 5143, 5143, 4393, 4393, 4393, 4395, 5143, 5143, 4395,
+
+     5143, 4395, 5143, 6306, 6307, 4402, 4402, 4394, 5143, 6302,
+     5143, 4411, 4411, 4411, 4413, 5143, 4413, 5143, 4413, 4419,
+     4419, 4412, 6308, 6309, 6310, 5143, 5143, 6311, 5143, 6312,
+     6313, 4403, 4432, 5143, 4432, 5143, 4403, 4401, 4403, 6314,
+     6315, 4439, 4439, 4433, 5143, 5143, 4445, 5143, 5143, 4445,
+     5143, 4445, 6316, 6315, 5143, 4455, 5143, 5143, 4455, 5143,
+     4455, 6317, 5143, 6318, 5143, 6319, 6320, 5143, 6321, 6322,
+     6315, 6323, 6324, 6325, 5143, 6326, 5143, 5143, 5143, 6327,
+     6327, 5143, 4478, 5143, 6328, 5143, 6329, 5143, 4488, 6325,
+     4475, 6330, 5143, 6331, 6332, 5143, 5143, 4497, 5143, 4497,
+
+     5143, 4500, 4502, 6333, 6334, 5143, 6335, 6336, 5143, 5143,
+     6337, 5143, 6336, 5143, 6337, 5143, 6338, 5143, 4518, 5143,
+     4520, 5143, 4519, 6338, 4519, 5143, 4518, 5143, 6339, 6334,
+     4506, 6340, 5143, 6337, 6339, 5143, 6341, 5143, 6337, 5143,
+     6342, 5143, 4542, 5143, 4543, 5143, 4543, 6343, 6344, 6342,
+     5143, 6345, 5143, 6334, 4506, 6340, 6333, 5143, 6346, 6347,
+     4520, 6338, 4526, 5143, 4564, 4564, 4564, 4566, 5143, 5143,
+     4566, 4566, 5143, 6333, 6338, 5143, 6348, 5143, 5143, 4578,
+     4578, 5143, 5143, 4578, 5143, 4578, 5143, 5143, 4588, 4585,
+     4588, 4585, 5143, 4585, 4585, 4587, 6333, 6349, 6350, 5143,
+
+     6344, 6351, 6352, 6353, 5143, 6354, 4573, 4607, 5143, 4607,
+     5143, 4573, 4573, 6355, 6353, 4605, 6356, 5143, 6357, 6358,
+     5143, 6359, 5143, 6357, 6360, 6353, 4605, 6356, 5143, 5143,
+     5143, 6361, 4631, 4633, 6362, 6361, 5143, 6363, 6364, 6361,
+     6365, 6366, 6367, 5143, 6368, 4633, 6361, 6369, 5143, 6370,
+     6371, 5143, 6372, 5143, 6373, 5143, 6374, 5143, 5143, 4658,
+     4658, 5143, 5143, 4658, 4658, 5143, 5143, 6375, 5143, 6374,
+     5143, 4671, 5143, 6376, 4671, 4671, 4675, 5143, 5143, 4675,
+     5143, 4675, 5143, 4682, 4682, 4672, 4673, 4683, 5143, 4683,
+     6376, 4683, 5143, 5143, 4693, 5143, 4695, 5143, 5143, 6377,
+
+     5143, 6378, 5143, 5143, 4703, 5143, 4705, 6379, 6376, 5143,
+     6380, 6381, 6379, 5143, 5143, 4715, 5143, 4716, 6382, 4716,
+     5143, 6383, 6384, 6385, 6386, 5143, 6376, 4673, 6387, 5143,
+     5143, 6388, 5143, 6389, 5143, 6390, 5143, 4735, 4737, 5143,
+     5143, 4737, 5143, 4737, 6389, 4735, 6391, 4726, 6392, 6392,
+     5143, 6393, 6393, 5143, 4754, 6394, 6395, 6396, 6395, 6397,
+     5143, 6398, 6399, 5143, 6400, 5143, 4754, 4754, 6401, 6395,
+     6402, 5143, 5143, 5143, 5143, 4774, 5143, 4776, 5143, 5143,
+     5143, 4780, 4782, 4782, 5143, 5143, 4785, 5143, 4787, 5143,
+     4790, 6403, 6404, 4790, 4790, 4794, 5143, 5143, 4794, 4794,
+
+     5143, 6405, 4801, 4803, 5143, 4803, 5143, 4801, 5143, 4801,
+     6406, 6404, 4810, 4810, 4804, 5143, 6407, 5143, 4772, 5143,
+     4818, 6408, 4821, 5143, 5143, 5143, 4825, 5143, 4827, 4824,
+     6409, 6410, 6411, 5143, 6412, 6413, 5143, 5143, 4838, 4838,
+     4838, 4840, 5143, 4840, 5143, 4840, 4846, 4846, 4839, 5143,
+     6408, 4772, 6408, 4821, 4818, 5143, 6414, 5143, 6415, 5143,
+     4860, 4860, 5143, 5143, 4860, 4860, 5143, 5143, 6416, 5143,
+     6417, 6418, 6419, 6420, 6421, 5143, 6422, 6423, 5143, 6424,
+     5143, 6421, 6421, 4876, 6422, 4850, 6408, 5143, 6415, 5143,
+     5143, 4890, 5143, 4892, 5143, 6415, 5143, 6425, 5143, 5143,
+
+     5143, 4901, 5143, 4901, 5143, 4904, 4906, 6426, 6427, 4903,
+     6428, 5143, 6429, 5143, 4914, 4914, 4850, 4914, 5143, 5143,
+     4916, 5143, 4916, 6430, 6408, 4923, 4923, 4915, 5143, 6431,
+     6432, 5143, 6433, 5143, 4934, 4935, 4934, 4934, 4937, 5143,
+     4937, 4937, 6434, 6435, 6408, 5143, 5143, 6425, 5143, 5143,
+     5143, 4949, 5143, 4949, 4949, 4949, 6436, 6437, 5143, 6438,
+     5143, 4961, 6439, 6440, 6441, 6408, 6442, 5143, 6443, 6444,
+     6445, 6446, 5143, 6447, 5143, 5143, 6442, 5143, 5143, 6448,
+     5143, 5143, 4982, 4982, 5143, 4982, 5143, 5143, 4984, 4984,
+     6449, 5143, 6450, 6450, 5143, 6451, 6408, 5143, 5143, 4949,
+
+     5143, 5000, 5143, 5002, 5143, 6452, 5143, 5143, 6444, 5143,
+     6453, 6454, 6455, 5143, 5014, 5014, 5143, 5143, 5014, 5143,
+     5014, 5143, 5143, 6444, 6456, 6457, 5143, 6457, 5143, 6450,
+     5143, 6458, 5143, 6459, 5143, 6460, 5143, 5143, 6461, 6455,
+     5143, 6444, 5010, 6462, 5014, 6463, 5014, 5143, 5015, 5014,
+     5017, 5018, 5014, 5143, 5021, 5022, 6444, 5010, 6464, 5143,
+     6465, 6466, 6457, 5143, 5031, 5064, 5143, 5143, 5064, 5143,
+     5064, 6467, 6461, 6468, 6455, 6469, 5022, 6457, 5143, 5143,
+     5079, 5143, 5143, 5079, 5143, 5079, 6465, 5080, 6470, 5064,
+     5031, 5066, 5067, 5143, 5064, 5143, 5071, 6471, 6472, 5143,
+
+     6473, 6465, 5080, 6474, 5143, 6469, 5079, 6457, 5143, 5143,
+     6475, 5010, 5022, 5143, 5022, 5143, 5022, 6465, 5143, 6476,
+     5096, 5143, 5096, 5143, 5096, 5143, 5096, 5143, 6477, 5031,
+     5066, 5094, 5064, 5143, 5071, 5143, 6478, 6479, 5064, 6480,
+     6481, 6476,    0, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143
+    } ;
+
+static yyconst flex_int16_t yy_nxt[123505] =
+    {   0,
+       20,   21,   22,   21,   23,   24,   25,   26,   27,   20,
+       28,   29,   30,   20,   31,   32,   33,   34,   35,   36,
+       20,   37,   20,   26,   26,   26,   26,   26,   26,   26,
+       26,   38,   39,   40,   26,   41,   26,   42,   26,   43,
+       26,   26,   26,   26,   26,   44,   26,   45,   46,   47,
+       48,   51,   48,   49,   52, 5139,   48,   50,   48,   49,
+     5077,   76,   76,   50,   62,   63,   62,   62,   62,   63,
+       62,   62,   77,   77,   64,  102,   63,  103,   64,   65,
+       63,   51,  709,   65,   52,   53,   53,   54,   53,   53,
+       53,   53,   55,   53,   53,   53,   53,   53,   53,   53,
+
+       53,   53,   53,   53,   53,   53,   53,   53,   55,   55,
+       55,   55,   55,   55,   55,   55,   53,   53,   53,   55,
+       55,   56,   57,   55,   58,   55,   55,   55,   55,   55,
+       55,   55,   55,   53,   53,   67,   67,   67,   67,   67,
+       67,   67,   67,   71,   71,   71,   72,   72,   71,   81,
+       68,   81,   81,   74,   68,   97,   74,   78,   79,   78,
+       80,   80,   79,   80,   80,   83,   84,   86,  104,  600,
+       87,  709,  105,   73,   73,   73,  122,  128,   73,  123,
+      129,   81,   69,   81,   81, 1432,   69,   95,   79,   95,
+       96,   96,   79,   96,   96,   83,   84,  106,  106,  106,
+
+      106, 1432,  107,  109,  110,  109,  109,  110,  110,  110,
+      110,  106,  108,  112,  154,  110, 1432, 5143,  113,  110,
+      155,  287,  113,  114,  114,  114,  114,  124,  124,  124,
+      124,  116,  415,  135,  117,  116,  116,  118,  119,  120,
+      121,  290,  126,  116,  136,  207, 1215,  137,  138,   79,
+      138,  139,  421,  116,  106,  116,  139,   79,  139,  139,
+      144,  144,  144,  144,  149,   79,  149,  150,  588,  157,
+      145,  157,  157, 1197,  127,  146,  150,   79,  150,  150,
+      106,  106,  106,  106,  161,  107,  161,  161,  163, 1457,
+      109,  164,  109,  109,  122,  108,  171,  123,  128,  172,
+
+      112,  129,  305,  135,  158,  168,  168,  168,  168,  192,
+      159, 1432,  193,  435, 5143,  168,  168, 5143,  211,  600,
+      170,  212,  162,  114,  114,  114,  114,  124,  124,  124,
+      124,  116,  709, 1432,  117,  116,  116,  118,  119,  120,
+      121,  218,  126,  116,  219,  183,  183,  183,  183,  224,
+      207,  135,  110,  116, 1432,  116,  114,  114,  114,  114,
+      185,  207,  136,  225,  116,  137,  226,  117,  116,  116,
+      118,  119,  167,  121,  127,  433,  116,  138,   79,  138,
+      139,  139,   79,  139,  139,  587,  116,  228,  116,  173,
+      124,  174,  186,  149,   79,  149,  150,  175,  175,  175,
+
+      175,  600,  898,  144,  144,  144,  144,  207,  175,  175,
+      175,  175,  175,  145,  175, 1197,  898,  157,  146,  157,
+      157,  175,  121,  121,  121,  121,  150,   79,  150,  150,
+      121,  785,  694,  117,  121,  121,  177,  178,  179,  121,
+      308,  161,  121,  161,  161,  168,  168,  168,  168,  207,
+      247,  453,  121,  106,  121,  168,  168,  898,  709,  709,
+      170,  183,  183,  183,  183,  237,  659,  237,  237,  183,
+      183,  183,  183,  695,  287,  238,  185,  238,  238,  162,
+      114,  114,  114,  114,  185,  415,  252,  259,  116,  114,
+      180,  117,  116,  116,  118,  119,  167,  121,  264,  898,
+
+      116,  187,  243,  268,  243,  243,  144,  354,  186,  600,
+      116,  270,  116,  173,  270,  209,  186,  237,  495,  237,
+      237,  210,  210,  210,  210,  265,  265,  265,  265,  709,
+      600,  207,  210,  210,  210,  210,  210,  244,  210,  274,
+      266,  274,  274,  245,  290,  210,  121,  121,  121,  121,
+      243,  709,  243,  243,  121,  421,  694,  117,  121,  121,
+      177,  178,  217,  121,  280,  282,  121,  206,  168,  284,
+      286,  259,  213,  121,  287,  659,  121,  659,  121,  121,
+      121,  121,  121,  289,  562,  264,  183,  121,  290,  659,
+      117,  121,  121,  177,  178,  179,  121,  659,  898,  121,
+
+      265,  265,  265,  265,  292,  295,  327,  293,  230,  121,
+      785,  121,  220,  270,  221,  266,  270,  504,  305,  336,
+      222,  222,  222,  222,  299,  298,  299,  299,  709,  435,
+      513,  222,  222,  222,  222,  222,  274,  222,  274,  274,
+      301,  600,  301,  301,  222,  121,  121,  121,  121,  280,
+      709,  307,  305,  121,  248, 1432,  117,  121,  121,  177,
+      178,  217,  121,  284,  310,  121,  308,  255,  315,  295,
+      307,  260,  327,  336,  381,  121, 1197,  121,  220,  299,
+      253,  299,  299, 1197,  308,  518,  254,  254,  254,  254,
+      301,  310,  301,  301,  345,  453,  344,  254,  254,  254,
+
+      254,  254,  243,  254,  243,  243,  351,  537, 1432,  352,
+      254,  273,  273, 1197,  273,  273,  273,  273,  100,  273,
+      273,  273,  273,  273,  273,  273,  273,  273,  100,  273,
+      273,  273,  273,  273,  100,  100,  100,  100,  100,  100,
+      100,  100,  273,  273,  273,  100,  100,  100,  100,  100,
+      100,  100,  100,  100,  100,  100,  100,  100,  100,  273,
+      273,  180,  287,  287,  287,  287,  180,  180,  311,  180,
+      180,  180,  180,  180,  312,  180,  180,  313,  180,  180,
+      180,  180,  180,  180,  311,  311,  311,  311,  311,  311,
+      311,  311,  180,  180,  180,  311,  311,  311,  311,  311,
+
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  180,
+      180,  187,  290,  290,  290,  290,  187,  187,  316,  187,
+      187,  187,  187,  187,  188,  187,  187,  317,  187,  187,
+      187,  187,  187,  187,  316,  316,  316,  316,  316,  316,
+      316,  316,  187,  187,  187,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  318,
+      187,  319,  319,  319,  319,  331,  319,  331,  331,  332,
+      315,  319,  319,  353,  659,  659,  321,  322,  319,  183,
+      305,  305,  305,  305,  333,  334,  358,  363,  366,  359,
+      364,  265,  207,  369,  375,  335,  369,  376,  393,  259,
+
+      418,  394,  287,  419,  264,  659,  898,  290,  323,  213,
+      308,  308,  308,  308,  213,  213,  337,  213,  338,  213,
+      213,  339,  340,  338,  341,  342,  343,  344,  213,  213,
+      338,  213,  337,  337,  337,  337,  337,  337,  337,  337,
+      338,  213,  338,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  213,  213,  346,
+      428,  345,  709,  324,  331,  181,  331,  331,  332,  346,
+      429,  280,  551,  430,  305,  346,  346,  346,  346,  346,
+      346,  346,  346,  333,  600,  709,  346,  346,  346,  346,
+      346,  346,  346,  346,  346,  346,  346,  346,  346,  346,
+
+      223,  347,  347,  347,  347,  223,  223,  348,  223,  223,
+      223,  223,  223,  349,  223,  223,  350,  223,  223,  223,
+      223,  223,  223,  348,  348,  348,  348,  348,  348,  348,
+      348,  223,  223,  223,  348,  348,  348,  348,  348,  348,
+      348,  348,  348,  348,  348,  348,  348,  348,  223,  223,
+      187,  354,  354,  354,  354,  187,  187,  355,  187,  187,
+      187,  187,  187,  188,  187,  187,  356,  355,  187,  187,
+      187,  187,  187,  355,  355,  355,  355,  355,  355,  355,
+      355,  187,  187,  187,  355,  355,  355,  355,  355,  355,
+      355,  355,  355,  355,  355,  355,  355,  355,  357,  187,
+
+      319,  319,  319,  319,  327,  327,  327,  327, 1432,  436,
+      319,  319,  437, 1432,  367,  321,  231,  319,  373,  368,
+      373,  373,  110,  110,  110,  110,  353,  353,  353,  353,
+      207, 1197,  440,  284,  412,  441,  308,  413,  261,  319,
+      562,  416,  354,  354,  354,  354,  124,  323,  319,  319,
+      319,  319,  461,  261,  188,  462,  374,  356,  319,  319,
+      110,  347,  600,  321,  362,  319,  373,  478,  373,  373,
+      479,  484,  487,  417,  485,  488,  489,  492,  207,  490,
+      493,  501,  428,  295,  319,  502,  327,  307,  709,  357,
+      336,  497,  265,  265, 1197,  323,  319,  319,  319,  319,
+
+     1197,  785,  498,  509,  374,  499,  319,  319,  114,  384,
+      898,  321,  322,  319,  510,  515,  287,  511,  516,  520,
+      523,  534,  521,  524,  535,  540,  310,  415,  541,  345,
+      287,  315,  564,  580,  353,  354,  424,  602,  898,  284,
+      381,  415,  344,  323,  248,  336,  336,  336,  336,  248,
+      377,  248,  248,  248,  248,  336,  336,  249,  248,  248,
+      378,  248,  377,  248,  248,  248,  248,  377,  377,  377,
+      377,  377,  377,  377,  377,  248,  248,  248,  377,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      377,  377,  377,  248,  379,  409,  353,  354,  640,  658,
+
+      661,  610,  659,  662,  380,  785,  555,  560,  495,  414,
+      379,  379,  379,  379,  379,  379,  379,  379,  785, 1197,
+     1197,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  213,  381,  381,  381,  381,
+      213,  382,  213,  213,  213,  213,  381,  381,  214,  213,
+      213,  383,  213,  382,  213,  213,  213,  213,  382,  382,
+      382,  382,  382,  382,  382,  382,  213,  213,  213,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  213,  251,  384,  384,  384,  384,
+      251,  251,  385,  251,  386,  251,  251,  387,  388,  386,
+
+      389,  390,  391,  392,  251,  251,  386,  251,  385,  385,
+      385,  385,  385,  385,  385,  385,  386,  251,  386,  385,
+      385,  385,  385,  385,  385,  385,  385,  385,  385,  385,
+      385,  385,  385,  251,  251,  395,  569,  396,  290,  188,
+      327,  898,  305,  397,  397,  397,  397,  570,  573,  421,
+      571,  504,  584,  435,  397,  397,  397,  397,  397,  574,
+      397,  664,  420,  585,  665,  898,  586,  397,  213,  344,
+      344,  344,  344,  213,  213,  398,  213,  344,  213,  213,
+      339,  399,  344,  400,  401,  402,  344,  213,  213,  344,
+      213,  398,  398,  398,  398,  398,  398,  398,  398,  344,
+
+      213,  344,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  213,  213,  255,  345,
+      345,  345,  345,  255,  255,  403,  255,  345,  255,  255,
+      404,  405,  345,  406,  407,  408,  345,  255,  255,  345,
+      255,  403,  403,  403,  403,  403,  403,  403,  403,  345,
+      255,  345,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  255,  255,  180,  287,
+      287,  287,  287,  180,  180,  311,  180,  180,  180,  180,
+      180,  312,  180,  180,  313,  180,  180,  180,  180,  180,
+      180,  311,  311,  311,  311,  311,  311,  311,  311,  180,
+
+      180,  180,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  180,  180,  258,  409,
+      409,  409,  409,  258,  258,  410,  258,  258,  258,  258,
+      258,  411,  258,  258,  313,  258,  258,  258,  258,  258,
+      258,  410,  410,  410,  410,  410,  410,  410,  410,  258,
+      258,  258,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  258,  258,  319,  319,
+      319,  319,  580,  709,  505,  680,  505,  505,  319,  319,
+      785,  600,  600,  321,  423,  319,  207,  505,  709,  505,
+      505,  305,  305,  305,  305,  600,  334,  590,  336,  207,
+
+     1197,  381,  308,  207,  686,  659,  335,  687,  591,  513,
+      596,  434,  518,  453,  308,  323,  319,  319,  319,  319,
+      708,  597,  506,  709,  598,  453,  319,  319,  507,  612,
+      442,  321,  362,  319,  511,  592,  511,  511,  562,  593,
+      613,  618,  121,  614,  452,  562,  344,  392,  468,  594,
+      562,  121,  711,  634,  659,  712,  635,  537,  637,  642,
+      345,  638,  644,  323,  395,  645,  438,  471,  287,  287,
+      562,  551,  439,  439,  439,  439,  183,  409,  647,  649,
+      415,  648,  650,  439,  439,  439,  439,  439,  555,  439,
+      724,  651,  771,  725,  785,  772,  439,  283,  442,  442,
+
+      442,  442,  283,  283,  443,  283,  444,  283,  283,  445,
+      446,  444,  447,  342,  448,  449,  283,  283,  444,  283,
+      443,  443,  443,  443,  443,  443,  443,  443,  444,  283,
+      444,  443,  443,  443,  443,  443,  443,  443,  443,  443,
+      443,  443,  443,  443,  443,  283,  283,  114,  114,  114,
+      114,  785,  121,  787,  110,  116,  468,  214,  117,  450,
+      116,  118,  451,  120,  121,  484,  114,  116,  485,  110,
+      110,  110,  110,  709,  353,  654,  354,  116,  709,  116,
+      454,  110,  290,  327,  113,  560,  655,  495,  661,  656,
+      455,  561,  600,  421,  504,  305,  454,  454,  454,  454,
+
+      454,  454,  454,  454,  168,  144,  435,  454,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
+      454,  251,  392,  392,  392,  392,  251,  251,  456,  251,
+      392,  251,  251,  387,  457,  392,  458,  459,  460,  392,
+      251,  251,  392,  251,  456,  456,  456,  456,  456,  456,
+      456,  456,  392,  251,  392,  456,  456,  456,  456,  456,
+      456,  456,  456,  456,  456,  456,  456,  456,  456,  251,
+      251,  463,  667,  464,  573,  425,  336,  659,  381,  465,
+      465,  465,  465,  668,  124,  574,  494,  513,  673,  518,
+      465,  465,  465,  465,  465,  678,  465,  661,  679,  817,
+
+      812,  659,  354,  465,  255,  345,  345,  345,  345,  255,
+      255,  466,  255,  345,  255,  255,  404,  405,  345,  406,
+      407,  467,  345,  255,  255,  345,  255,  466,  466,  466,
+      466,  466,  466,  466,  466,  345,  255,  345,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  466,  255,  255,  255,  468,  468,  468,  468,  255,
+      469,  255,  255,  255,  255,  468,  468,  256,  255,  255,
+      470,  255,  469,  255,  255,  255,  255,  469,  469,  469,
+      469,  469,  469,  469,  469,  255,  255,  255,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+
+      469,  469,  469,  255,  285,  471,  471,  471,  471,  285,
+      285,  472,  285,  471,  285,  285,  473,  474,  471,  475,
+      476,  477,  471,  285,  285,  471,  285,  472,  472,  472,
+      472,  472,  472,  472,  472,  471,  285,  471,  472,  472,
+      472,  472,  472,  472,  472,  472,  472,  472,  472,  472,
+      472,  472,  285,  285,  403,  562,  562,  183,  697,  106,
+      697,  697,  785,  785,  408,  124,  124,  124,  124,  114,
+      403,  403,  403,  403,  403,  403,  403,  403,  600,  600,
+      126,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  480,  698,  481,  327,  327,
+
+      327,  327,  168,  482,  482,  482,  482,  106,  367,  144,
+      231,  689,  127,  368,  482,  482,  482,  482,  482,  325,
+      482,  836,  690,  428,  837,  503,  502,  482,  180,  287,
+      287,  287,  287,  180,  180,  311,  180,  180,  180,  180,
+      180,  312,  180,  180,  313,  180,  180,  180,  180,  180,
+      180,  311,  311,  311,  311,  311,  311,  311,  311,  180,
+      180,  180,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  180,  180,  180,  180,
+      180,  180,  180,  180,  180,  346,  180,  180,  180,  180,
+      180,  181,  180,  180,  180,  346,  180,  180,  180,  180,
+
+      180,  346,  346,  346,  346,  346,  346,  346,  346,  180,
+      180,  180,  346,  346,  346,  346,  346,  346,  346,  346,
+      346,  346,  346,  346,  346,  346,  180,  180,  258,  409,
+      409,  409,  409,  258,  258,  410,  258,  258,  258,  258,
+      258,  411,  258,  258,  483,  258,  258,  258,  258,  258,
+      258,  410,  410,  410,  410,  410,  410,  410,  410,  258,
+      258,  258,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  258,  258,  319,  319,
+      319,  319,  106,  124,  354,  354,  354,  354,  319,  319,
+      124,  183,  562,  321,  423,  319,  188,  590,  106,  356,
+
+      586,  691,  586,  586,  305,  305,  305,  305,  591,  334,
+      692,  696,  308,  344,  711,  693,  207,  599,  846,  335,
+      562,  106,  344,  453,  537,  323,  319,  319,  319,  319,
+      121,  357,  699,  537, 1456,  700,  319,  319,  785,  702,
+      735,  321,  423,  319,  106,  106,  106,  106,  114,  107,
+      703,  736,  308,  512,  517,  600,  442,  114,  449,  108,
+      600,  425,  124,  744,  468,  789,  745,  618,  520,  777,
+      746,  521,  536,  323,  337,  642,  790,  345,  345,  743,
+      711,  261,  341,  854,  343,  106,  562,  287,  551,  551,
+      337,  337,  337,  337,  337,  337,  337,  337,  415,  562,
+
+      214,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  341,  542,  380,  409, 1216,
+      353,  114,  493,  379,  379,  379,  379,  794,  805,  555,
+      550,  560,  651,  819,  379,  379,  379,  379,  379,  806,
+      379,  875,  559,  885,  381,  600,  886,  379,  213,  381,
+      381,  381,  381,  213,  382,  213,  213,  213,  213,  381,
+      381,  214,  213,  213,  383,  213,  382,  213,  213,  213,
+      213,  382,  382,  382,  382,  382,  382,  382,  382,  213,
+      213,  213,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  382,  382,  382,  213,  283,  442,
+
+      442,  442,  442,  283,  283,  443,  283,  444,  283,  283,
+      445,  446,  444,  447,  519,  448,  449,  283,  283,  444,
+      283,  443,  443,  443,  443,  443,  443,  443,  443,  444,
+      283,  444,  443,  443,  443,  443,  443,  443,  443,  443,
+      443,  443,  443,  443,  443,  443,  283,  283,  395,  354,
+      396,  667,  183,  290,  425,  562,  397,  397,  397,  397,
+      495,  124,  668,  822,  421,  820,  823,  397,  397,  397,
+      397,  397,  828,  397,  945,  829,  958,  344,  110,  898,
+      397,  213,  344,  344,  344,  344,  213,  213,  398,  213,
+      344,  213,  213,  339,  399,  344,  400,  401,  402,  344,
+
+      213,  213,  344,  213,  398,  398,  398,  398,  398,  398,
+      398,  398,  344,  213,  344,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  213,
+      213,  454,  256,  960,  982,  502,  961,  983,  325,  319,
+      425,  455,  656,  807,  656,  656,  839,  454,  454,  454,
+      454,  454,  454,  454,  454,  261,  214,  808,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
+      454,  454,  463,  327,  525,  327,  327,  327,  327,  249,
+      526,  526,  526,  526,  504,  367,  432,  231,  689,  809,
+      368,  526,  526,  526,  526,  526,  431,  526,  990,  690,
+
+      993,  991,  840,  493,  526,  283,  449,  449,  449,  449,
+      283,  283,  527,  283,  449,  283,  283,  445,  528,  449,
+      529,  401,  530,  449,  283,  283,  449,  283,  527,  527,
+      527,  527,  527,  527,  527,  527,  449,  283,  449,  527,
+      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      527,  527,  527,  283,  283,  114,  114,  114,  114,  659,
+      659,  659,  659,  116,  231,  106,  117,  531,  116,  118,
+      532,  120,  121,  305,  810,  116,  144,  144,  144,  144,
+      325,  144,  336,  516,  435,  116,  145,  116,  463,  319,
+      464,  146,  841,  513,  877,  842,  465,  465,  465,  465,
+
+      505, 1456,  505,  505,  702,  168,  811,  465,  465,  465,
+      465,  465,  207,  465, 1010,  703,  848, 1011,  847,  849,
+      465,  255,  345,  345,  345,  345,  255,  255,  466,  255,
+      345,  255,  255,  404,  405,  345,  406,  407,  467,  345,
+      255,  255,  345,  255,  466,  466,  466,  466,  466,  466,
+      466,  466,  345,  255,  345,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  255,
+      255,  480, 1015,  538, 1036, 1016,  381, 1037,  308,  539,
+      539,  539,  539,  696,  843,  696,  696,  518,  844,  453,
+      539,  539,  539,  539,  539,  435,  539, 1056,  845, 1068,
+
+     1057,  425,  516,  539,  255,  468,  468,  468,  468,  255,
+      469,  255,  255,  255,  255,  468,  468,  256,  255,  255,
+      470,  255,  469,  255,  255,  255,  255,  469,  469,  469,
+      469,  469,  469,  469,  469,  255,  255,  255,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      469,  469,  469,  255,  403,  735,  535,  344, 1079,  630,
+      630,  468,  632,  632,  408,  188,  736,  947,  537,  890,
+      403,  403,  403,  403,  403,  403,  403,  403,  265,  325,
+      188,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  309,  542,  542,  542,  542,
+
+      309,  309,  543,  309,  542,  309,  309,  544,  545,  542,
+      546,  407,  547,  542,  309,  309,  542,  309,  543,  543,
+      543,  543,  543,  543,  543,  543,  542,  309,  542,  543,
+      543,  543,  543,  543,  543,  543,  543,  543,  543,  543,
+      543,  543,  543,  309,  309,  121,  121,  121,  121,  659,
+      659,  659,  659,  121,  261,  256,  117,  548,  121,  177,
+      549,  179,  121,  468,  810,  121,  697,  106,  697,  697,
+      168,  442,  345,  630,  642,  121,  632,  121,  480,  114,
+      481,  893,  618,  551,  894,  746,  482,  482,  482,  482,
+      914,  114,  249,  915,  303,  344,  811,  482,  482,  482,
+
+      482,  482,  918,  482,  698,  919,  932,  328,  231,  933,
+      482,  180,  287,  287,  287,  287,  180,  180,  311,  180,
+      180,  180,  180,  180,  552,  180,  180,  553,  180,  180,
+      180,  180,  180,  180,  311,  311,  311,  311,  311,  311,
+      311,  311,  180,  180,  180,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  180,
+      180,  182,  488,  556,  488,  488,  182,  182,  557,  182,
+      182,  182,  182,  182,  488,  182,  182,  558,  182,  182,
+      182,  182,  182,  182,  557,  557,  557,  557,  557,  557,
+      557,  557,  182,  182,  182,  557,  557,  557,  557,  557,
+
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  182,
+      182,  260,  493,  493,  493,  493,  260,  260,  565,  260,
+      260,  260,  260,  260,  261,  260,  260,  566,  260,  260,
+      260,  260,  260,  260,  565,  565,  565,  565,  565,  565,
+      565,  565,  260,  260,  260,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  567,
+      260,  187,  290,  290,  290,  290,  187,  187,  316,  187,
+      187,  187,  187,  187,  188,  187,  187,  317,  187,  187,
+      187,  187,  187,  187,  316,  316,  316,  316,  316,  316,
+      316,  316,  187,  187,  187,  316,  316,  316,  316,  316,
+
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  318,
+      187,  189,  499,  575,  499,  499,  189,  189,  576,  189,
+      189,  189,  189,  189,  189,  189,  189,  577,  189,  189,
+      189,  189,  189,  189,  576,  576,  576,  576,  576,  576,
+      576,  576,  189,  189,  189,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  578,
+      189,  324,  502,  502,  502,  502,  324,  324,  581,  324,
+      324,  324,  324,  324,  325,  324,  324,  582,  324,  324,
+      324,  324,  324,  324,  581,  581,  581,  581,  581,  581,
+      581,  581,  324,  324,  324,  581,  581,  581,  581,  581,
+
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  324,
+      324,  248,  516,  516,  516,  516,  248,  248,  603,  248,
+      604,  248,  248,  605,  606,  604,  607,  608,  609,  610,
+      248,  248,  604,  248,  603,  603,  603,  603,  603,  603,
+      603,  603,  604,  248,  604,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  248,
+      248,  213,  308,  308,  308,  308,  213,  213,  337,  213,
+      338,  213,  213,  339,  615,  338,  341,  616,  343,  344,
+      213,  213,  338,  213,  337,  337,  337,  337,  337,  337,
+      337,  337,  338,  213,  338,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  213,
+      213,  215,  524,  619,  524,  524,  215,  215,  620,  215,
+      621,  215,  215,  622,  621,  621,  623,  624,  625,  626,
+      215,  215,  621,  215,  620,  620,  620,  620,  620,  620,
+      620,  620,  621,  215,  621,  620,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  215,
+      215,  213,  344,  344,  344,  344,  213,  213,  454,  213,
+      344,  213,  213,  339,  399,  344,  463,  401,  525,  344,
+      213,  213,  344,  213,  526,  526,  526,  526,  454,  454,
+      454,  454,  344,  213,  344,  526,  526,  526,  526,  526,
+
+      454,  526,  454,  454,  454,  454,  454,  454,  526,  213,
+      213,  400,  449,  455,  168,  168,  168,  168,  265,  454,
+      454,  454,  454,  777,  168,  168,  948,  121,  963,  170,
+      454,  454,  454,  454,  454,  325,  454,  534,  634,  964,
+      535,  635,  641,  454,  283,  449,  449,  449,  449,  283,
+      283,  527,  283,  449,  283,  283,  445,  528,  449,  529,
+      627,  530,  449,  283,  283,  449,  283,  527,  527,  527,
+      527,  527,  527,  527,  527,  449,  283,  449,  527,  527,
+      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      527,  527,  283,  283,  398,  261,  960,  960,  353,  784,
+
+     1147,  256,  214,  249,  402,  674,  669,  674,  674,  560,
+      398,  398,  398,  398,  398,  398,  398,  398,  207,  304,
+      676,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  463,  345,  464,  493,  303,
+      354,  302,  290,  465,  465,  465,  465,  965,  542,  819,
+      966,  495,  677,  421,  465,  465,  465,  465,  465,  794,
+      465, 1173,  967, 1175, 1174,  296, 1176,  465,  255,  535,
+      535,  535,  535,  255,  255,  628,  255,  629,  255,  255,
+      404,  630,  629,  631,  632,  633,  345,  255,  255,  629,
+      255,  628,  628,  628,  628,  628,  628,  628,  628,  629,
+
+      255,  629,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  255,  255,  255,  345,
+      345,  345,  345,  255,  255,  466,  255,  345,  255,  255,
+      404,  405,  345,  480,  407,  538,  345,  255,  255,  345,
+      255,  539,  539,  539,  539,  466,  466,  466,  466,  345,
+      255,  345,  539,  539,  539,  539,  539,  466,  539,  466,
+      466,  466,  466,  466,  466,  539,  255,  255,  403,  121,
+      493,  681,  564,  231,  661, 1177,  406,  986,  408,  188,
+      644,  819, 1018,  645,  403,  403,  403,  403,  403,  403,
+      403,  403,  183,  261,  181,  403,  403,  403,  403,  403,
+
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  406,
+      287,  467,  805,  121,  502,  256,  327,  466,  466,  466,
+      466,  649,  183,  806,  650,  839,  979,  504,  466,  466,
+      466,  466,  466,  980,  466,  580,  981, 1199,  680,  214,
+      681,  466,  255,  468,  468,  468,  468,  255,  469,  255,
+      255,  255,  255,  468,  468,  256,  255,  255,  470,  255,
+      469,  255,  255,  255,  255,  469,  469,  469,  469,  469,
+      469,  469,  469,  255,  255,  255,  469,  469,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      469,  255,  309,  542,  542,  542,  542,  309,  309,  543,
+
+      309,  542,  309,  309,  544,  545,  542,  546,  643,  547,
+      542,  309,  309,  542,  309,  543,  543,  543,  543,  543,
+      543,  543,  543,  542,  309,  542,  543,  543,  543,  543,
+      543,  543,  543,  543,  543,  543,  543,  543,  543,  543,
+      309,  309,  480,  995,  481,  290,  168,  336,  249,  516,
+      482,  482,  482,  482,  996, 1020, 1006,  674,  513, 1007,
+      877,  482,  482,  482,  482,  482, 1021,  482,  207, 1022,
+     1030,  106, 1030, 1030,  482,  258,  409,  409,  409,  409,
+      258,  258,  410,  258,  258,  258,  258,  258,  411,  258,
+      258,  483,  258,  258,  258,  258,  258,  258,  410,  410,
+
+      410,  410,  410,  410,  410,  410,  258,  258,  258,  410,
+      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  258,  258,  182,  182,  110,  182,  182,
+      182,  182,  652,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  652,  182,  182,  182,  182,  182,  652,  652,
+      652,  652,  652,  652,  652,  652,  182,  182,  182,  652,
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  182,  182,  260,  353,  353,  353,  353,
+      260,  260,  663,  260,  260,  260,  260,  260,  261,  260,
+      260,  416,  663,  260,  260,  260,  260,  260,  663,  663,
+
+      663,  663,  663,  663,  663,  663,  260,  260,  260,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  417,  260,  262,  571,  669,  571,  571,
+      262,  262,  670,  262,  262,  262,  262,  262,  262,  262,
+      262,  671,  262,  262,  262,  262,  262,  262,  670,  670,
+      670,  670,  670,  670,  670,  670,  262,  262,  262,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  672,  262,  187,  290,  290,  290,  290,
+      187,  187,  316,  187,  187,  187,  187,  187,  188,  187,
+      187,  317,  187,  187,  187,  187,  187,  187,  316,  316,
+
+      316,  316,  316,  316,  316,  316,  187,  187,  187,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  318,  187,  189,  674,  669,  674,  674,
+      189,  189,  675,  189,  189,  189,  189,  189,  189,  189,
+      189,  676,  675,  189,  189,  189,  189,  189,  675,  675,
+      675,  675,  675,  675,  675,  675,  189,  189,  189,  675,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  677,  189,  324,  681,  681,  681,  681,
+      324,  324,  682,  324,  324,  324,  681,  681,  325,  324,
+      324,  683,  684,  681,  324,  324,  324,  324,  682,  682,
+
+      682,  682,  682,  682,  682,  682,  324,  324,  324,  682,
+      682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
+      682,  682,  682,  685,  324,  248,  336,  336,  336,  336,
+      248,  377,  248,  248,  248,  248,  336,  336,  249,  248,
+      248,  378,  248,  377,  248,  248,  248,  248,  377,  377,
+      377,  377,  377,  377,  377,  377,  248,  248,  248,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      377,  377,  377,  377,  248,  250,  598,  704,  598,  598,
+      250,  705,  250,  250,  250,  250,  598,  598,  250,  250,
+      250,  706,  250,  705,  250,  250,  250,  250,  705,  705,
+
+      705,  705,  705,  705,  705,  705,  250,  250,  250,  705,
+      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      705,  705,  705,  705,  250,  248,  516,  516,  516,  516,
+      248,  248,  713,  248,  604,  248,  248,  605,  606,  604,
+      607,  608,  714,  610,  248,  248,  604,  248,  713,  713,
+      713,  713,  713,  713,  713,  713,  604,  248,  604,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  248,  248,  603,  305,  610,  381, 1219,
+     1223,  602, 1220, 1224, 1082,  609,  278, 1028, 1081,  518,
+     1029,  603,  603,  603,  603,  603,  603,  603,  603,  277,
+
+      276,  275,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  281,  715,  715,  715,
+      715,  281,  281,  716,  281,  717,  281,  281,  718,  719,
+      717,  720,  721,  722,  723,  281,  281,  717,  281,  716,
+      716,  716,  716,  716,  716,  716,  716,  717,  281,  717,
+      716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
+      716,  716,  716,  716,  281,  281,  726,  516,  727,  840,
+     1023,  840,  840,  271,  728,  728,  728,  728,  877, 1024,
+      269,  504,  114,  715, 1025,  728,  728,  728,  728,  728,
+      191,  728, 1243,  914, 1070, 1244,  915,  749,  728,  248,
+
+      610,  610,  610,  610,  248,  248,  729,  248,  610,  248,
+      248,  605,  730,  610,  731,  732,  733,  610,  248,  248,
+      610,  248,  729,  729,  729,  729,  729,  729,  729,  729,
+      610,  248,  610,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  248,  248,  213,
+      381,  381,  381,  381,  213,  382,  213,  213,  213,  213,
+      381,  381,  214,  213,  213,  383,  213,  382,  213,  213,
+      213,  213,  382,  382,  382,  382,  382,  382,  382,  382,
+      213,  213,  213,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  213,  250,
+
+      614,  709,  614,  614,  250,  250,  737,  250,  738,  250,
+      250,  739,  738,  738,  740,  741,  742,  743,  250,  250,
+      738,  250,  737,  737,  737,  737,  737,  737,  737,  737,
+      738,  250,  738,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  250,  250,  283,
+      442,  442,  442,  442,  283,  283,  443,  283,  444,  283,
+      283,  445,  446,  444,  447,  519,  448,  449,  283,  283,
+      444,  283,  443,  443,  443,  443,  443,  443,  443,  443,
+      444,  283,  444,  443,  443,  443,  443,  443,  443,  443,
+      443,  443,  443,  443,  443,  443,  443,  283,  283,  114,
+
+      114,  114,  114,  144,  231,  724,  168,  116, 1248,  188,
+      117,  116,  116,  118,  119,  120,  121, 1098,  711,  116,
+     1099, 1039, 1253, 1287, 1375,  610, 1288, 1376,  183,  116,
+      261,  116,  215,  524,  619,  524,  524,  215,  215,  747,
+      215,  621,  215,  215,  622,  621,  621,  623,  624,  748,
+      626,  215,  215,  621,  215,  747,  747,  747,  747,  747,
+      747,  747,  747,  621,  215,  621,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      215,  215,  620,  308,  535,  308,  405,  661,  993,  407,
+      812, 1408,  625,  181,  744,  947,  453,  745,  620,  620,
+
+      620,  620,  620,  620,  620,  620,  121,  256,  114,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  215,  749,  709,  749,  749,  215,  750,
+      215,  215,  215,  215,  749,  749,  215,  215,  215,  751,
+      215,  750,  215,  215,  215,  215,  750,  750,  750,  750,
+      750,  750,  750,  750,  215,  215,  215,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  215,  752, 1416,  753, 1431, 1417,  535, 1432,
+      468,  754,  754,  754,  754,  305,  305,  305,  305,  947,
+      334,  642,  754,  754,  754,  754,  754,  207,  754, 1434,
+
+      335, 1438, 1435,  214, 1439,  754,  215,  626,  755,  626,
+      626,  215,  215,  756,  215,  626,  215,  215,  622,  626,
+      626,  757,  758,  759,  626,  215,  215,  626,  215,  756,
+      756,  756,  756,  756,  756,  756,  756,  626,  215,  626,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  215,  215,  213,  308,  308,  308,
+      308,  213,  213,  337,  213,  338,  213,  213,  339,  760,
+      338,  341,  761,  343,  344,  213,  213,  338,  213,  337,
+      337,  337,  337,  337,  337,  337,  337,  338,  213,  338,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  213,  213,  255,  535,  535,  535,
+      535,  255,  255,  762,  255,  629,  255,  255,  404,  630,
+      629,  631,  632,  763,  345,  255,  255,  629,  255,  762,
+      762,  762,  762,  762,  762,  762,  762,  629,  255,  629,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  255,  255,  628,  449,  345,  353,
+      711, 1068, 1477,  854, 1460, 1478,  633,  168,  777,  551,
+      560,  948,  628,  628,  628,  628,  628,  628,  628,  628,
+      249,  106,  207,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  285,  764,  764,
+
+      764,  764,  285,  285,  765,  285,  766,  285,  285,  473,
+      767,  766,  768,  769,  770,  471,  285,  285,  766,  285,
+      765,  765,  765,  765,  765,  765,  765,  765,  766,  285,
+      766,  765,  765,  765,  765,  765,  765,  765,  765,  765,
+      765,  765,  765,  765,  765,  285,  285,  773,  114,  774,
+      168,  168,  168,  168,  242,  775,  775,  775,  775,  918,
+      168,  168,  919,  764,  121,  170,  775,  775,  775,  775,
+      775,  241,  775,  960, 1134, 1145, 1360,  626, 1146,  775,
+      257,  638,  755,  638,  638,  257,  257,  778,  257,  779,
+      257,  257,  780,  779,  779,  781,  782,  783,  648,  257,
+
+      257,  779,  257,  778,  778,  778,  778,  778,  778,  778,
+      778,  779,  257,  779,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  257,  257,
+      255,  345,  345,  345,  345,  255,  255,  403,  255,  345,
+      255,  255,  404,  791,  345,  406,  792,  408,  345,  255,
+      255,  345,  255,  403,  403,  403,  403,  403,  403,  403,
+      403,  345,  255,  345,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  255,  255,
+      257,  648,  795,  648,  648,  257,  257,  796,  257,  648,
+      257,  257,  780,  648,  648,  797,  798,  799,  648,  257,
+
+      257,  648,  257,  796,  796,  796,  796,  796,  796,  796,
+      796,  648,  257,  648,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  257,  257,
+      414,  651,  800,  651,  651,  414,  414,  801,  414,  414,
+      414,  414,  414,  802,  414,  414,  803,  414,  414,  414,
+      414,  414,  414,  801,  801,  801,  801,  801,  801,  801,
+      801,  414,  414,  414,  801,  801,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  414,  414,
+      182,  182,  110,  182,  182,  182,  182,  652,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  652,  182,  182,
+
+      182,  182,  182,  652,  652,  652,  652,  652,  652,  652,
+      652,  182,  182,  182,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  652,  652,  182,  182,
+      353,  353,  353,  353, 1026,  305, 1026, 1026,  963,  542,
+      662,  240,  261,  493, 1181,  416,  435,  239,  354,  964,
+      794, 1179, 1154,  967,  819, 1182,  354,  290,  818, 1190,
+      236,  235, 1191,  290,  290,  680, 1487,  495, 1192, 1488,
+     1575, 1193, 1027, 1576,  421,  421, 1195,  417,  561,  662,
+      662,  662,  662,  561,  561,  813,  561,  561,  561,  561,
+      561,  562,  561,  561,  814,  561,  561,  561,  561,  561,
+
+      561,  813,  813,  813,  813,  813,  813,  813,  813,  561,
+      561,  561,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  815,  561,  260,  353,
+      353,  353,  353,  260,  260,  663,  260,  260,  260,  260,
+      260,  261,  260,  260,  416,  663,  260,  260,  260,  260,
+      260,  663,  663,  663,  663,  663,  663,  663,  663,  260,
+      260,  260,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  417,  260,  354,  354,
+      354,  354, 1030,  106, 1030, 1030,  573,  681, 1203,  234,
+      188,  191,  502,  356, 1207,  327,  305,  574, 1018, 1204,
+
+      673,  233, 1205,  839,  327, 1208,  504,  435,  838,  327,
+      327,  327,  327, 1579,  144, 1212, 1580, 1031, 1213,  367,
+      231,  231,  229, 1032,  368,  357,  262,  656,  807,  656,
+      656,  262,  262,  821,  262,  262,  262,  262,  262,  262,
+      262,  262,  808,  821,  262,  262,  262,  262,  262,  821,
+      821,  821,  821,  821,  821,  821,  821,  262,  262,  262,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+      821,  821,  821,  821,  809,  262,  420,  673,  824,  673,
+      673,  420,  420,  825,  420,  420,  420,  420,  420,  421,
+      420,  420,  826,  420,  420,  420,  420,  420,  420,  825,
+
+      825,  825,  825,  825,  825,  825,  825,  420,  420,  420,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  827,  420,  189,  674,  669,  674,
+      674,  189,  189,  675,  189,  189,  189,  189,  189,  189,
+      189,  189,  676,  675,  189,  189,  189,  189,  189,  675,
+      675,  675,  675,  675,  675,  675,  675,  189,  189,  189,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  675,  677,  189,  424,  680,  680,  680,
+      680,  424,  424,  830,  424,  424,  424,  680,  680,  425,
+      424,  424,  831,  424,  680,  424,  424,  424,  424,  830,
+
+      830,  830,  830,  830,  830,  830,  830,  424,  424,  424,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  832,  424,  324,  681,  681,  681,
+      681,  324,  324,  833,  324,  324,  324,  681,  681,  325,
+      324,  324,  683,  324,  681,  324,  324,  324,  324,  833,
+      833,  833,  833,  833,  833,  833,  833,  324,  324,  324,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  833,  833,  685,  324,  834,  787, 1648, 1434,
+     1380,  662, 1196,  124, 1434,  188,  835, 1673, 1026,  305,
+     1026, 1026,  834,  834,  834,  834,  834,  834,  834,  834,
+
+      435,  110,  181,  834,  834,  834,  834,  834,  834,  834,
+      834,  834,  834,  834,  834,  834,  834,  682,  590,  336,
+      712, 1679,  711,  114,  681,  862, 1027,  684,  214,  591,
+      513, 1235,  696,  682,  682,  682,  682,  682,  682,  682,
+      682,  106,  207,  205,  682,  682,  682,  682,  682,  682,
+      682,  682,  682,  682,  682,  682,  682,  682,  248,  336,
+      336,  336,  336,  248,  377,  248,  248,  248,  248,  336,
+      336,  249,  248,  248,  378,  248,  377,  248,  248,  248,
+      248,  377,  377,  377,  377,  377,  377,  377,  377,  248,
+      248,  248,  377,  377,  377,  377,  377,  377,  377,  377,
+
+      377,  377,  377,  377,  377,  377,  377,  248,  709,  709,
+      709,  709,  204,  169,  115,  336,  116,  203,  168,  850,
+      116,  116,  118,  851,  120,  852, 1217,  202,  116, 1218,
+      853,  853,  853,  853,  853,  853,  853,  853,  116,  201,
+      116,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  169,  599,  712,  712,  712,
+      712,  599,  599,  855,  599,  856,  599,  599,  857,  858,
+      856,  859,  860,  861,  862,  599,  599,  856,  599,  855,
+      855,  855,  855,  855,  855,  855,  855,  856,  599,  856,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+
+      855,  855,  855,  855,  599,  599,  248,  516,  516,  516,
+      516,  248,  248,  713,  248,  604,  248,  248,  605,  606,
+      604,  607,  608,  714,  610,  248,  248,  604,  248,  713,
+      713,  713,  713,  713,  713,  713,  713,  604,  248,  604,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  248,  248,  726, 1734,  863,  200,
+      712,  305,  516,  610,  864,  864,  864,  864,  353,  353,
+      353,  353,  435,  877, 1081,  864,  864,  864,  864,  864,
+      261,  864,  865,  416,  121,  199,  198,  197,  864,  603,
+      723,  468,  308, 1250,  196, 1145,  876, 1214, 1146,  609,
+
+      195, 1255,  642,  453,  951,  603,  603,  603,  603,  603,
+      603,  603,  603,  194,  191,  417,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      306,  865,  865,  865,  865,  306,  306,  866,  306,  867,
+      306,  306,  868,  869,  867,  870,  608,  871,  872,  306,
+      306,  867,  306,  866,  866,  866,  866,  866,  866,  866,
+      866,  867,  306,  867,  866,  866,  866,  866,  866,  866,
+      866,  866,  866,  866,  866,  866,  866,  866,  306,  306,
+      168,  168,  168,  168, 1745,  190,  381, 1746,  308,  141,
+      168,  168,  171,  133,  124,  873,  726, 1276,  727, 1294,
+
+     1277,  535, 1295,  610,  728,  728,  728,  728,  188,  308,
+      110,  535,  947,  936, 1081,  728,  728,  728,  728,  728,
+     1315,  728, 1330, 1316, 1335, 1331,  181,  946,  728,  248,
+      610,  610,  610,  610,  248,  248,  729,  248,  610,  248,
+      248,  605,  730,  610,  731,  732,  733,  610,  248,  248,
+      610,  248,  729,  729,  729,  729,  729,  729,  729,  729,
+      610,  248,  610,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  248,  248,  878,
+      344,  353,  812, 1030,  106, 1030, 1030, 1790,  160,  879,
+     1791,  932,  560, 1407,  933,  878,  878,  878,  878,  878,
+
+      878,  878,  878,  156,  153,  152,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  878,  878,
+      281,  723,  723,  723,  723,  281,  281,  880,  281,  723,
+      281,  281,  718,  881,  723,  882,  883,  884,  723,  281,
+      281,  723,  281,  880,  880,  880,  880,  880,  880,  880,
+      880,  723,  281,  723,  880,  880,  880,  880,  880,  880,
+      880,  880,  880,  880,  880,  880,  880,  880,  281,  281,
+      887,  345,  888,  110,  151,  986,  148,  662,  889,  889,
+      889,  889,  965,  353,  484,  966, 1410,  485, 1179,  889,
+      889,  889,  889,  889, 1404,  889,  960, 1405, 1253, 1147,
+
+      147, 1817,  889,  213,  381,  381,  381,  381,  213,  382,
+      213,  213,  213,  213,  381,  381,  214,  213,  213,  383,
+      213,  382,  213,  213,  213,  213,  382,  382,  382,  382,
+      382,  382,  382,  382,  213,  213,  213,  382,  382,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  213,  250,  614,  709,  614,  614,  250,  250,
+      891,  250,  738,  250,  250,  739,  738,  738,  740,  741,
+      892,  743,  250,  250,  738,  250,  891,  891,  891,  891,
+      891,  891,  891,  891,  738,  250,  738,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+
+      891,  250,  250,  737, 1412,  493,  354, 1826, 1855,  564,
+     1827, 1856, 1177,  742,  143, 1413,  819,  495, 1414,  737,
+      737,  737,  737,  737,  737,  737,  737,  142,  141,  133,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  250,  598,  704,  598,  598,  250,
+      705,  250,  250,  250,  250,  598,  598,  250,  250,  250,
+      706,  250,  705,  250,  250,  250,  250,  705,  705,  705,
+      705,  705,  705,  705,  705,  250,  250,  250,  705,  705,
+      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      705,  705,  705,  250,  895, 1181,  896,  354,  131, 1177,
+
+      101, 1177,  897,  897,  897,  897, 1182,  667, 1418, 1415,
+     1421, 1419, 1421,  897,  897,  897,  897,  897,  668,  897,
+     1888,  820, 1897, 1889,   99, 1898,  897,  250,  743,  898,
+      743,  743,  250,  250,  899,  250,  743,  250,  250,  739,
+      743,  743,  900,  901,  902,  743,  250,  250,  743,  250,
+      899,  899,  899,  899,  899,  899,  899,  899,  743,  250,
+      743,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  250,  250,  452,  746,  903,
+      746,  746,  452,  452,  904,  452,  905,  452,  452,  906,
+      907,  905,  908,  909,  910,  911,  452,  452,  905,  452,
+
+      904,  904,  904,  904,  904,  904,  904,  904,  905,  452,
+      905,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  452,  452,  215,  524,  619,
+      524,  524,  215,  215,  747,  215,  621,  215,  215,  622,
+      621,  621,  623,  624,  748,  626,  215,  215,  621,  215,
+      747,  747,  747,  747,  747,  747,  747,  747,  621,  215,
+      621,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  215,  215,  752, 1423,  912,
+      680,   98,  681,   94,  502,  913,  913,  913,  913, 1424,
+     1427, 1195, 1425, 1018, 1441,  839,  913,  913,  913,  913,
+
+      913, 1428,  913, 1900, 1429, 1442, 1016,   93, 1017,  913,
+      215,  749,  709,  749,  749,  215,  750,  215,  215,  215,
+      215,  749,  749,  215,  215,  215,  751,  215,  750,  215,
+      215,  215,  215,  750,  750,  750,  750,  750,  750,  750,
+      750,  215,  215,  215,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  215,
+      620, 1207,  327,  336, 1935, 1956, 1958, 1936, 1957, 1959,
+      753,   92, 1208,  504,  513, 1445,  754,  754,  754,  754,
+      620,  620,  620,  620,   91,   90,   89,  754,  754,  754,
+      754,  754,  620,  754,  620,  620,  620,  620,  620,  620,
+
+      754,  114,  114,  114,  114,  265,  265,  265,  265,  116,
+       85,  265,  117,  116,  116,  118,  119,  120,  121,  854,
+      266,  116, 1451,  602, 1993, 1452, 1082, 1994, 5143, 2051,
+     1459,  116, 2052,  116,  215,  626,  755,  626,  626,  215,
+      215,  916,  215,  626,  215,  215,  622,  626,  626,  757,
+      758,  917,  626,  215,  215,  626,  215,  916,  916,  916,
+      916,  916,  916,  916,  916,  626,  215,  626,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  215,  215,  756,   60, 2100, 2129, 1039,  961,
+      986,   60, 5143, 5143,  759,  183,  183,  183,  183, 1462,
+
+      756,  756,  756,  756,  756,  756,  756,  756, 5143, 5143,
+      185,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  920,  689,  921,  712, 5143,
+      862, 5143,  516,  922,  922,  922,  922,  690,  702, 1235,
+      840, 1480,  186,  877,  922,  922,  922,  922,  922,  703,
+      922, 2159,  847, 2161, 2160, 5143, 2162,  922,  533,  923,
+      923,  923,  923,  533,  533,  924,  533,  925,  533,  533,
+      926,  927,  925,  928,  929,  930,  931,  533,  533,  925,
+      533,  924,  924,  924,  924,  924,  924,  924,  924,  925,
+      533,  925,  924,  924,  924,  924,  924,  924,  924,  924,
+
+      924,  924,  924,  924,  924,  924,  533,  533,  255,  535,
+      535,  535,  535,  255,  255,  762,  255,  629,  255,  255,
+      404,  630,  629,  631,  632,  763,  345,  255,  255,  629,
+      255,  762,  762,  762,  762,  762,  762,  762,  762,  629,
+      255,  629,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  255,  255,  773, 5143,
+      934, 5143, 1453,  305, 1453, 1453,  935,  935,  935,  935,
+      979, 1170,  979,  979,  435,  114,  610,  935,  935,  935,
+      935,  935,  560,  935, 1047, 1171, 1464, 1081,  516, 1465,
+      935,  628, 5143,  381, 1082, 1467, 5143, 1454, 1468, 1481,
+
+     5143,  633, 1482, 1455,  518, 1505, 5143,  628,  628,  628,
+      628,  628,  628,  628,  628, 5143, 5143, 1172,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  309,  936,  936,  936,  936,  309,  309,  937,
+      309,  938,  309,  309,  544,  939,  938,  940,  632,  941,
+      542,  309,  309,  938,  309,  937,  937,  937,  937,  937,
+      937,  937,  937,  938,  309,  938,  937,  937,  937,  937,
+      937,  937,  937,  937,  937,  937,  937,  937,  937,  937,
+      309,  309,  121,  121,  121,  121, 5143, 5143, 1199,  865,
+      121, 1904, 5143,  117,  942,  121,  177,  943,  179,  121,
+
+     1250, 1434,  121, 1483, 1891,  872, 5143,  381, 5143, 1082,
+     2197,  308,  121, 1039,  121,  773, 1486,  774, 1491, 1080,
+     1505, 1492,  453,  775,  775,  775,  775, 5143,  735, 5143,
+      381, 5143, 1522, 5143,  775,  775,  775,  775,  775,  736,
+      775, 1516,  890, 1523, 1517, 5143, 1524,  775,  257,  638,
+      755,  638,  638,  257,  257,  949,  257,  779,  257,  257,
+      780,  779,  779,  781,  782,  950,  648,  257,  257,  779,
+      257,  949,  949,  949,  949,  949,  949,  949,  949,  779,
+      257,  779,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  257,  257,  778,  114,
+
+      535,  535, 2227,  602, 2360,  862, 1281, 2361,  783, 5143,
+      520,  947,  947,  521,  778,  778,  778,  778,  778,  778,
+      778,  778, 5143, 5143, 5143,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  257,
+      951,  898,  951,  951,  257,  952,  257,  257,  257,  257,
+      951,  951,  257,  257,  257,  953,  257,  952,  257,  257,
+      257,  257,  952,  952,  952,  952,  952,  952,  952,  952,
+      257,  257,  257,  952,  952,  952,  952,  952,  952,  952,
+      952,  952,  952,  952,  952,  952,  952,  952,  257,  954,
+      923,  955,  308, 5143,  344, 5143,  961,  956,  956,  956,
+
+      956, 1536, 1322, 1315, 1537,  537, 1316, 1589,  956,  956,
+      956,  956,  956, 1539,  956, 2405,  911,  787, 2406, 5143,
+     1380,  956,  255,  468,  468,  468,  468,  255,  469,  255,
+      255,  255,  255,  468,  468,  256,  255,  255,  470,  255,
+      469,  255,  255,  255,  255,  469,  469,  469,  469,  469,
+      469,  469,  469,  255,  255,  255,  469,  469,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
+      469,  255,  309,  542,  542,  542,  542,  309,  309,  543,
+      309,  542,  309,  309,  544,  545,  542,  546,  643,  547,
+      542,  309,  309,  542,  309,  543,  543,  543,  543,  543,
+
+      543,  543,  543,  542,  309,  542,  543,  543,  543,  543,
+      543,  543,  543,  543,  543,  543,  543,  543,  543,  543,
+      309,  309,  121,  121,  121,  121, 5143, 5143,  993,  535,
+      121, 1408, 5143,  117,  121,  121,  177,  178,  179,  121,
+     1545, 1434,  121, 1546, 1673, 1900, 2494, 1068, 2486, 2495,
+     1460, 5143,  121, 5143,  121,  257,  648,  795,  648,  648,
+      257,  257,  968,  257,  648,  257,  257,  780,  648,  648,
+      797,  798,  969,  648,  257,  257,  648,  257,  968,  968,
+      968,  968,  968,  968,  968,  968,  648,  257,  648,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+
+      968,  968,  968,  257,  257,  796,  936,  345,  353,  858,
+      858,  858,  860,  860,  860,  799, 5143, 1335,  551,  560,
+     1547,  796,  796,  796,  796,  796,  796,  796,  796, 5143,
+     5143, 5143,  796,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  970,  344,  971,  344,
+     5143,  812, 5143,  986,  972,  972,  972,  972, 1550,  468,
+     1570, 1551, 1407, 1571, 1410,  972,  972,  972,  972,  972,
+     1608,  972, 1477, 1609, 2637, 1478, 5143, 2638,  972,  180,
+      287,  287,  287,  287,  180,  180,  311,  180,  180,  180,
+      180,  180,  312,  180,  180,  313,  180,  180,  180,  180,
+
+      180,  180,  311,  311,  311,  311,  311,  311,  311,  311,
+      180,  180,  180,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  180,  180,  414,
+      414,  287,  414,  414,  414,  414,  973,  414,  414,  414,
+      414,  414,  415,  414,  414,  414,  973,  414,  414,  414,
+      414,  414,  973,  973,  973,  973,  973,  973,  973,  973,
+      414,  414,  414,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  414,  414,  486,
+      974,  975,  974,  974,  486,  486,  976,  486,  486,  486,
+      486,  486,  977,  486,  486,  978,  486,  486,  486,  486,
+
+      486,  486,  976,  976,  976,  976,  976,  976,  976,  976,
+      486,  486,  486,  976,  976,  976,  976,  976,  976,  976,
+      976,  976,  976,  976,  976,  976,  976,  486,  486,  561,
+      812,  812,  812,  812,  561,  561,  813,  561,  561,  561,
+      561,  561,  562,  561,  561,  984,  561,  561,  561,  561,
+      561,  561,  813,  813,  813,  813,  813,  813,  813,  813,
+      561,  561,  561,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  985,  561,  561,
+      986,  986,  986,  986,  561,  561,  987,  561,  561,  561,
+      561,  561,  562,  561,  561,  988,  987,  561,  561,  561,
+
+      561,  561,  987,  987,  987,  987,  987,  987,  987,  987,
+      561,  561,  561,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  989,  561,  494,
+      820,  997,  820,  820,  494,  494,  998,  494,  494,  494,
+      494,  494,  495,  494,  494,  999,  494,  494,  494,  494,
+      494,  494,  998,  998,  998,  998,  998,  998,  998,  998,
+      494,  494,  494,  998,  998,  998,  998,  998,  998,  998,
+      998,  998,  998,  998,  998,  998,  998, 1000,  494,  262,
+      656,  807,  656,  656,  262,  262,  821,  262,  262,  262,
+      262,  262,  262,  262,  262,  808,  821,  262,  262,  262,
+
+      262,  262,  821,  821,  821,  821,  821,  821,  821,  821,
+      262,  262,  262,  821,  821,  821,  821,  821,  821,  821,
+      821,  821,  821,  821,  821,  821,  821,  809,  262,  187,
+      290,  290,  290,  290,  187,  187,  316,  187,  187,  187,
+      187,  187,  188,  187,  187,  317,  187,  187,  187,  187,
+      187,  187,  316,  316,  316,  316,  316,  316,  316,  316,
+      187,  187,  187,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  318,  187,  420,
+     1002,  997, 1002, 1002,  420,  420, 1003,  420,  420,  420,
+      420,  420,  421,  420,  420, 1004, 1003,  420,  420,  420,
+
+      420,  420, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+      420,  420,  420, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1005,  420,  424,
+      680,  680,  680,  680,  424,  424, 1008,  424,  424,  424,
+      680,  680,  425,  424,  424,  831, 1009,  680,  424,  424,
+      424,  424, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+      424,  424,  424, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008, 1008, 1008, 1008, 1008,  832,  424,  324,
+      681,  681,  681,  681,  324,  324, 1012,  324,  324,  324,
+      681,  681,  325,  324,  324,  683, 1013,  681,  324,  324,
+
+      324,  324, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+      324,  324,  324, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012,  685,  324,  834,
+      345,  662, 1177, 1781, 1781, 1781, 1783, 1783, 1783,  835,
+     5143, 1615, 1179, 1421, 1616,  834,  834,  834,  834,  834,
+      834,  834,  834, 5143, 5143, 5143,  834,  834,  834,  834,
+      834,  834,  834,  834,  834,  834,  834,  834,  834,  834,
+      512,  847, 1033,  847,  847,  512, 1034,  512,  512,  512,
+      512,  847,  847,  513,  512,  512, 1035,  512, 1034,  512,
+      512,  512,  512, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+
+     1034,  512,  512,  512, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,  512,
+      121,  121,  121,  121, 5143, 5143, 2747,  805,  121, 1360,
+     5143,  117,  121,  121,  177,  178,  179,  121,  806, 2833,
+      121,  979, 1435, 5143, 5143, 5143, 1629,  354, 1635, 5143,
+      121, 5143,  121,  114,  114,  114,  114, 1630,  495, 1636,
+     1631,  116, 1637, 1639,  117,  116,  116,  118,  119,  167,
+      121, 1177, 3017,  116, 1640, 1281, 1998, 1178, 1998, 2000,
+     5143, 2000, 1421,  116, 5143,  116,  599,  854,  854,  854,
+      854,  599, 1038,  855,  599,  856,  599, 1039, 1040,  858,
+
+      856,  859, 1041,  861, 1042,  599,  599,  856,  599, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043,  856,  599,  856,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1038,  599,  599,  712,  712,  712,
+      712,  599,  599, 1044,  599,  856,  599,  599,  857,  858,
+      856,  859,  860, 1045,  862,  599,  599,  856,  599, 1044,
+     1044, 1044, 1044, 1044, 1044, 1044, 1044,  856,  599,  856,
+     1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+     1044, 1044, 1044, 1044,  599,  599,  855, 1650,  662,  680,
+     1998, 3056, 2078, 2000, 3057, 2080,  861, 5143, 1651, 1179,
+
+     1195, 1652,  855,  855,  855,  855,  855,  855,  855,  855,
+     5143, 5143, 5143,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  599, 1039, 1039,
+     1039, 1039,  599, 1038,  599,  599,  599,  599, 1039, 1039,
+      600,  599,  599, 1046,  599, 1038,  599,  599,  599,  599,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  599,
+      599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,  599,  707, 1047, 1047,
+     1047, 1047,  707,  707, 1048,  707, 1049,  707,  707, 1050,
+     1051, 1049, 1052, 1053, 1054, 1055,  707,  707, 1049,  707,
+
+     1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049,  707,
+     1049, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
+     1048, 1048, 1048, 1048, 1048,  707,  707, 1058, 1654, 1059,
+     1658, 5143, 1016, 5143,  681, 1060, 1060, 1060, 1060, 1655,
+     1665, 1659, 1656, 1681, 1002, 1018, 1060, 1060, 1060, 1060,
+     1060, 1666, 1060, 2078, 1194, 2078, 2080, 5143, 2080, 1060,
+      599,  862,  862,  862,  862,  599,  599, 1061,  599,  862,
+      599,  599,  857, 1062,  862, 1063, 1064, 1065,  862,  599,
+      599,  862,  599, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061,  862,  599,  862, 1061, 1061, 1061, 1061, 1061, 1061,
+
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  599,  599,
+      248,  516,  516,  516,  516,  248,  248,  713,  248,  604,
+      248,  248,  605,  606,  604,  726,  608,  863,  610,  248,
+      248,  604,  248,  864,  864,  864,  864,  713,  713,  713,
+      713,  604,  248,  604,  864,  864,  864,  864,  864,  713,
+      864,  713,  713,  713,  713,  713,  713,  864,  248,  248,
+      603, 1441,  502,  854, 1253, 5143, 1150, 1817,  607, 1152,
+      609, 5143, 1442,  839, 1459, 1682,  603,  603,  603,  603,
+      603,  603,  603,  603, 5143, 5143, 5143,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+
+      603,  607,  319,  714,  265, 1453,  305, 1453, 1453,  713,
+      713,  713,  713, 1685, 1698, 1693, 1686,  435, 1694, 1039,
+      713,  713,  713,  713,  713, 1699,  713, 5143, 1700, 1150,
+     1462, 5143, 1152,  713,  248,  336,  336,  336,  336,  248,
+      377,  248,  248,  248,  248,  336,  336,  249,  248,  248,
+      378,  248,  377,  248,  248,  248,  248,  377,  377,  377,
+      377,  377,  377,  377,  377,  248,  248,  248,  377,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      377,  377,  377,  248,  306,  865,  865,  865,  865,  306,
+      306,  866,  306,  867,  306,  306,  868,  869,  867,  870,
+
+     1066,  871,  872,  306,  306,  867,  306,  866,  866,  866,
+      866,  866,  866,  866,  866,  867,  306,  867,  866,  866,
+      866,  866,  866,  866,  866,  866,  866,  866,  866,  866,
+      866,  866,  306,  306,  726, 1706,  727,  712, 5143,  712,
+     5143,  862,  728,  728,  728,  728, 1707, 1225, 1235, 1708,
+     1235,  121, 1480,  728,  728,  728,  728,  728, 1712,  728,
+     3144, 1234, 1719, 3145, 5143, 1720,  728,  248,  610,  610,
+      610,  610,  248,  248,  729,  248,  610,  248,  248,  605,
+      730,  610,  731,  732,  733,  610,  248,  248,  610,  248,
+      729,  729,  729,  729,  729,  729,  729,  729,  610,  248,
+
+      610,  729,  729,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  248,  248,  878, 1055, 1199,
+     1460, 3322, 1904, 3491, 1994, 3544, 1891,  879, 3545, 1724,
+      305, 1727, 1725,  878,  878,  878,  878,  878,  878,  878,
+      878,  435, 5143, 5143,  878,  878,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  887,  865,
+     1071,  610, 5143,  610, 5143, 1695, 1072, 1072, 1072, 1072,
+     1250,  872, 1730, 1483, 1081, 1731, 1082, 1072, 1072, 1072,
+     1072, 1072, 1486, 1072, 5143, 1732,  340, 1505, 5143, 1257,
+     1072,  306,  872,  872,  872,  872,  306,  306, 1073,  306,
+
+      872,  306,  306,  868, 1074,  872, 1075,  732, 1076,  872,
+      306,  306,  872,  306, 1073, 1073, 1073, 1073, 1073, 1073,
+     1073, 1073,  872,  306,  872, 1073, 1073, 1073, 1073, 1073,
+     1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,  306,
+      306,  168,  168,  168,  168,  340, 5143,  305, 1257, 1736,
+      381,  168,  168,  218, 5143, 5143, 1077,  887,  435,  888,
+     1737,  518, 1082, 1738, 1281,  889,  889,  889,  889, 5143,
+     5143, 5143,  709, 1505, 1267, 1761,  889,  889,  889,  889,
+      889, 1696,  889, 1740,  711, 1743, 1741, 2897, 1744,  889,
+      517,  890, 1082,  890,  890,  517,  517, 1083,  517, 1084,
+
+      517,  517, 1085, 1086, 1084, 1087, 1088, 1089, 1090,  517,
+      517, 1084,  517, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1084,  517, 1084, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,  517,  517,
+      250,  614,  709,  614,  614,  250,  250,  891,  250,  738,
+      250,  250,  739,  738,  738,  740,  741,  892,  743,  250,
+      250,  738,  250,  891,  891,  891,  891,  891,  891,  891,
+      891,  738,  250,  738,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  250,  250,
+      895,  340, 1091, 3675, 1257,  712, 3676,  308, 1092, 1092,
+
+     1092, 1092,  986,  986,  986,  986, 1235, 1757,  453, 1092,
+     1092, 1092, 1092, 1092,  562, 1092, 1763,  988, 1758, 5143,
+      114, 1759, 1092,  737,  442,  308,  535, 1764, 5143, 1900,
+     1105,  520, 2486,  896,  521,  618,  453,  947,  911,  897,
+      897,  897,  897,  737,  737,  737,  737, 5143, 5143,  989,
+      897,  897,  897,  897,  897,  737,  897,  737,  737,  737,
+      737,  737,  737,  897,  898,  898,  898,  898, 5143,  169,
+      176,  923,  121, 5143,  168,  850,  121,  121,  177, 1094,
+      179,  852, 1536, 5143,  121, 1537, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095,  121, 5143,  121, 1095, 1095, 1095,
+
+     1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+     1095,  169,  250,  743,  898,  743,  743,  250,  250, 1096,
+      250,  743,  250,  250,  739,  743,  743,  900,  901, 1097,
+      743,  250,  250,  743,  250, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096,  743,  250,  743, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+      250,  250,  899,  936, 1281,  344, 3322, 3904, 3955, 3660,
+     3905, 3956,  902, 5143, 1335, 1761,  537, 1547,  899,  899,
+      899,  899,  899,  899,  899,  899, 5143, 5143, 5143,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+
+      899,  899,  899, 1100, 1799, 1101,  114, 5143, 1147, 5143,
+     1360, 1102, 1102, 1102, 1102, 1800,  931,  520, 1801, 1816,
+      521, 1819, 1102, 1102, 1102, 1102, 1102, 1813, 1102,  399,
+     1814,  399, 1506, 5143, 1506, 1102,  213,  308,  308,  308,
+      308,  213,  213,  337,  213,  338,  213,  213,  339,  340,
+      338,  341,  342,  343,  344,  213,  213,  338,  213,  337,
+      337,  337,  337,  337,  337,  337,  337,  338,  213,  338,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  213,  213,  452,  746,  903,  746,
+      746,  452,  452, 1103,  452,  905,  452,  452,  906,  907,
+
+      905,  908,  909, 1104,  911,  452,  452,  905,  452, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103,  905,  452,  905,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103,  452,  452,  904,  121,  961,  468,
+     4186, 2209, 2209, 4187, 2296, 2296,  910, 5143, 1821, 1589,
+      642, 1822,  904,  904,  904,  904,  904,  904,  904,  904,
+     5143, 5143, 5143,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  452, 1105, 1082,
+     1105, 1105,  452, 1106,  452,  452,  452,  452, 1105, 1105,
+      453,  452,  452, 1107,  452, 1106,  452,  452,  452,  452,
+
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,  452,  452,
+      452, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106,  452,  522, 1108, 1109,
+     1108, 1108,  522,  522, 1110,  522, 1111,  522,  522, 1112,
+     1113, 1111, 1114, 1115, 1116, 1117,  522,  522, 1111,  522,
+     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1111,  522,
+     1111, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
+     1110, 1110, 1110, 1110, 1110,  522,  522, 1118, 1368, 1119,
+      468, 5143, 1380, 5143, 1380, 1120, 1120, 1120, 1120, 1824,
+      963, 1830, 1825, 1842, 1831, 1842, 1120, 1120, 1120, 1120,
+
+     1120,  964, 1120, 2209, 1154, 4424, 2296, 5143, 2897, 1120,
+      452,  911, 1121,  911,  911,  452,  452, 1122,  452,  911,
+      452,  452,  906, 1123,  911, 1124, 1125, 1126,  911,  452,
+      452,  911,  452, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122,  911,  452,  911, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,  452,  452,
+      215,  524,  619,  524,  524,  215,  215,  747,  215,  621,
+      215,  215,  622,  621,  621,  752,  624,  912,  626,  215,
+      215,  621,  215,  913,  913,  913,  913,  747,  747,  747,
+      747,  621,  215,  621,  913,  913,  913,  913,  913,  747,
+
+      913,  747,  747,  747,  747,  747,  747,  913,  215,  215,
+      215,  626,  755,  626,  626,  215,  215,  916,  215,  626,
+      215,  215,  622,  626,  626,  757,  758,  917,  626,  215,
+      215,  626,  215,  916,  916,  916,  916,  916,  916,  916,
+      916,  626,  215,  626,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  215,  215,
+      920, 2265, 1127, 2515, 2267,  812, 2853,  986, 1128, 1128,
+     1128, 1128, 1002,  997, 1002, 1002, 1407, 1844, 1410, 1128,
+     1128, 1128, 1128, 1128,  421, 1128,  121, 1004, 1845, 5143,
+      287, 1846, 1128,  756, 1849,  662,  493,  644, 5143, 2515,
+
+      645,  649, 2853,  921,  650, 1850, 1179,  819, 1406,  922,
+      922,  922,  922,  756,  756,  756,  756, 5143, 5143, 1005,
+      922,  922,  922,  922,  922,  756,  922,  756,  756,  756,
+      756,  756,  756,  922,  379, 1858,  986, 1177, 2515, 2538,
+     2538, 2853, 2591, 2591,  380, 5143, 1859, 1410, 1421, 1409,
+      379,  379,  379,  379,  379,  379,  379,  379, 5143, 5143,
+     5143,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  379,  213,  381,  381,  381,  381,
+      213,  382,  213,  213,  213,  213,  381,  381,  214,  213,
+      213,  383,  213,  382,  213,  213,  213,  213,  382,  382,
+
+      382,  382,  382,  382,  382,  382,  213,  213,  213,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  213,  283,  442,  442,  442,  442,
+      283,  283,  443,  283,  444,  283,  283,  445,  446,  444,
+      447, 1129,  448,  449,  283,  283,  444,  283,  443,  443,
+      443,  443,  443,  443,  443,  443,  444,  283,  444,  443,
+      443,  443,  443,  443,  443,  443,  443,  443,  443,  443,
+      443,  443,  443,  283,  283,  255,  535,  535,  535,  535,
+      255,  255,  628,  255,  629,  255,  255,  404, 1130,  629,
+      631, 1131,  633,  345,  255,  255,  629,  255,  628,  628,
+
+      628,  628,  628,  628,  628,  628,  629,  255,  629,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  255,  255,  395, 1639,  396,  124, 5143,
+      662, 5143,  493,  397,  397,  397,  397, 1640,  493, 1864,
+     1863, 1179, 1865,  819,  397,  397,  397,  397,  397, 1866,
+      397, 2538, 1867, 2579, 2591, 5143, 2702,  397,  213,  344,
+      344,  344,  344,  213,  213,  398,  213,  344,  213,  213,
+      339,  399,  344,  400,  401,  402,  344,  213,  213,  344,
+      213,  398,  398,  398,  398,  398,  398,  398,  398,  344,
+      213,  344,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  398,  398,  213,  213,  255,  535,
+      535,  535,  535,  255,  255,  762,  255,  629,  255,  255,
+      404,  630,  629,  773,  632,  934,  345,  255,  255,  629,
+      255,  935,  935,  935,  935,  762,  762,  762,  762,  629,
+      255,  629,  935,  935,  935,  935,  935,  762,  935,  762,
+      762,  762,  762,  762,  762,  935,  255,  255,  631, 1869,
+      763, 1875, 5143,  680, 5143, 1016,  762,  762,  762,  762,
+     1870, 1639, 1876, 1185, 1195, 1420, 1681,  762,  762,  762,
+      762,  762, 1640,  762, 2579, 1879, 2579, 2702, 5143, 2702,
+      762,  309,  936,  936,  936,  936,  309,  309,  937,  309,
+
+      938,  309,  309,  544,  939,  938,  940, 1132,  941,  542,
+      309,  309,  938,  309,  937,  937,  937,  937,  937,  937,
+      937,  937,  938,  309,  938,  937,  937,  937,  937,  937,
+      937,  937,  937,  937,  937,  937,  937,  937,  937,  309,
+      309,  630, 5143,  773,  632,  774,  493, 1665,  681, 5143,
+     5143,  775,  775,  775,  775, 5143,  319, 1881, 1666, 1018,
+     1882, 1883,  775,  775,  775,  775,  775, 1886,  775, 3322,
+     1887, 2105, 3660, 5143, 4614,  775,  536,  948, 1121,  948,
+      948,  536,  536, 1135,  536, 1136,  536,  536, 1137, 1138,
+     1136, 1139, 1140, 1141, 1142,  536,  536, 1136,  536, 1135,
+
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136,  536, 1136,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135,  536,  536,  257,  638,  755,  638,
+      638,  257,  257,  949,  257,  779,  257,  257,  780,  779,
+      779,  781,  782,  950,  648,  257,  257,  779,  257,  949,
+      949,  949,  949,  949,  949,  949,  949,  779,  257,  779,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  257,  257,  954, 1902, 1143,  502,
+     5143, 1016, 5143,  854, 1144, 1144, 1144, 1144, 1903, 1922,
+     1915, 1446, 1681, 1916, 1459, 1144, 1144, 1144, 1144, 1144,
+
+     1923, 1144, 4182, 1458, 4182, 4184, 5143, 4184, 1144,  257,
+      951,  898,  951,  951,  257,  952,  257,  257,  257,  257,
+      951,  951,  257,  257,  257,  953,  257,  952,  257,  257,
+      257,  257,  952,  952,  952,  952,  952,  952,  952,  952,
+      257,  257,  257,  952,  952,  952,  952,  952,  952,  952,
+      952,  952,  952,  952,  952,  952,  952,  952,  257,  778,
+     1039,  712,  862,  862, 4182, 4470, 5143, 4184, 4872,  955,
+     5143, 1462, 1235, 1480, 1480,  956,  956,  956,  956,  778,
+      778,  778,  778, 5143, 5143, 5143,  956,  956,  956,  956,
+      956,  778,  956,  778,  778,  778,  778,  778,  778,  956,
+
+      784,  961,  961,  961,  961,  784,  784, 1148,  784,  961,
+      784,  784, 1149, 1150,  961, 1151, 1152, 1153,  961,  784,
+      784,  961,  784, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148,  961,  784,  961, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,  784,  784,
+      255,  468,  468,  468,  468,  255,  469,  255,  255,  255,
+      255,  468,  468,  256,  255,  255,  470,  255,  469,  255,
+      255,  255,  255,  469,  469,  469,  469,  469,  469,  469,
+      469,  255,  255,  255,  469,  469,  469,  469,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  469,  469,  255,
+
+      550,  967, 1155,  967,  967,  550,  550, 1156,  550,  967,
+      550,  550, 1157, 1158,  967, 1159, 1160, 1161,  967,  550,
+      550,  967,  550, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156,  967,  550,  967, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,  550,  550,
+      257,  648,  795,  648,  648,  257,  257,  968,  257,  648,
+      257,  257,  780,  648,  648,  797,  798,  969,  648,  257,
+      257,  648,  257,  968,  968,  968,  968,  968,  968,  968,
+      968,  648,  257,  648,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  257,  257,
+
+      970, 4895, 1162, 4540, 4896,  305, 4931,  305, 1163, 1163,
+     1163, 1163,  353,  353,  353,  353,  435, 1938,  435, 1163,
+     1163, 1163, 1163, 1163,  261, 1163,  712,  416, 1939, 5143,
+     5143, 1461, 1163,  796, 1225, 1460,  516, 1953, 5143, 5143,
+     1954, 1919, 1920,  971, 5143, 1712, 1727,  877, 1955,  972,
+      972,  972,  972,  796,  796,  796,  796, 5143, 5143,  417,
+      972,  972,  972,  972,  972,  796,  972,  796,  796,  796,
+      796,  796,  796,  972,  414,  414,  287,  414,  414,  414,
+      414,  973,  414,  414,  414,  414,  414,  415,  414,  414,
+      414,  973,  414,  414,  414,  414,  414,  973,  973,  973,
+
+      973,  973,  973,  973,  973,  414,  414,  414,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  414,  414,  414,  651,  800,  651,  651,  414,
+      414,  801,  414,  414,  414,  414,  414,  802,  414,  414,
+      803,  414,  414,  414,  414,  414,  414,  801,  801,  801,
+      801,  801,  801,  801,  801,  414,  414,  414,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  414,  414,  180,  287,  287,  287,  287,  180,
+      180,  311,  180,  180,  180,  180,  180,  312,  180,  180,
+      313,  180,  180,  180,  180,  180,  180,  311,  311,  311,
+
+      311,  311,  311,  311,  311,  180,  180,  180,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  180,  180,  554, 1164, 1165, 1164, 1164,  554,
+      554, 1166,  554,  554,  554,  554,  554, 1167,  554,  554,
+      803,  554,  554,  554,  554,  554,  554, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166,  554,  554,  554, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166,  554,  554,  182,  488,  556,  488,  488,  182,
+      182,  557,  182,  182,  182,  182,  182, 1168,  182,  182,
+     1169,  182,  182,  182,  182,  182,  182,  557,  557,  557,
+
+      557,  557,  557,  557,  557,  182,  182,  182,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  182,  182,  561,  986,  986,  986,  986,  561,
+      561,  987,  561,  561,  561,  561,  561,  562,  561,  561,
+      988,  987,  561,  561,  561,  561,  561,  987,  987,  987,
+      987,  987,  987,  987,  987,  561,  561,  561,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  989,  561,  260,  493,  493,  493,  493,  260,
+      260,  565,  260,  260,  260,  260,  260,  261,  260,  260,
+      566,  260,  260,  260,  260,  260,  260,  565,  565,  565,
+
+      565,  565,  565,  565,  565,  260,  260,  260,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  567,  260,  187, 1177, 1177, 1177, 1177,  187,
+      187,  316,  187,  187,  187,  187,  187,  188,  187,  187,
+     1183,  187,  187,  187,  187,  187,  187,  316,  316,  316,
+      316,  316,  316,  316,  316,  187,  187,  187,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316, 1184,  187,  494, 1185, 1186, 1185, 1185,  494,
+      494, 1187,  494,  494,  494,  494,  494,  495,  494,  494,
+     1188, 1187,  494,  494,  494,  494,  494, 1187, 1187, 1187,
+
+     1187, 1187, 1187, 1187, 1187,  494,  494,  494, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1189,  494,  420, 1002,  997, 1002, 1002,  420,
+      420, 1003,  420,  420,  420,  420,  420,  421,  420,  420,
+     1004, 1003,  420,  420,  420,  420,  420, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003,  420,  420,  420, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1005,  420,  424,  680,  680,  680,  680,  424,
+      424, 1008,  424,  424,  424,  680,  680,  425,  424,  424,
+      831, 1009,  680,  424,  424,  424,  424, 1008, 1008, 1008,
+
+     1008, 1008, 1008, 1008, 1008,  424,  424,  424, 1008, 1008,
+     1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008,  832,  424,  324,  681,  681,  681,  681,  324,
+      324, 1012,  324,  324,  324,  681,  681,  325,  324,  324,
+      683, 1013,  681,  324,  324,  324,  324, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012,  324,  324,  324, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012,  685,  324,  424, 1016, 1016, 1016, 1016,  424,
+      424, 1200,  424,  424,  424,  424,  424,  425,  424,  424,
+     1201,  424,  424,  424,  424,  424,  424, 1200, 1200, 1200,
+
+     1200, 1200, 1200, 1200, 1200,  424,  424,  424, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200,  424,  424,  324,  502,  502,  502,  502,  324,
+      324,  581,  324,  324,  324,  324,  324,  325,  324,  324,
+      582,  324,  324,  324,  324,  324,  324,  581,  581,  581,
+      581,  581,  581,  581,  581,  324,  324,  324,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  324,  324,  326, 1022, 1209, 1022, 1022,  326,
+      326, 1210,  326,  326,  326,  326,  326,  326,  326,  326,
+     1211,  326,  326,  326,  326,  326,  326, 1210, 1210, 1210,
+
+     1210, 1210, 1210, 1210, 1210,  326,  326,  326, 1210, 1210,
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210,  326,  326,  248,  336,  336,  336,  336,  248,
+      377,  248,  248,  248,  248,  336,  336,  249,  248,  248,
+      378,  248,  377,  248,  248,  248,  248,  377,  377,  377,
+      377,  377,  377,  377,  377,  248,  248,  248,  377,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+      377,  377,  377,  248,  599, 1039, 1039, 1039, 1039,  599,
+     1038,  599,  599,  599,  599, 1039, 1039,  600,  599,  599,
+     1046,  599, 1038,  599,  599,  599,  599, 1038, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038,  599,  599,  599, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038,  599,  599,  862,  862,  862,  862,  599,
+      599, 1061,  599,  862,  599,  599,  857, 1062,  862, 1063,
+     1064, 1065,  862,  599,  599,  862,  599, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061,  862,  599,  862, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061,  599,  599,  599,  712,  712,  712,  712,  599,
+      599, 1044,  599,  856,  599,  599,  857,  858,  856,  859,
+      860, 1045,  862,  599,  599,  856,  599, 1044, 1044, 1044,
+
+     1044, 1044, 1044, 1044, 1044,  856,  599,  856, 1044, 1044,
+     1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+     1044, 1044,  599,  599, 1058, 5005, 1221, 4976, 5006, 1817,
+     5076, 1039, 1222, 1222, 1222, 1222, 1185, 1186, 1185, 1185,
+     1971,  114, 1462, 1222, 1222, 1222, 1222, 1222,  495, 1222,
+     1232, 1188, 1464, 5143, 1968, 1465, 1222,  855,  516, 1082,
+     1082, 1961, 5143, 5105, 1479, 1969, 5106,  861, 1928, 1481,
+     1505, 1505, 1482,  855,  855,  855,  855,  855,  855,  855,
+      855, 5143, 5143, 1189,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  710, 1225,
+
+     1225, 1225, 1225,  710,  710, 1226,  710, 1227,  710,  710,
+     1228, 1229, 1227, 1230,  860, 1231, 1232,  710,  710, 1227,
+      710, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227,
+      710, 1227, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+     1226, 1226, 1226, 1226, 1226, 1226,  710,  710,  709,  709,
+      709,  709, 5143,  169,  115,  872,  116, 5143,  168,  850,
+      450,  116,  118, 1233,  120,  852, 1486, 5143,  116, 1732,
+      853,  853,  853,  853,  853,  853,  853,  853,  116, 5143,
+      116,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  169, 1058, 5060, 1059, 4717,
+
+     5118, 1281, 4719,  381, 1060, 1060, 1060, 1060,  354,  354,
+      354,  354, 1761, 1975,  518, 1060, 1060, 1060, 1060, 1060,
+      188, 1060, 1494,  356, 1976, 5143,  898, 1262, 1060, 1236,
+      735, 1281,  712, 1988, 5143, 4717, 1504, 2002, 4719, 1237,
+     2003,  736, 1761, 1235, 1090, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 5143, 5143,  357, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+      707, 1055, 1055, 1055, 1055,  707,  707, 1238,  707, 1055,
+      707,  707, 1050, 1239, 1055, 1240, 1241, 1242, 1055,  707,
+      707, 1055,  707, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
+
+     1238, 1055,  707, 1055, 1238, 1238, 1238, 1238, 1238, 1238,
+     1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,  707,  707,
+     1245, 1510, 1246, 1225, 5143,  862, 5143,  344, 1247, 1247,
+     1247, 1247, 2005,  516, 1712, 2006, 1480, 2007,  537, 1247,
+     1247, 1247, 1247, 1247, 2020, 1247, 4717, 2021, 5119, 4719,
+     5143, 5142, 1247,  248,  610,  610,  610,  610,  248,  248,
+      878,  248,  610,  248,  248,  605,  730,  610,  887,  732,
+     1071,  610,  248,  248,  610,  248, 1072, 1072, 1072, 1072,
+      878,  878,  878,  878,  610,  248,  610, 1072, 1072, 1072,
+     1072, 1072,  878, 1072,  878,  878,  878,  878,  878,  878,
+
+     1072,  248,  248,  731,  308,  879,  535, 5143, 1147, 5143,
+     1360,  878,  878,  878,  878,  744,  344, 1330,  745, 1816,
+     1331, 1819,  878,  878,  878,  878,  878, 1570,  878, 5143,
+     1571, 5143, 5143, 5143, 5143,  878,  306,  872,  872,  872,
+      872,  306,  306, 1073,  306,  872,  306,  306,  868, 1074,
+      872, 1075, 1251, 1076,  872,  306,  306,  872,  306, 1073,
+     1073, 1073, 1073, 1073, 1073, 1073, 1073,  872,  306,  872,
+     1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073,
+     1073, 1073, 1073, 1073,  306,  306,  729, 5143, 5143, 5143,
+      961, 5143, 5143, 5143, 5143, 5143,  733,  662,  662,  662,
+
+      662, 1589,  729,  729,  729,  729,  729,  729,  729,  729,
+     5143, 5143,  814,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  887,  535,  888,
+      961, 5143, 1380, 5143,  468,  889,  889,  889,  889, 1545,
+     1952, 1589, 1546, 1842,  815,  642,  889,  889,  889,  889,
+      889, 2065,  889, 5143, 1338, 5143, 5143, 5143, 5143,  889,
+      213, 1082, 1082, 1082, 1082,  213,  382,  337,  213,  338,
+      213,  381, 1256,  340,  338,  341, 1257,  343, 1258,  213,
+      213,  338,  213, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  338,  213,  338, 1259, 1259, 1259, 1259, 1259, 1259,
+
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  382,  213,
+      517,  890, 1082,  890,  890,  517,  517, 1260,  517, 1084,
+      517,  517, 1085, 1086, 1084, 1087, 1088, 1261, 1090,  517,
+      517, 1084,  517, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1084,  517, 1084, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,  517,  517,
+     1083,  121, 1380,  961, 5143, 5143, 5143, 5143, 5143, 5143,
+     1089, 5143,  634, 1842, 1589,  635, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 5143, 5143, 5143, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+
+     1083,  517, 1262, 1263, 1262, 1262,  517, 1264,  517,  517,
+      517,  517, 1262, 1262,  518,  517,  517, 1265,  517, 1264,
+      517,  517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264,  517,  517,  517, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+      517,  611, 1266, 1267, 1266, 1266,  611,  611, 1268,  611,
+     1269,  611,  611, 1270, 1271, 1269, 1272, 1273, 1274, 1275,
+      611,  611, 1269,  611, 1268, 1268, 1268, 1268, 1268, 1268,
+     1268, 1268, 1269,  611, 1269, 1268, 1268, 1268, 1268, 1268,
+     1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,  611,
+
+      611, 1278,  449, 1279, 2083, 5143,  812, 5143, 1408, 1280,
+     1280, 1280, 1280,  777, 2089, 2084, 1142, 1407, 2085, 2131,
+     1280, 1280, 1280, 1280, 1280, 2090, 1280, 5143, 2091, 5143,
+     5143, 5143, 5143, 1280,  517, 1090, 1281, 1090, 1090,  517,
+      517, 1282,  517, 1090,  517,  517, 1085, 1283, 1090, 1284,
+     1285, 1286, 1090,  517,  517, 1090,  517, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1090,  517, 1090, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282,  517,  517,  250,  614,  709,  614,  614,  250,
+      250,  891,  250,  738,  250,  250,  739,  738,  738,  895,
+
+      741, 1091,  743,  250,  250,  738,  250, 1092, 1092, 1092,
+     1092,  891,  891,  891,  891,  738,  250,  738, 1092, 1092,
+     1092, 1092, 1092,  891, 1092,  891,  891,  891,  891,  891,
+      891, 1092,  250,  250,  121,  121,  121,  121, 5143, 5143,
+     5143, 1581,  121, 5143, 5143,  117,  121,  121,  177,  178,
+      217,  121, 2095, 5143,  121, 1588, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143,  121, 5143,  121,  250,  743,  898,
+      743,  743,  250,  250, 1096,  250,  743,  250,  250,  739,
+      743,  743,  900,  901, 1097,  743,  250,  250,  743,  250,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,  743,  250,
+
+      743, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096,  250,  250, 1100, 5143, 1289,
+     5143, 5143,  986, 5143,  662, 1290, 1290, 1290, 1290, 1415,
+     1644, 1415, 1415, 1410, 2102, 1179, 1290, 1290, 1290, 1290,
+     1290,  819, 1290,  898, 1645, 2103, 5143, 1601, 1984, 1290,
+      899, 2111, 1408,  986, 2105, 5143, 5143, 2106, 2108, 5143,
+     1101, 2109, 2112, 2131, 1410, 1389, 1102, 1102, 1102, 1102,
+      899,  899,  899,  899, 5143, 5143, 1646, 1102, 1102, 1102,
+     1102, 1102,  899, 1102,  899,  899,  899,  899,  899,  899,
+     1102,  452,  746,  903,  746,  746,  452,  452, 1103,  452,
+
+      905,  452,  452,  906,  907,  905,  908,  909, 1104,  911,
+      452,  452,  905,  452, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103,  905,  452,  905, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,  452,
+      452, 1118, 1849, 1292,  659, 5143,  353, 5143, 1177, 1293,
+     1293, 1293, 1293, 1850, 1858, 2126, 2121,  560, 2127, 1421,
+     1293, 1293, 1293, 1293, 1293, 1859, 1293, 5143, 2132, 5143,
+     5143, 5143, 5143, 1293,  452, 1105, 1082, 1105, 1105,  452,
+     1106,  452,  452,  452,  452, 1105, 1105,  453,  452,  452,
+     1107,  452, 1106,  452,  452,  452,  452, 1106, 1106, 1106,
+
+     1106, 1106, 1106, 1106, 1106,  452,  452,  452, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106,  452,  904,  183,  493,  680, 5143, 5143,
+     5143, 5143, 5143, 5143,  910, 5143, 2133,  819, 1195, 2134,
+      904,  904,  904,  904,  904,  904,  904,  904, 5143, 5143,
+     5143,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  213,  308,  308,  308,  308,
+      213,  213,  337,  213,  338,  213,  213,  339,  340,  338,
+      341,  342,  343,  344,  213,  213,  338,  213,  337,  337,
+      337,  337,  337,  337,  337,  337,  338,  213,  338,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  213,  213,  617, 1296, 1297, 1296, 1296,
+      617,  617, 1298,  617, 1299,  617,  617, 1300, 1301, 1299,
+     1302,  909, 1303, 1304,  617,  617, 1299,  617, 1298, 1298,
+     1298, 1298, 1298, 1298, 1298, 1298, 1299,  617, 1299, 1298,
+     1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+     1298, 1298, 1298,  617,  617,  215,  524,  619,  524,  524,
+      215,  215,  620,  215,  621,  215,  215,  622, 1305,  621,
+      623, 1306,  625,  626,  215,  215,  621,  215,  620,  620,
+      620,  620,  620,  620,  620,  620,  621,  215,  621,  620,
+
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  215,  215, 1118, 1181, 1119, 1858, 5143,
+     1435, 5143, 1016, 1120, 1120, 1120, 1120, 1182,  353, 1859,
+     1415, 2164, 2139, 1681, 1120, 1120, 1120, 1120, 1120, 2141,
+     1120, 5143, 2142, 5143, 5143, 5143, 5143, 1120,  452,  911,
+     1121,  911,  911,  452,  452, 1122,  452,  911,  452,  452,
+      906, 1123,  911, 1124, 1125, 1126,  911,  452,  452,  911,
+      452, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,  911,
+      452,  911, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122,  452,  452, 1307, 1875,
+
+      502,  502, 5143, 5143, 5143, 5143, 5143, 5143, 1308, 5143,
+     1876,  839,  839, 2143, 1307, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 5143, 5143, 5143, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,  522,
+     1117, 1309, 1117, 1117,  522,  522, 1310,  522, 1117,  522,
+      522, 1112, 1311, 1117, 1312, 1313, 1314, 1117,  522,  522,
+     1117,  522, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310,
+     1117,  522, 1117, 1310, 1310, 1310, 1310, 1310, 1310, 1310,
+     1310, 1310, 1310, 1310, 1310, 1310, 1310,  522,  522, 1317,
+      659, 1318, 2150, 1453,  305, 1453, 1453, 1319, 1319, 1319,
+
+     1319, 2144, 2166, 2151, 2145,  435, 1002,  854, 1319, 1319,
+     1319, 1319, 1319, 2167, 1319, 5143, 1680, 5143, 1459, 5143,
+     5143, 1319,  215,  626,  755,  626,  626,  215,  215,  916,
+      215,  626,  215,  215,  622,  626,  626,  920,  758, 1127,
+      626,  215,  215,  626,  215, 1128, 1128, 1128, 1128,  916,
+      916,  916,  916,  626,  215,  626, 1128, 1128, 1128, 1128,
+     1128,  916, 1128,  916,  916,  916,  916,  916,  916, 1128,
+      215,  215,  213,  344,  344,  344,  344,  213,  213,  398,
+      213,  344,  213,  213,  339, 1320,  344,  400, 1321,  402,
+      344,  213,  213,  344,  213,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  344,  213,  344,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      213,  213,  944, 1322, 1322, 1322, 1322,  944,  944, 1323,
+      944, 1324,  944,  944, 1325, 1326, 1324, 1327, 1129, 1328,
+     1329,  944,  944, 1324,  944, 1323, 1323, 1323, 1323, 1323,
+     1323, 1323, 1323, 1324,  944, 1324, 1323, 1323, 1323, 1323,
+     1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+      944,  944,  255,  345,  345,  345,  345,  255,  255,  403,
+      255,  345,  255,  255,  404, 1332,  345,  406, 1333,  408,
+      345,  255,  255,  345,  255,  403,  403,  403,  403,  403,
+
+      403,  403,  403,  345,  255,  345,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      255,  255,  536,  948, 1121,  948,  948,  536,  536, 1336,
+      536, 1136,  536,  536, 1137, 1138, 1136, 1139, 1140, 1337,
+     1142,  536,  536, 1136,  536, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1136,  536, 1136, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+      536,  536, 1135,  681, 1460, 1039, 5143, 5143, 5143, 5143,
+     5143, 5143, 1141, 5143, 2176, 1727, 1462, 2177, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 5143, 5143, 5143, 1135,
+
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135,  536, 1338, 1281, 1338, 1338,  536, 1339,
+      536,  536,  536,  536, 1338, 1338,  537,  536,  536, 1340,
+      536, 1339,  536,  536,  536,  536, 1339, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339,  536,  536,  536, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+     1339, 1339,  536,  636, 1341, 1309, 1341, 1341,  636,  636,
+     1342,  636, 1343,  636,  636, 1344, 1345, 1343, 1346, 1347,
+     1348, 1349,  636,  636, 1343,  636, 1342, 1342, 1342, 1342,
+     1342, 1342, 1342, 1342, 1343,  636, 1343, 1342, 1342, 1342,
+
+     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
+     1342,  636,  636, 1350,  502, 1351, 1207, 5143,  854, 5143,
+     1478, 1352, 1352, 1352, 1352, 2181, 1922, 1208, 2182, 1459,
+     1445, 2229, 1352, 1352, 1352, 1352, 1352, 1923, 1352, 5143,
+     2183, 5143, 5143, 5143, 5143, 1352,  536, 1142, 1353, 1142,
+     1142,  536,  536, 1354,  536, 1142,  536,  536, 1137, 1355,
+     1142, 1356, 1357, 1358, 1142,  536,  536, 1142,  536, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1142,  536, 1142,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354,  536,  536,  257,  638,  755,  638,
+
+      638,  257,  257,  949,  257,  779,  257,  257,  780,  779,
+      779,  954,  782, 1143,  648,  257,  257,  779,  257, 1144,
+     1144, 1144, 1144,  949,  949,  949,  949,  779,  257,  779,
+     1144, 1144, 1144, 1144, 1144,  949, 1144,  949,  949,  949,
+      949,  949,  949, 1144,  257,  257,  784, 1147, 1147, 1147,
+     1147,  784, 1359, 1148,  784,  961,  784, 1360, 1361, 1150,
+      961, 1151, 1362, 1153, 1363,  784,  784,  961,  784, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364,  961,  784,  961,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1359,  784,  784,  961,  961,  961,
+
+      961,  784,  784, 1365,  784,  961,  784,  784, 1149, 1150,
+      961, 1151, 1152, 1366,  961,  784,  784,  961,  784, 1365,
+     1365, 1365, 1365, 1365, 1365, 1365, 1365,  961,  784,  961,
+     1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
+     1365, 1365, 1365, 1365,  784,  784,  784, 1360, 1360, 1360,
+     1360,  784, 1359,  784,  784,  784,  784, 1360, 1360,  785,
+      784,  784, 1367,  784, 1359,  784,  784,  784,  784, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359,  784,  784,  784,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359,  784,  957, 1368, 1368, 1368,
+
+     1368,  957,  957, 1369,  957, 1368,  957,  957, 1370, 1371,
+     1368, 1372, 1373, 1374, 1368,  957,  957, 1368,  957, 1369,
+     1369, 1369, 1369, 1369, 1369, 1369, 1369, 1368,  957, 1368,
+     1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369,
+     1369, 1369, 1369, 1369,  957,  957, 1148, 5143, 5143, 5143,
+      862, 5143, 5143, 5143, 5143, 5143, 1153,  659,  659,  659,
+      659, 1480, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     5143, 5143,  810, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1377,  709, 1378,
+     1460, 5143, 1817, 5143,  610, 1379, 1379, 1379, 1379, 2187,
+
+     1938, 1727, 2188, 1971,  811, 1081, 1379, 1379, 1379, 1379,
+     1379, 1939, 1379, 5143, 2198, 5143, 5143, 5143, 5143, 1379,
+      641, 1154, 1380, 1154, 1154,  641,  641, 1381,  641, 1154,
+      641,  641, 1382, 1383, 1154, 1384, 1385, 1386, 1154,  641,
+      641, 1154,  641, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1154,  641, 1154, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,  641,  641,
+      550,  967, 1155,  967,  967,  550,  550, 1387,  550,  967,
+      550,  550, 1157, 1158,  967, 1159, 1160, 1388,  967,  550,
+      550,  967,  550, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+
+     1387,  967,  550,  967, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,  550,  550,
+      550, 1389, 1380, 1389, 1389,  550, 1390,  550,  550,  550,
+      550, 1389, 1389,  551,  550,  550, 1391,  550, 1390,  550,
+      550,  550,  550, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390,  550,  550,  550, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,  550,
+      646, 1392, 1393, 1392, 1392,  646,  646, 1394,  646, 1392,
+      646,  646, 1395, 1396, 1392, 1397, 1398, 1399, 1392,  646,
+      646, 1392,  646, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
+
+     1394, 1392,  646, 1392, 1394, 1394, 1394, 1394, 1394, 1394,
+     1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,  646,  646,
+     1156, 5143, 5143, 5143, 1039, 5143, 5143, 5143, 5143, 5143,
+     1161, 1656, 1641, 1656, 1656, 1462, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 5143, 5143, 1877, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1400,  168, 1401, 1082, 5143, 1281, 5143, 1281, 1402,
+     1402, 1402, 1402, 2199, 1225, 1505, 2200, 1761, 1878, 1761,
+     1402, 1402, 1402, 1402, 1402, 1712, 1402, 5143, 1955, 5143,
+     5143, 5143, 5143, 1402,  257,  648,  795,  648,  648,  257,
+
+      257,  968,  257,  648,  257,  257,  780,  648,  648,  970,
+      798, 1162,  648,  257,  257,  648,  257, 1163, 1163, 1163,
+     1163,  968,  968,  968,  968,  648,  257,  648, 1163, 1163,
+     1163, 1163, 1163,  968, 1163,  968,  968,  968,  968,  968,
+      968, 1163,  257,  257,  414,  651,  800,  651,  651,  414,
+      414,  801,  414,  414,  414,  414,  414,  802,  414,  414,
+      803,  414,  414,  414,  414,  414,  414,  801,  801,  801,
+      801,  801,  801,  801,  801,  414,  414,  414,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  414,  414,  180,  287,  287,  287,  287,  180,
+
+      180,  311,  180,  180,  180,  180,  180,  312,  180,  180,
+      313,  180,  180,  180,  180,  180,  180,  311,  311,  311,
+      311,  311,  311,  311,  311,  180,  180,  180,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+      311,  311,  180,  180,  414,  414,  287,  414,  414,  414,
+      414,  973,  414,  414,  414,  414,  414,  415,  414,  414,
+      414,  973,  414,  414,  414,  414,  414,  973,  973,  973,
+      973,  973,  973,  973,  973,  414,  414,  414,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  414,  414,  554, 1164, 1165, 1164, 1164,  554,
+
+      554, 1166,  554,  554,  554,  554,  554, 1167,  554,  554,
+     1403,  554,  554,  554,  554,  554,  554, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166,  554,  554,  554, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166,  554,  554,  187, 1177, 1177, 1177, 1177,  187,
+      187,  316,  187,  187,  187,  187,  187,  188,  187,  187,
+     1183,  187,  187,  187,  187,  187,  187,  316,  316,  316,
+      316,  316,  316,  316,  316,  187,  187,  187,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316, 1184,  187,  260,  493,  493,  493,  493,  260,
+
+      260,  565,  260,  260,  260,  260,  260,  261,  260,  260,
+      566,  260,  260,  260,  260,  260,  260,  565,  565,  565,
+      565,  565,  565,  565,  565,  260,  260,  260,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  567,  260,  494, 1185, 1186, 1185, 1185,  494,
+      494, 1187,  494,  494,  494,  494,  494,  495,  494,  494,
+     1188, 1187,  494,  494,  494,  494,  494, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187,  494,  494,  494, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1189,  494,  424,  680,  680,  680,  680,  424,
+
+      424, 1436,  424,  424,  424,  680,  680,  425,  424,  424,
+      831, 1437,  680,  424,  424,  424,  424, 1436, 1436, 1436,
+     1436, 1436, 1436, 1436, 1436,  424,  424,  424, 1436, 1436,
+     1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
+     1436, 1436,  832,  424,  324,  681,  681,  681,  681,  324,
+      324,  833,  324,  324,  324,  681,  681,  325,  324,  324,
+      683,  324,  681,  324,  324,  324,  324,  833,  833,  833,
+      833,  833,  833,  833,  833,  324,  324,  324,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  685,  324,  426, 1205, 1432, 1205, 1205,  426,
+
+      426, 1443,  426,  426,  426,  426,  426,  426,  426,  426,
+     1444,  426,  426,  426,  426,  426,  426, 1443, 1443, 1443,
+     1443, 1443, 1443, 1443, 1443,  426,  426,  426, 1443, 1443,
+     1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443,
+     1443, 1443,  426,  426,  324,  502,  502,  502,  502,  324,
+      324,  581,  324,  324,  324,  324,  324,  325,  324,  324,
+      582,  324,  324,  324,  324,  324,  324,  581,  581,  581,
+      581,  581,  581,  581,  581,  324,  324,  324,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  324,  324,  326, 1446, 1432, 1446, 1446,  326,
+
+      326, 1447,  326,  326,  326, 1446, 1446,  326,  326,  326,
+     1448, 1449, 1446,  326,  326,  326,  326, 1447, 1447, 1447,
+     1447, 1447, 1447, 1447, 1447,  326,  326,  326, 1447, 1447,
+     1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
+     1447, 1447, 1450,  326,  599,  712,  712,  712,  712,  599,
+      599, 1044,  599,  856,  599,  599,  857,  858,  856, 1058,
+      860, 1221,  862,  599,  599,  856,  599, 1222, 1222, 1222,
+     1222, 1044, 1044, 1044, 1044,  856,  599,  856, 1222, 1222,
+     1222, 1222, 1222, 1044, 1222, 1044, 1044, 1044, 1044, 1044,
+     1044, 1222,  599,  599,  855, 5143, 5143, 5143,  516, 5143,
+
+     5143, 5143,  859, 5143,  861,  662,  662,  662,  662,  877,
+      855,  855,  855,  855,  855,  855,  855,  855, 5143, 5143,
+      814,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  859,  862, 1045,  535, 5143,
+      862, 5143, 1147, 1044, 1044, 1044, 1044, 2224, 1232,  947,
+     2225, 1480,  815, 1816, 1044, 1044, 1044, 1044, 1044, 1961,
+     1044, 5143, 2230, 5143, 5143, 5143, 5143, 1044,  599, 1039,
+     1039, 1039, 1039,  599, 1038,  599,  599,  599,  599, 1039,
+     1039,  600,  599,  599, 1046,  599, 1038,  599,  599,  599,
+      599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,
+
+      599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  710, 1225,
+     1225, 1225, 1225,  710,  710, 1226,  710, 1227,  710,  710,
+     1228, 1229, 1227, 1230, 1463, 1231, 1232,  710,  710, 1227,
+      710, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227,
+      710, 1227, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+     1226, 1226, 1226, 1226, 1226, 1226,  710,  710, 1058,  121,
+     1059, 2232, 5143, 1360, 5143,  961, 1060, 1060, 1060, 1060,
+     1719, 2235, 2233, 1720, 1819, 1726, 1589, 1060, 1060, 1060,
+     1060, 1060, 2236, 1060, 5143, 2237, 5143, 5143, 5143, 5143,
+
+     1060,  599,  862,  862,  862,  862,  599,  599, 1061,  599,
+      862,  599,  599,  857, 1062,  862, 1063, 1064, 1065,  862,
+      599,  599,  862,  599, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061,  862,  599,  862, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  599,
+      599, 1236, 5143, 5143, 5143, 1360, 5143, 5143, 5143, 5143,
+     5143, 1237,  493,  493,  493,  493, 1819, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 5143, 5143,  566, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1245,  610, 1469, 1380, 5143, 1380, 5143,  961,
+
+     1470, 1470, 1470, 1470, 1730, 1938, 1842, 1731, 1842,  567,
+     1589, 1470, 1470, 1470, 1470, 1470, 1939, 1470, 5143, 2238,
+     5143, 5143, 5143, 5143, 1470,  710, 1232, 1232, 1232, 1232,
+      710,  710, 1471,  710, 1232,  710,  710, 1228, 1472, 1232,
+     1473, 1064, 1474, 1232,  710,  710, 1232,  710, 1471, 1471,
+     1471, 1471, 1471, 1471, 1471, 1471, 1232,  710, 1232, 1471,
+     1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+     1471, 1471, 1471,  710,  710,  709,  709,  709,  709, 5143,
+      169,  115,  336,  116, 5143,  168,  850,  531,  116,  118,
+     1475,  120,  852, 2250, 5143,  116, 2251,  853,  853,  853,
+
+      853,  853,  853,  853,  853,  116, 5143,  116,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  169, 1245, 1082, 1246, 1494, 5143,  812, 5143,
+     1408, 1247, 1247, 1247, 1247, 2260,  709, 1988, 2261, 1407,
+     2262, 2131, 1247, 1247, 1247, 1247, 1247, 1740, 1247, 5143,
+     1741, 5143, 5143, 5143, 5143, 1247,  248,  336,  336,  336,
+      336,  248,  377,  248,  248,  248,  248,  336,  336,  885,
+      248,  248, 1484,  248,  377,  248,  248,  248,  248,  377,
+      377,  377,  377,  377,  377,  377,  377,  248,  248,  248,
+      377,  377,  377,  377,  377,  377,  377,  377,  377,  377,
+
+      377,  377,  377,  377,  377,  248,  213,  381,  381,  381,
+      381,  213,  382,  213,  213,  213,  213,  381,  381,  214,
+      213,  213,  383,  213,  382,  213,  213,  213,  213,  382,
+      382,  382,  382,  382,  382,  382,  382,  213,  213,  213,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  382,  213,  213,  344,  344,  344,
+      344,  213,  213,  398,  213,  344,  213,  213,  339,  399,
+      344,  400,  401,  402,  344,  213,  213,  344,  213,  398,
+      398,  398,  398,  398,  398,  398,  398,  344,  213,  344,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  213,  213,  213,  308,  308,  308,
+      308,  213,  213,  379,  213,  338,  213,  213,  339,  340,
+      338,  341,  342,  380,  344,  213,  213,  338,  213,  379,
+      379,  379,  379,  379,  379,  379,  379,  338,  213,  338,
+      379,  379,  379,  379,  379,  379,  379,  379,  379,  379,
+      379,  379,  379,  379,  213,  213,  517,  890, 1082,  890,
+      890,  517,  517, 1260,  517, 1084,  517,  517, 1085, 1086,
+     1084, 1087, 1088, 1261, 1090,  517,  517, 1084,  517, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1084,  517, 1084,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+
+     1260, 1260, 1260, 1260,  517,  517, 1278,  468, 1489, 1749,
+     5143,  986, 5143,  662, 1490, 1490, 1490, 1490, 2281, 2311,
+     2287, 2282, 1410, 1760, 1179, 1490, 1490, 1490, 1490, 1490,
+     2312, 1490, 5143, 1105, 5143, 5143, 5143, 5143, 1490,  517,
+     1262, 1263, 1262, 1262,  517, 1264,  517,  517,  517,  517,
+     1262, 1262,  518,  517,  517, 1265,  517, 1264,  517,  517,
+      517,  517, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+      517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,  517, 1083,
+      516, 1408, 1177, 5143, 5143, 5143, 5143, 5143, 5143, 1089,
+
+     5143, 2321, 2131, 1421, 2322, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 5143, 5143, 5143, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+      213, 1082, 1082, 1082, 1082,  213,  382,  337,  213,  338,
+      213,  381, 1256,  340,  338,  341, 1257,  343, 1258,  213,
+      213,  338,  213, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  338,  213,  338, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  382,  213,
+      734, 1493, 1494, 1493, 1493,  734,  734, 1495,  734, 1496,
+      734,  734, 1497, 1498, 1496, 1499, 1088, 1500, 1501,  734,
+
+      734, 1496,  734, 1495, 1495, 1495, 1495, 1495, 1495, 1495,
+     1495, 1496,  734, 1496, 1495, 1495, 1495, 1495, 1495, 1495,
+     1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495,  734,  734,
+      250,  614,  709,  614,  614,  250,  250,  737,  250,  738,
+      250,  250,  739, 1502,  738,  740, 1503,  742,  743,  250,
+      250,  738,  250,  737,  737,  737,  737,  737,  737,  737,
+      737,  738,  250,  738,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  250,  250,
+     1278,  308, 1279,  535, 5143,  662, 5143,  662, 1280, 1280,
+     1280, 1280,  744,  345, 2338,  745, 1179, 2339, 1179, 1280,
+
+     1280, 1280, 1280, 1280, 2351, 1280, 5143, 2352, 5143, 5143,
+     5143, 5143, 1280,  517, 1090, 1281, 1090, 1090,  517,  517,
+     1282,  517, 1090,  517,  517, 1085, 1283, 1090, 1284, 1285,
+     1286, 1090,  517,  517, 1090,  517, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1090,  517, 1090, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282,  517,  517,  213, 1281, 1281, 1281, 1281,  213,  382,
+      398,  213,  344,  213,  381, 1256,  399,  344,  400, 1506,
+      402, 1258,  213,  213,  344,  213, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507,  344,  213,  344, 1507, 1507, 1507,
+
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507,  382,  213, 1508, 1232,  680, 1673, 5143, 5143, 5143,
+     5143, 5143, 5143, 1509, 5143, 1961, 1195, 2485, 2362, 1508,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 5143, 5143, 5143,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 1508,  611, 1275, 1510, 1275, 1275,  611,
+      611, 1511,  611, 1275,  611,  611, 1270, 1512, 1275, 1513,
+     1514, 1515, 1275,  611,  611, 1275,  611, 1511, 1511, 1511,
+     1511, 1511, 1511, 1511, 1511, 1275,  611, 1275, 1511, 1511,
+     1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,
+
+     1511, 1511,  611,  611, 1518,  610, 1519,  308, 5143, 1891,
+     5143, 1435, 1520, 1520, 1520, 1520, 2374,  345,  744, 2375,
+     2488,  745, 2164, 1520, 1520, 1520, 1520, 1520, 2351, 1520,
+     5143, 2352, 5143, 5143, 5143, 5143, 1520,  250,  743,  898,
+      743,  743,  250,  250, 1096,  250,  743,  250,  250,  739,
+      743,  743, 1100,  901, 1289,  743,  250,  250,  743,  250,
+     1290, 1290, 1290, 1290, 1096, 1096, 1096, 1096,  743,  250,
+      743, 1290, 1290, 1290, 1290, 1290, 1096, 1290, 1096, 1096,
+     1096, 1096, 1096, 1096, 1290,  250,  250,  452,  746,  903,
+      746,  746,  452,  452, 1103,  452,  905,  452,  452,  906,
+
+      907,  905, 1118,  909, 1292,  911,  452,  452,  905,  452,
+     1293, 1293, 1293, 1293, 1103, 1103, 1103, 1103,  905,  452,
+      905, 1293, 1293, 1293, 1293, 1293, 1103, 1293, 1103, 1103,
+     1103, 1103, 1103, 1103, 1293,  452,  452,  904, 2394, 5143,
+     1016, 5143, 5143, 5143, 5143,  908, 5143,  910, 5143, 2395,
+      305, 1681, 1815,  904,  904,  904,  904,  904,  904,  904,
+      904,  435, 5143, 5143,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  337, 5143,
+     5143, 5143,  681, 5143, 5143, 5143, 1919, 5143,  343,  659,
+      659,  659,  659, 1018,  337,  337,  337,  337,  337,  337,
+
+      337,  337, 5143, 5143,  810,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  908,
+     2408, 1104, 1904, 5143, 1904, 5143,  854, 1103, 1103, 1103,
+     1103, 2409,  961, 2502, 1818, 2502,  811, 1459, 1103, 1103,
+     1103, 1103, 1103, 2419, 1103, 5143, 2420, 5143, 5143, 5143,
+     5143, 1103,  452, 1105, 1082, 1105, 1105,  452, 1106,  452,
+      452,  452,  452, 1105, 1105,  453,  452,  452, 1107,  452,
+     1106,  452,  452,  452,  452, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106,  452,  452,  452, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+
+     1106,  452,  617, 1296, 1297, 1296, 1296,  617,  617, 1298,
+      617, 1299,  617,  617, 1300, 1301, 1299, 1302, 1525, 1303,
+     1304,  617,  617, 1299,  617, 1298, 1298, 1298, 1298, 1298,
+     1298, 1298, 1298, 1299,  617, 1299, 1298, 1298, 1298, 1298,
+     1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+      617,  617, 1118, 1581, 1119,  121, 5143, 1039, 5143,  712,
+     1120, 1120, 1120, 1120, 2095, 2423, 1821, 2421, 1462, 1822,
+     1235, 1120, 1120, 1120, 1120, 1120, 2424, 1120, 5143, 1596,
+     5143, 5143, 5143, 5143, 1120,  452,  911, 1121,  911,  911,
+      452,  452, 1122,  452,  911,  452,  452,  906, 1123,  911,
+
+     1124, 1125, 1126,  911,  452,  452,  911,  452, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122,  911,  452,  911, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122,  452,  452, 1307, 5143, 5143, 5143,  854,
+     5143, 5143, 5143, 5143, 5143, 1308,  659,  659,  659,  659,
+     1459, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 5143,
+     5143,  810, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 1307, 1307, 1307, 1307, 1317, 1833, 1526, 1478,
+     5143, 1460, 5143, 1817, 1527, 1527, 1527, 1527, 2428, 1581,
+     2229, 1841, 1727,  811, 1971, 1527, 1527, 1527, 1527, 1527,
+
+     2095, 1527, 5143, 2430, 5143, 5143, 5143, 5143, 1527,  617,
+     1304, 1528, 1304, 1304,  617,  617, 1529,  617, 1304,  617,
+      617, 1300, 1530, 1304, 1531, 1125, 1532, 1304,  617,  617,
+     1304,  617, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1304,  617, 1304, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1529, 1529, 1529, 1529, 1529, 1529, 1529,  617,  617,  215,
+      524,  619,  524,  524,  215,  215,  620,  215,  621,  215,
+      215,  622, 1533,  621,  623, 1534,  625,  626,  215,  215,
+      621,  215,  620,  620,  620,  620,  620,  620,  620,  620,
+      621,  215,  621,  620,  620,  620,  620,  620,  620,  620,
+
+      620,  620,  620,  620,  620,  620,  620,  215,  215, 1317,
+      610, 1318,  345, 5143, 1460, 5143, 1082, 1319, 1319, 1319,
+     1319, 2439,  659,  965, 2440, 1727,  966, 1505, 1319, 1319,
+     1319, 1319, 1319, 2448, 1319, 5143, 2449, 5143, 5143, 5143,
+     5143, 1319,  283,  449,  449,  449,  449,  283,  283,  527,
+      283,  449,  283,  283,  445,  528,  449,  529,  627,  530,
+      449,  283,  283,  449,  283,  527,  527,  527,  527,  527,
+      527,  527,  527,  449,  283,  449,  527,  527,  527,  527,
+      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      283,  283,  533,  923,  923,  923,  923,  533,  533,  924,
+
+      533,  925,  533,  533,  926,  927,  925,  928,  929,  930,
+      931,  533,  533,  925,  533,  924,  924,  924,  924,  924,
+      924,  924,  924,  925,  533,  925,  924,  924,  924,  924,
+      924,  924,  924,  924,  924,  924,  924,  924,  924,  924,
+      533,  533,  395, 2451,  396,  662, 5143, 1478, 5143, 1281,
+      397,  397,  397,  397, 2452, 2467, 2462, 2122, 2229, 2463,
+     1761,  397,  397,  397,  397,  397, 2468,  397, 5143, 1185,
+     5143, 5143, 5143, 5143,  397,  213,  344,  344,  344,  344,
+      213,  213,  398,  213,  344,  213,  213,  339,  399,  344,
+      400,  401,  402,  344,  213,  213,  344,  213,  398,  398,
+
+      398,  398,  398,  398,  398,  398,  344,  213,  344,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  213,  213,  944, 1329, 1329, 1329, 1329,
+      944,  944, 1540,  944, 1329,  944,  944, 1325, 1541, 1329,
+     1542, 1543, 1544, 1329,  944,  944, 1329,  944, 1540, 1540,
+     1540, 1540, 1540, 1540, 1540, 1540, 1329,  944, 1329, 1540,
+     1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540,
+     1540, 1540, 1540,  944,  944,  536,  948, 1121,  948,  948,
+      536,  536, 1336,  536, 1136,  536,  536, 1137, 1138, 1136,
+     1139, 1140, 1337, 1142,  536,  536, 1136,  536, 1336, 1336,
+
+     1336, 1336, 1336, 1336, 1336, 1336, 1136,  536, 1136, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336,  536,  536, 1350,  662, 1548, 2476, 5143,
+      712, 5143,  516, 1549, 1549, 1549, 1549, 2473,  680, 2477,
+     2474, 1235, 1425,  877, 1549, 1549, 1549, 1549, 1549, 2480,
+     1549, 5143, 2481, 5143, 5143, 5143, 5143, 1549,  536, 1338,
+     1281, 1338, 1338,  536, 1339,  536,  536,  536,  536, 1338,
+     1338,  537,  536,  536, 1340,  536, 1339,  536,  536,  536,
+      536, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,  536,
+      536,  536, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+
+     1339, 1339, 1339, 1339, 1339, 1339, 1339,  536, 1135, 2490,
+     1478,  535, 5143, 5143, 5143, 5143, 5143, 5143, 1141, 5143,
+     2491, 2229,  947, 2492, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 5143, 5143, 5143, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,  776,
+     1552, 1528, 1552, 1552,  776,  776, 1553,  776, 1554,  776,
+      776, 1555, 1556, 1554, 1557, 1140, 1558, 1559,  776,  776,
+     1554,  776, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553,
+     1554,  776, 1554, 1553, 1553, 1553, 1553, 1553, 1553, 1553,
+     1553, 1553, 1553, 1553, 1553, 1553, 1553,  776,  776,  257,
+
+      638,  755,  638,  638,  257,  257,  778,  257,  779,  257,
+      257,  780, 1560,  779,  781, 1561,  783,  648,  257,  257,
+      779,  257,  778,  778,  778,  778,  778,  778,  778,  778,
+      779,  257,  779,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  257,  257, 1350,
+     2166, 1351,  681, 5143,  516, 5143, 1147, 1352, 1352, 1352,
+     1352, 2167, 1441, 2499, 2493,  877, 2500, 1816, 1352, 1352,
+     1352, 1352, 1352, 1442, 1352, 5143, 1682, 5143, 5143, 5143,
+     5143, 1352,  536, 1142, 1353, 1142, 1142,  536,  536, 1354,
+      536, 1142,  536,  536, 1137, 1355, 1142, 1356, 1357, 1358,
+
+     1142,  536,  536, 1142,  536, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1142,  536, 1142, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+      536,  536, 1562, 2506, 1817, 1360, 5143, 5143, 5143, 5143,
+     5143, 5143, 1563, 5143, 2507, 1971, 1819, 2508, 1562, 1562,
+     1562, 1562, 1562, 1562, 1562, 1562, 5143, 5143, 5143, 1562,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562,  636, 1349, 1564, 1349, 1349,  636,  636,
+     1565,  636, 1349,  636,  636, 1344, 1566, 1349, 1567, 1568,
+     1569, 1349,  636,  636, 1349,  636, 1565, 1565, 1565, 1565,
+
+     1565, 1565, 1565, 1565, 1349,  636, 1349, 1565, 1565, 1565,
+     1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+     1565,  636,  636, 1572,  709, 1573,  709, 5143, 1147, 5143,
+     1360, 1574, 1574, 1574, 1574, 2523,  308, 2527, 2524, 1816,
+     2528, 1819, 1574, 1574, 1574, 1574, 1574, 2545, 1574, 5143,
+     2546, 5143, 5143, 5143, 5143, 1574,  784, 1360, 1360, 1360,
+     1360,  784, 1359,  784,  784,  784,  784, 1360, 1360,  785,
+      784,  784, 1367,  784, 1359,  784,  784,  784,  784, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359,  784,  784,  784,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+
+     1359, 1359, 1359, 1359, 1359,  784,  784,  961,  961,  961,
+      961,  784,  784, 1148,  784,  961,  784,  784, 1149, 1150,
+      961, 1151, 1152, 1153,  961,  784,  784,  961,  784, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148,  961,  784,  961,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148,  784,  784, 1365, 5143, 5143, 5143,
+     1380, 5143, 5143, 5143, 5143, 5143, 1366, 1879, 2146, 1879,
+     1879, 1842, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
+     5143, 5143, 2147, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
+     1365, 1365, 1365, 1365, 1365, 1365, 1365, 1377,  712, 1577,
+
+      610, 5143,  812, 5143, 1408, 1578, 1578, 1578, 1578, 1953,
+     1232, 1081, 1954, 1407, 2148, 2131, 1578, 1578, 1578, 1578,
+     1578, 1961, 1578, 5143, 2230, 5143, 5143, 5143, 5143, 1578,
+      959, 1581, 1581, 1581, 1581,  959,  959, 1582,  959, 1581,
+      959,  959, 1583, 1584, 1581, 1585, 1152, 1586, 1581,  959,
+      959, 1581,  959, 1582, 1582, 1582, 1582, 1582, 1582, 1582,
+     1582, 1581,  959, 1581, 1582, 1582, 1582, 1582, 1582, 1582,
+     1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582,  959,  959,
+      898,  898,  898,  898, 5143,  169,  176, 2274,  121, 5143,
+      168,  850,  548,  121,  177, 1587,  179,  852, 2572, 5143,
+
+      121, 1991, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+      121, 5143,  121, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095, 1095, 1095, 1095,  169, 1377, 2232,
+     1378, 2587, 5143, 1408, 5143,  986, 1379, 1379, 1379, 1379,
+     2233, 2605, 2588, 2585, 2131, 1970, 1410, 1379, 1379, 1379,
+     1379, 1379, 2606, 1379, 5143, 1262, 5143, 5143, 5143, 5143,
+     1379,  255, 1380, 1380, 1380, 1380,  255,  469,  403,  255,
+      345,  255,  468, 1590,  405,  345,  406, 1591,  408, 1592,
+      255,  255,  345,  255, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593,  345,  255,  345, 1593, 1593, 1593, 1593, 1593,
+
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,  469,
+      255,  641, 1154, 1380, 1154, 1154,  641,  641, 1594,  641,
+     1154,  641,  641, 1382, 1383, 1154, 1384, 1385, 1595, 1154,
+      641,  641, 1154,  641, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1154,  641, 1154, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,  641,
+      641,  641, 1596, 1597, 1596, 1596,  641, 1598,  641,  641,
+      641,  641, 1596, 1596,  642,  641,  641, 1599,  641, 1598,
+      641,  641,  641,  641, 1598, 1598, 1598, 1598, 1598, 1598,
+     1598, 1598,  641,  641,  641, 1598, 1598, 1598, 1598, 1598,
+
+     1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+      641,  788, 1600, 1601, 1600, 1600,  788,  788, 1602,  788,
+     1600,  788,  788, 1603, 1604, 1600, 1605, 1606, 1607, 1600,
+      788,  788, 1600,  788, 1602, 1602, 1602, 1602, 1602, 1602,
+     1602, 1602, 1600,  788, 1600, 1602, 1602, 1602, 1602, 1602,
+     1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602,  788,
+      788, 1381, 5143, 5143, 5143,  662, 5143, 5143, 5143, 5143,
+     5143, 1386, 2122, 1860, 2122, 2122, 1179, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 5143, 5143, 2124, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+
+     1381, 1381, 1610,  336, 1611,  812, 5143,  986, 5143,  986,
+     1612, 1612, 1612, 1612, 2614, 1494, 1407, 2615, 1410, 2125,
+     1410, 1612, 1612, 1612, 1612, 1612, 1988, 1612, 5143, 2262,
+     5143, 5143, 5143, 5143, 1612,  550,  967, 1155,  967,  967,
+      550,  550, 1387,  550,  967,  550,  550, 1157, 1158,  967,
+     1159, 1160, 1388,  967,  550,  550,  967,  550, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387,  967,  550,  967, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387,  550,  550, 1400, 1281, 1613, 2666, 5143,
+     1177, 5143,  662, 1614, 1614, 1614, 1614, 2652, 1749, 2667,
+
+     2653, 1421, 1090, 1179, 1614, 1614, 1614, 1614, 1614, 2287,
+     1614, 5143, 2668, 5143, 5143, 5143, 5143, 1614,  550, 1389,
+     1380, 1389, 1389,  550, 1390,  550,  550,  550,  550, 1389,
+     1389,  551,  550,  550, 1391,  550, 1390,  550,  550,  550,
+      550, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,  550,
+      550,  550, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390, 1390, 1390, 1390, 1390, 1390, 1390,  550, 1156,  898,
+      662,  680, 5143, 5143, 5143, 5143, 5143, 5143, 1161, 5143,
+     2002, 1179, 1195, 2003, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 5143, 5143, 5143, 1156, 1156, 1156, 1156, 1156,
+
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,  255,
+      345,  345,  345,  345,  255,  255,  403,  255,  345,  255,
+      255,  404,  405,  345,  406,  407,  408,  345,  255,  255,
+      345,  255,  403,  403,  403,  403,  403,  403,  403,  403,
+      345,  255,  345,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  255,  255,  793,
+     1617, 1618, 1617, 1617,  793,  793, 1619,  793, 1617,  793,
+      793, 1620, 1621, 1617, 1622, 1160, 1623, 1617,  793,  793,
+     1617,  793, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619,
+     1617,  793, 1617, 1619, 1619, 1619, 1619, 1619, 1619, 1619,
+
+     1619, 1619, 1619, 1619, 1619, 1619, 1619,  793,  793,  257,
+      648,  795,  648,  648,  257,  257,  796,  257,  648,  257,
+      257,  780, 1624,  648,  797, 1625,  799,  648,  257,  257,
+      648,  257,  796,  796,  796,  796,  796,  796,  796,  796,
+      648,  257,  648,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  257,  257, 1400,
+      712, 1401,  114, 5143, 1673, 5143, 1891, 1402, 1402, 1402,
+     1402, 2674, 2678,  914, 2675, 2485,  915, 2488, 1402, 1402,
+     1402, 1402, 1402, 2679, 1402, 5143, 1524, 5143, 5143, 5143,
+     5143, 1402,  414,  651,  800,  651,  651,  414,  414,  801,
+
+      414,  414,  414,  414,  414, 1626,  414,  414, 1627,  414,
+      414,  414,  414,  414,  414,  801,  801,  801,  801,  801,
+      801,  801,  801,  414,  414,  414,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      414,  414,  260, 1408, 1408, 1408, 1408,  260,  260,  565,
+      260,  260,  260,  260,  260,  261,  260,  260, 1632,  260,
+      260,  260,  260,  260,  260,  565,  565,  565,  565,  565,
+      565,  565,  565,  260,  260,  260,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+     1633,  260,  561,  662,  662,  662,  662,  561,  561,  813,
+
+      561,  561,  561,  561,  561,  562,  561,  561,  814,  561,
+      561,  561,  561,  561,  561,  813,  813,  813,  813,  813,
+      813,  813,  813,  561,  561,  561,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      815,  561,  189, 1414, 1641, 1414, 1414,  189,  189,  576,
+      189,  189,  189,  189,  189,  189,  189,  189, 1642,  189,
+      189,  189,  189,  189,  189,  576,  576,  576,  576,  576,
+      576,  576,  576,  189,  189,  189,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
+     1643,  189,  818, 1425, 1660, 1425, 1425,  818,  818, 1661,
+
+      818,  818,  818,  818,  818,  819,  818,  818, 1662,  818,
+      818,  818,  818,  818,  818, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661,  818,  818,  818, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     1663,  818,  424,  680,  680,  680,  680,  424,  424,  830,
+      424,  424,  424,  680,  680,  425,  424,  424,  831,  424,
+      680,  424,  424,  424,  424,  830,  830,  830,  830,  830,
+      830,  830,  830,  424,  424,  424,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      832,  424,  426, 1429, 1667, 1429, 1429,  426,  426, 1668,
+
+      426,  426,  426, 1429, 1429,  426,  426,  426, 1669,  426,
+     1429,  426,  426,  426,  426, 1668, 1668, 1668, 1668, 1668,
+     1668, 1668, 1668,  426,  426,  426, 1668, 1668, 1668, 1668,
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+     1670,  426, 1432, 1432, 1432, 1432, 5143, 2689, 5143, 2695,
+     5143,  114,  319,  319, 5143, 1329,  114, 1672, 2690,  319,
+     2696, 2035,  918, 1773, 2716,  919, 2699,  918,  344, 1142,
+      919, 5143, 2394,  898, 2408, 2717, 5143, 5143, 1338,  932,
+     5143, 5143,  933, 2395, 2741, 2409, 2738, 2742, 2748,  323,
+     1196, 1435, 1435, 1435, 1435, 1196, 1196, 1674, 1196, 1196,
+
+     1196, 1196, 1196, 1197, 1196, 1196, 1675, 1196, 1196, 1196,
+     1196, 1196, 1196, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1196, 1196, 1196, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1196, 1196,
+     1676,  168, 1435, 1904, 5143, 5143, 5143, 5143, 5143, 5143,
+     1677, 5143, 2749, 2164, 2502, 2750, 1676, 1676, 1676, 1676,
+     1676, 1676, 1676, 1676, 5143, 5143, 5143, 1676, 1676, 1676,
+     1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+     1676, 1436, 1581,  681, 1904, 5143, 5143, 5143, 5143, 5143,
+     5143, 1437, 5143, 2095, 1018, 2502, 2421, 1436, 1436, 1436,
+
+     1436, 1436, 1436, 1436, 1436, 5143, 5143, 5143, 1436, 1436,
+     1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
+     1436, 1436,  324,  681,  681,  681,  681,  324,  324,  833,
+      324,  324,  324,  681,  681,  325,  324,  324,  683,  324,
+      681,  324,  324,  324,  324,  833,  833,  833,  833,  833,
+      833,  833,  833,  324,  324,  324,  833,  833,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      685,  324, 1683, 2408, 1435,  854, 5143, 5143, 5143, 5143,
+     5143, 5143, 1684, 5143, 2409, 2164, 1459, 2764, 1683, 1683,
+     1683, 1683, 1683, 1683, 1683, 1683, 5143, 5143, 5143, 1683,
+
+     1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+     1683, 1683, 1683,  838, 1445, 1687, 1445, 1445,  838,  838,
+     1688,  838,  838,  838,  838,  838,  839,  838,  838, 1689,
+      838,  838,  838,  838,  838,  838, 1688, 1688, 1688, 1688,
+     1688, 1688, 1688, 1688,  838,  838,  838, 1688, 1688, 1688,
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+     1688,  838,  838,  326, 1446, 1432, 1446, 1446,  326,  326,
+     1690,  326,  326,  326, 1446, 1446,  326,  326,  326, 1448,
+      326, 1446,  326,  326,  326,  326, 1690, 1690, 1690, 1690,
+     1690, 1690, 1690, 1690,  326,  326,  326, 1690, 1690, 1690,
+
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+     1690, 1450,  326, 1691, 1380, 1460, 1478, 5143, 5143, 5143,
+     5143, 5143, 5143, 1692, 5143, 2765, 1727, 2229, 2766, 1691,
+     1691, 1691, 1691, 1691, 1691, 1691, 1691, 5143, 5143, 5143,
+     1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691, 1691, 1691, 1447, 1833, 1039, 1082, 5143, 5143,
+     5143, 5143, 5143, 5143, 1449, 5143, 2428, 1462, 1505, 2767,
+     1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 5143, 5143,
+     5143, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
+     1447, 1447, 1447, 1447, 1447,  248, 1460, 1460, 1460, 1460,
+
+      248,  377,  603,  248,  604,  248,  336, 1701,  606,  604,
+      607, 1702,  609, 1703,  248,  248,  604,  248, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704,  604,  248,  604, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704,  377,  248,  599,  854,  854,  854,  854,
+      599, 1038,  855,  599,  856,  599, 1039, 1040, 1709,  856,
+      859, 1710,  861, 1042,  599,  599,  856,  599, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043,  856,  599,  856, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1038,  599,  215, 1468, 1713, 1468, 1468,
+
+      215,  750,  620,  215,  621,  215,  749, 1714,  621,  621,
+      623, 1715,  625, 1716,  215,  215,  621,  215, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717,  621,  215,  621, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717,  750,  215,  599,  862,  862,  862,  862,
+      599,  599, 1236,  599,  862,  599,  599,  857, 1062,  862,
+     1245, 1064, 1469,  862,  599,  599,  862,  599, 1470, 1470,
+     1470, 1470, 1236, 1236, 1236, 1236,  862,  599,  862, 1470,
+     1470, 1470, 1470, 1470, 1236, 1470, 1236, 1236, 1236, 1236,
+     1236, 1236, 1470,  599,  599, 1063,  898, 1237, 2780, 5143,
+
+     1478, 5143,  862, 1236, 1236, 1236, 1236, 2105,  812, 2781,
+     2106, 2229, 1389, 1480, 1236, 1236, 1236, 1236, 1236, 2786,
+     1236, 5143, 2787, 5143, 5143, 5143, 5143, 1236,  710, 1232,
+     1232, 1232, 1232,  710,  710, 1471,  710, 1232,  710,  710,
+     1228, 1472, 1232, 1473, 1718, 1474, 1232,  710,  710, 1232,
+      710, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1232,
+      710, 1232, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+     1471, 1471, 1471, 1471, 1471, 1471,  710,  710, 1061, 5143,
+     5143, 5143, 1817, 5143, 5143, 5143, 5143, 5143, 1065, 2139,
+     2458, 2139, 2139, 1971, 1061, 1061, 1061, 1061, 1061, 1061,
+
+     1061, 1061, 5143, 5143, 2464, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1245,
+     2789, 1246, 1039, 5143, 1817, 5143, 1994, 1247, 1247, 1247,
+     1247, 2790,  986, 1462, 2130, 1971, 2465, 3019, 1247, 1247,
+     1247, 1247, 1247, 2796, 1247, 5143, 2797, 5143, 5143, 5143,
+     5143, 1247,  255, 1478, 1478, 1478, 1478,  255,  469,  628,
+      255,  629,  255,  468, 1590,  630,  629,  631, 1721,  633,
+     1592,  255,  255,  629,  255, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722,  629,  255,  629, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+
+      469,  255,  876, 1483, 1460, 1483, 1483,  876, 1728,  876,
+      876,  876,  876, 1483, 1483,  877,  876,  876, 1729,  876,
+     1728,  876,  876,  876,  876, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728,  876,  876,  876, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728,  876,  517,  890, 1082,  890,  890,  517,  517, 1260,
+      517, 1084,  517,  517, 1085, 1086, 1084, 1278, 1088, 1489,
+     1090,  517,  517, 1084,  517, 1490, 1490, 1490, 1490, 1260,
+     1260, 1260, 1260, 1084,  517, 1084, 1490, 1490, 1490, 1490,
+     1490, 1260, 1490, 1260, 1260, 1260, 1260, 1260, 1260, 1490,
+
+      517,  517, 1083,  662, 1082,  381, 5143, 5143, 5143, 5143,
+     1087, 5143, 1089, 5143, 2798, 1505,  518, 2799, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 5143, 5143, 5143, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083,  213, 1082, 1082, 1082, 1082,  213,  382,
+      337,  213,  338,  213,  381, 1256,  340,  338,  341, 1257,
+      343, 1258,  213,  213,  338,  213, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259,  338,  213,  338, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  382,  213, 1087, 1639, 1261,  986, 5143,  712, 5143,
+
+      712, 1260, 1260, 1260, 1260, 1640, 2803, 2800, 1863, 1235,
+     2801, 1235, 1260, 1260, 1260, 1260, 1260, 2804, 1260, 5143,
+     1652, 5143, 5143, 5143, 5143, 1260,  517, 1262, 1263, 1262,
+     1262,  517, 1264,  517,  517,  517,  517, 1262, 1262,  518,
+      517,  517, 1265,  517, 1264,  517,  517,  517,  517, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264,  517,  517,  517,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264,  517,  734, 1493, 1494, 1493,
+     1493,  734,  734, 1495,  734, 1496,  734,  734, 1497, 1498,
+     1496, 1499, 1739, 1500, 1501,  734,  734, 1496,  734, 1495,
+
+     1495, 1495, 1495, 1495, 1495, 1495, 1495, 1496,  734, 1496,
+     1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495,
+     1495, 1495, 1495, 1495,  734,  734, 1278, 1177, 1279, 1658,
+     5143, 1994, 5143, 1994, 1280, 1280, 1280, 1280, 2810, 1639,
+     1659, 2811, 3019, 2812, 3019, 1280, 1280, 1280, 1280, 1280,
+     1640, 1280, 5143, 2457, 5143, 5143, 5143, 5143, 1280,  517,
+     1090, 1281, 1090, 1090,  517,  517, 1282,  517, 1090,  517,
+      517, 1085, 1283, 1090, 1284, 1285, 1286, 1090,  517,  517,
+     1090,  517, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1090,  517, 1090, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+
+     1282, 1282, 1282, 1282, 1282, 1282, 1282,  517,  517,  213,
+      344,  344,  344,  344,  213,  213,  454,  213,  344,  213,
+      213,  339,  399,  344,  400,  401,  455,  344,  213,  213,
+      344,  213,  454,  454,  454,  454,  454,  454,  454,  454,
+      344,  213,  344,  454,  454,  454,  454,  454,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  213,  213, 1508,
+     5143, 5143, 5143,  344, 5143, 5143, 5143, 5143, 5143, 1509,
+      662,  662,  662,  662,  537, 1508, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 5143, 5143,  814, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508,
+
+     1518, 1665, 1747,  862, 5143, 1147, 5143, 1360, 1748, 1748,
+     1748, 1748, 1666, 2814, 1480, 1883, 1816,  815, 1819, 1748,
+     1748, 1748, 1748, 1748, 2815, 1748, 5143, 2816, 5143, 5143,
+     5143, 5143, 1748,  213, 1281, 1281, 1281, 1281,  213,  382,
+      398,  213,  344,  213,  381, 1256,  399,  344,  400, 1506,
+      402, 1258,  213,  213,  344,  213, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507,  344,  213,  344, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507,  382,  213,  734, 1501, 1749, 1501, 1501,  734,  734,
+     1750,  734, 1501,  734,  734, 1497, 1751, 1501, 1752, 1285,
+
+     1753, 1501,  734,  734, 1501,  734, 1750, 1750, 1750, 1750,
+     1750, 1750, 1750, 1750, 1501,  734, 1501, 1750, 1750, 1750,
+     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+     1750,  734,  734,  250,  614,  709,  614,  614,  250,  250,
+      737,  250,  738,  250,  250,  739, 1754,  738,  740, 1755,
+      742,  743,  250,  250,  738,  250,  737,  737,  737,  737,
+      737,  737,  737,  737,  738,  250,  738,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  250,  250, 1518, 2820, 1519, 2824, 5143,  961, 5143,
+     1380, 1520, 1520, 1520, 1520, 2821, 2837, 2825, 2822, 1589,
+
+     2163, 1842, 1520, 1520, 1520, 1520, 1520, 2838, 1520, 5143,
+     2839, 5143, 5143, 5143, 5143, 1520,  599,  712,  712,  712,
+      712,  599,  599,  855,  599,  856,  599,  599,  857,  858,
+      856,  859,  860,  861,  862,  599,  599,  856,  599,  855,
+      855,  855,  855,  855,  855,  855,  855,  856,  599,  856,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  599,  599,  876, 1524, 1765, 1524,
+     1524,  876,  876, 1766,  876, 1767,  876,  876, 1768, 1769,
+     1767, 1770, 1771, 1772, 1773,  876,  876, 1767,  876, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767,  876, 1767,
+
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766,  876,  876,  452,  746,  903,  746,
+      746,  452,  452,  904,  452,  905,  452,  452,  906, 1774,
+      905,  908, 1775,  910,  911,  452,  452,  905,  452,  904,
+      904,  904,  904,  904,  904,  904,  904,  905,  452,  905,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  452,  452,  452,  911, 1121,  911,
+      911,  452,  452, 1307,  452,  911,  452,  452,  906, 1123,
+      911, 1317, 1125, 1526,  911,  452,  452,  911,  452, 1527,
+     1527, 1527, 1527, 1307, 1307, 1307, 1307,  911,  452,  911,
+
+     1527, 1527, 1527, 1527, 1527, 1307, 1527, 1307, 1307, 1307,
+     1307, 1307, 1307, 1527,  452,  452,  213,  308,  308,  308,
+      308,  213,  213,  337,  213,  338,  213,  213,  339,  340,
+      338,  341,  342,  343,  344,  213,  213,  338,  213,  337,
+      337,  337,  337,  337,  337,  337,  337,  338,  213,  338,
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  213,  213, 1124, 2841, 1308, 2845,
+     5143,  961, 5143,  812, 1307, 1307, 1307, 1307, 2842,  854,
+     2846, 2843, 1589, 1910, 1407, 1307, 1307, 1307, 1307, 1307,
+     2867, 1307, 5143, 2868, 5143, 5143, 5143, 5143, 1307,  617,
+
+     1304, 1528, 1304, 1304,  617,  617, 1529,  617, 1304,  617,
+      617, 1300, 1530, 1304, 1531, 1776, 1532, 1304,  617,  617,
+     1304,  617, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1304,  617, 1304, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1529, 1529, 1529, 1529, 1529, 1529, 1529,  617,  617, 1122,
+     5143, 5143, 5143,  812, 5143, 5143, 5143, 5143, 5143, 1126,
+      662,  662,  662,  662, 1407, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 5143, 5143,  814, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1317, 1039, 1318, 1408, 5143,  986, 5143,  812, 1319, 1319,
+
+     1319, 1319, 2892,  712, 2131, 2893, 1410,  815, 1407, 1319,
+     1319, 1319, 1319, 1319, 2674, 1319, 5143, 2675, 5143, 5143,
+     5143, 5143, 1319,  946, 1537, 1777, 1537, 1537,  946,  946,
+     1778,  946, 1779,  946,  946, 1780, 1781, 1779, 1782, 1783,
+     1784, 1547,  946,  946, 1779,  946, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1779,  946, 1779, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778,  946,  946,  533,  931,  931,  931,  931,  533,  533,
+     1785,  533,  931,  533,  533,  926, 1786,  931, 1787, 1788,
+     1789,  931,  533,  533,  931,  533, 1785, 1785, 1785, 1785,
+
+     1785, 1785, 1785, 1785,  931,  533,  931, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785,  533,  533,  398, 5143, 5143, 5143,  812, 5143, 5143,
+     5143, 5143, 5143,  402,  662,  662,  662,  662, 1407,  398,
+      398,  398,  398,  398,  398,  398,  398, 5143, 5143,  814,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  463, 2904,  464,  812, 5143,  986,
+     5143, 1177,  465,  465,  465,  465, 2905,  712, 1407, 2007,
+     1410,  815, 1421,  465,  465,  465,  465,  465, 2908,  465,
+     5143, 2909, 5143, 5143, 5143, 5143,  465,  946, 1547, 1792,
+
+     1547, 1547,  946,  946, 1793,  946, 1547,  946,  946, 1780,
+     1794, 1547, 1795, 1796, 1797, 1547,  946,  946, 1547,  946,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1547,  946,
+     1547, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793,  946,  946,  536,  948, 1121,
+      948,  948,  536,  536, 1336,  536, 1136,  536,  536, 1137,
+     1138, 1136, 1350, 1140, 1548, 1142,  536,  536, 1136,  536,
+     1549, 1549, 1549, 1549, 1336, 1336, 1336, 1336, 1136,  536,
+     1136, 1549, 1549, 1549, 1549, 1549, 1336, 1549, 1336, 1336,
+     1336, 1336, 1336, 1336, 1549,  536,  536, 1135,  712, 1177,
+
+     1673, 5143, 5143, 5143, 5143, 1139, 5143, 1141, 5143, 2928,
+     1421, 2485, 2929, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 5143, 5143, 5143, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1139,  535,
+     1337, 2657, 5143, 1891, 5143, 1435, 1336, 1336, 1336, 1336,
+     2935,  862, 2938, 2936, 2488, 2228, 2164, 1336, 1336, 1336,
+     1336, 1336, 2224, 1336, 5143, 2225, 5143, 5143, 5143, 5143,
+     1336,  536, 1338, 1281, 1338, 1338,  536, 1339,  536,  536,
+      536,  536, 1338, 1338,  537,  536,  536, 1340,  536, 1339,
+      536,  536,  536,  536, 1339, 1339, 1339, 1339, 1339, 1339,
+
+     1339, 1339,  536,  536,  536, 1339, 1339, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+      536,  776, 1552, 1528, 1552, 1552,  776,  776, 1553,  776,
+     1554,  776,  776, 1555, 1556, 1554, 1557, 1802, 1558, 1559,
+      776,  776, 1554,  776, 1553, 1553, 1553, 1553, 1553, 1553,
+     1553, 1553, 1554,  776, 1554, 1553, 1553, 1553, 1553, 1553,
+     1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553,  776,
+      776, 1350, 2587, 1351,  898, 5143, 1016, 5143, 1891, 1352,
+     1352, 1352, 1352, 2588, 1039, 2964, 2963, 1681, 2965, 2488,
+     1352, 1352, 1352, 1352, 1352, 2966, 1352, 5143, 2967, 5143,
+
+     5143, 5143, 5143, 1352,  536, 1142, 1353, 1142, 1142,  536,
+      536, 1354,  536, 1142,  536,  536, 1137, 1355, 1142, 1356,
+     1357, 1358, 1142,  536,  536, 1142,  536, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1142,  536, 1142, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354,  536,  536, 1562,  709, 1904, 1435, 5143, 5143,
+     5143, 5143, 5143, 5143, 1563, 5143, 2523, 2502, 2164, 2524,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 5143, 5143,
+     5143, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562, 1562, 1562, 1572, 2970, 1803, 2980, 5143,
+
+      854, 5143,  854, 1804, 1804, 1804, 1804, 2971, 1082, 2981,
+     1738, 1459, 1596, 1459, 1804, 1804, 1804, 1804, 1804, 2260,
+     1804, 5143, 2261, 5143, 5143, 5143, 5143, 1804,  776, 1559,
+     1805, 1559, 1559,  776,  776, 1806,  776, 1559,  776,  776,
+     1555, 1807, 1559, 1808, 1357, 1809, 1559,  776,  776, 1559,
+      776, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1559,
+      776, 1559, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+     1806, 1806, 1806, 1806, 1806, 1806,  776,  776,  257,  638,
+      755,  638,  638,  257,  257,  778,  257,  779,  257,  257,
+      780, 1810,  779,  781, 1811,  783,  648,  257,  257,  779,
+
+      257,  778,  778,  778,  778,  778,  778,  778,  778,  779,
+      257,  779,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  257,  257, 1572, 1749,
+     1573,  709, 5143,  712, 5143,  854, 1574, 1574, 1574, 1574,
+     2287, 1757, 2527, 2668, 1235, 2528, 1459, 1574, 1574, 1574,
+     1574, 1574, 1758, 1574, 5143, 1759, 5143, 5143, 5143, 5143,
+     1574,  784,  961,  961,  961,  961,  784,  784, 1365,  784,
+      961,  784,  784, 1149, 1150,  961, 1377, 1152, 1577,  961,
+      784,  784,  961,  784, 1578, 1578, 1578, 1578, 1365, 1365,
+     1365, 1365,  961,  784,  961, 1578, 1578, 1578, 1578, 1578,
+
+     1365, 1578, 1365, 1365, 1365, 1365, 1365, 1365, 1578,  784,
+      784, 1148, 1763,  712, 1478, 5143, 5143, 5143, 5143, 1151,
+     5143, 1153, 5143, 1764, 1235, 2229, 3034, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 5143, 5143, 5143, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1151, 1225, 1366,  114, 5143, 1478, 5143, 1460,
+     1365, 1365, 1365, 1365, 1712, 3038,  914, 2207, 2229,  915,
+     1727, 1365, 1365, 1365, 1365, 1365, 3039, 1365, 5143, 1773,
+     5143, 5143, 5143, 5143, 1365,  784, 1360, 1360, 1360, 1360,
+      784, 1359,  784,  784,  784,  784, 1360, 1360,  785,  784,
+
+      784, 1367,  784, 1359,  784,  784,  784,  784, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359,  784,  784,  784, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359,  784,  959, 1581, 1581, 1581, 1581,
+      959,  959, 1582,  959, 1581,  959,  959, 1583, 1584, 1581,
+     1585, 1820, 1586, 1581,  959,  959, 1581,  959, 1582, 1582,
+     1582, 1582, 1582, 1582, 1582, 1582, 1581,  959, 1581, 1582,
+     1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582,
+     1582, 1582, 1582,  959,  959, 1377,  535, 1378, 3052, 5143,
+     1817, 5143,  854, 1379, 1379, 1379, 1379, 1330,  931, 3053,
+
+     1331, 1971, 2035, 1459, 1379, 1379, 1379, 1379, 1379, 1813,
+     1379, 5143, 1814, 5143, 5143, 5143, 5143, 1379,  255,  468,
+      468,  468,  468,  255,  469,  255,  255,  255,  255,  468,
+      468,  256,  255,  255,  470,  255,  469,  255,  255,  255,
+      255,  469,  469,  469,  469,  469,  469,  469,  469,  255,
+      255,  255,  469,  469,  469,  469,  469,  469,  469,  469,
+      469,  469,  469,  469,  469,  469,  469,  255,  255,  345,
+      345,  345,  345,  255,  255,  403,  255,  345,  255,  255,
+      404,  405,  345,  406,  407,  408,  345,  255,  255,  345,
+      255,  403,  403,  403,  403,  403,  403,  403,  403,  345,
+
+      255,  345,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  255,  255,  466,  862,
+     1039, 1360, 5143, 5143, 5143, 5143, 5143, 5143,  467, 5143,
+     3058, 1462, 1819, 3059,  466,  466,  466,  466,  466,  466,
+      466,  466, 5143, 5143, 5143,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  641,
+     1154, 1380, 1154, 1154,  641,  641, 1594,  641, 1154,  641,
+      641, 1382, 1383, 1154, 1384, 1385, 1595, 1154,  641,  641,
+     1154,  641, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+     1154,  641, 1154, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+
+     1594, 1594, 1594, 1594, 1594, 1594, 1594,  641,  641, 1610,
+      114, 1828, 3062, 5143, 1082, 5143, 1994, 1829, 1829, 1829,
+     1829,  914,  114, 3063,  915, 1505, 1801, 3019, 1829, 1829,
+     1829, 1829, 1829,  918, 1829, 5143,  919, 5143, 5143, 5143,
+     5143, 1829,  641, 1596, 1597, 1596, 1596,  641, 1598,  641,
+      641,  641,  641, 1596, 1596,  642,  641,  641, 1599,  641,
+     1598,  641,  641,  641,  641, 1598, 1598, 1598, 1598, 1598,
+     1598, 1598, 1598,  641,  641,  641, 1598, 1598, 1598, 1598,
+     1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+     1598,  641, 1381,  345, 1994, 1994, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 1386, 5143, 3094, 3019, 3019, 3095, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 5143, 5143, 5143, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381,  255, 1380, 1380, 1380, 1380,  255,  469,
+      403,  255,  345,  255,  468, 1590,  405,  345,  406, 1591,
+      408, 1592,  255,  255,  345,  255, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593,  345,  255,  345, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593,  469,  255,  962, 1832, 1833, 1832, 1832,  962,  962,
+     1834,  962, 1832,  962,  962, 1835, 1836, 1832, 1837, 1385,
+
+     1838, 1832,  962,  962, 1832,  962, 1834, 1834, 1834, 1834,
+     1834, 1834, 1834, 1834, 1832,  962, 1832, 1834, 1834, 1834,
+     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834,
+     1834,  962,  962,  250,  743,  898,  743,  743,  250,  250,
+      899,  250,  743,  250,  250,  739, 1839,  743,  900, 1840,
+      902,  743,  250,  250,  743,  250,  899,  899,  899,  899,
+      899,  899,  899,  899,  743,  250,  743,  899,  899,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  250,  250, 1610,  961, 1611, 1833, 5143,  712, 5143,
+      862, 1612, 1612, 1612, 1612, 2419,  961, 2428, 2420, 1235,
+
+     2767, 1480, 1612, 1612, 1612, 1612, 1612, 3119, 1612, 5143,
+     3120, 5143, 5143, 5143, 5143, 1612,  550,  967, 1155,  967,
+      967,  550,  550, 1387,  550,  967,  550,  550, 1157, 1158,
+      967, 1400, 1160, 1613,  967,  550,  550,  967,  550, 1614,
+     1614, 1614, 1614, 1387, 1387, 1387, 1387,  967,  550,  967,
+     1614, 1614, 1614, 1614, 1614, 1387, 1614, 1387, 1387, 1387,
+     1387, 1387, 1387, 1614,  550,  550, 1156,  121, 1147, 1360,
+     5143, 5143, 5143, 5143, 1159, 5143, 1161, 5143, 1145, 1816,
+     1819, 1146, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     5143, 5143, 5143, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1159, 3123, 1388,
+      812, 5143, 1380, 5143,  961, 1387, 1387, 1387, 1387, 3124,
+     1849, 3125, 1846, 1842, 3126, 1589, 1387, 1387, 1387, 1387,
+     1387, 1850, 1387, 5143, 2121, 5143, 5143, 5143, 5143, 1387,
+      550, 1389, 1380, 1389, 1389,  550, 1390,  550,  550,  550,
+      550, 1389, 1389,  551,  550,  550, 1391,  550, 1390,  550,
+      550,  550,  550, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390,  550,  550,  550, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,  550,
+      793, 1617, 1618, 1617, 1617,  793,  793, 1619,  793, 1617,
+
+      793,  793, 1620, 1621, 1617, 1622, 1847, 1623, 1617,  793,
+      793, 1617,  793, 1619, 1619, 1619, 1619, 1619, 1619, 1619,
+     1619, 1617,  793, 1617, 1619, 1619, 1619, 1619, 1619, 1619,
+     1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619,  793,  793,
+     1400, 2789, 1401,  986, 5143,  961, 5143,  812, 1402, 1402,
+     1402, 1402, 2790, 1858, 3128, 3127, 1589, 3129, 1407, 1402,
+     1402, 1402, 1402, 1402, 1859, 1402, 5143, 2132, 5143, 5143,
+     5143, 5143, 1402,  554, 1164, 1165, 1164, 1164,  554,  554,
+     1166,  554,  554,  554,  554,  554, 1167,  554,  554, 1403,
+      554,  554,  554,  554,  554,  554, 1166, 1166, 1166, 1166,
+
+     1166, 1166, 1166, 1166,  554,  554,  554, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166,  554,  554,  561,  812,  812,  812,  812,  561,  561,
+      813,  561,  561,  561,  561,  561,  562,  561,  561,  984,
+      561,  561,  561,  561,  561,  561,  813,  813,  813,  813,
+      813,  813,  813,  813,  561,  561,  561,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  985,  561, 1001, 1631, 1851, 1631, 1631, 1001, 1001,
+     1852, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1853,
+     1001, 1001, 1001, 1001, 1001, 1001, 1852, 1852, 1852, 1852,
+
+     1852, 1852, 1852, 1852, 1001, 1001, 1001, 1852, 1852, 1852,
+     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1852, 1854, 1001,  986,  986,  986,  986, 5143, 2476, 1869,
+     1858, 5143, 5143, 5143, 1177,  562, 1875, 5143,  988, 2477,
+     1870, 1859, 3130, 3131, 2791, 3132, 3137, 1876, 3133, 5143,
+     2143, 3147, 2824,  265, 5143, 5143, 5143, 3138,  986, 5143,
+     2484, 5143, 3148, 2825, 3153, 2487, 3152, 3154, 5143, 1410,
+      989,  262, 1637, 1860, 1637, 1637,  262,  262,  670,  262,
+      262,  262,  262,  262,  262,  262,  262, 1861,  262,  262,
+      262,  262,  262,  262,  670,  670,  670,  670,  670,  670,
+
+      670,  670,  262,  262,  262,  670,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670, 1862,
+      262,  260, 1408, 1408, 1408, 1408,  260,  260,  565,  260,
+      260,  260,  260,  260,  261,  260,  260, 1632,  260,  260,
+      260,  260,  260,  260,  565,  565,  565,  565,  565,  565,
+      565,  565,  260,  260,  260,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565, 1633,
+      260,  986,  986,  986,  986, 5143, 1016, 3160, 3165, 5143,
+     5143, 5143, 2824,  562, 1016, 5143,  988, 3157, 3161, 3166,
+     3158, 2170, 2501, 2825,  854, 3172, 3169, 5143, 3173,  854,
+
+     1922,  854, 5143, 5143, 5143, 3174, 1177, 5143, 3175, 5143,
+     3178, 1923, 3199, 3179, 2183, 3200, 5143, 1421,  989,  559,
+     1652, 1644, 1652, 1652,  559,  559, 1871,  559,  559,  559,
+      559,  559,  560,  559,  559, 1872,  559,  559,  559,  559,
+      559,  559, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+      559,  559,  559, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1873,  559,  187,
+     1177, 1177, 1177, 1177,  187,  187,  316,  187,  187,  187,
+      187,  187,  188,  187,  187, 1183,  187,  187,  187,  187,
+      187,  187,  316,  316,  316,  316,  316,  316,  316,  316,
+
+      187,  187,  187,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316, 1184,  187,  818,
+     1415, 1644, 1415, 1415,  818,  818, 1880,  818,  818,  818,
+      818,  818,  819,  818,  818, 1645, 1880,  818,  818,  818,
+      818,  818, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+      818,  818,  818, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1646,  818,  424,
+      680,  680,  680,  680,  424,  424,  830,  424,  424,  424,
+      680,  680,  425,  424,  424,  831,  424,  680,  424,  424,
+      424,  424,  830,  830,  830,  830,  830,  830,  830,  830,
+
+      424,  424,  424,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  832,  424,  319,
+      319,  319,  319, 5143, 1039, 5143, 1938, 5143, 1039,  319,
+      319, 5143, 1763, 2678,  321, 3206,  319, 1939, 3207, 3227,
+     2198,  114, 3228, 1764, 2679, 2215, 3034, 3232, 5143,  712,
+     3251, 2657, 1464, 5143, 5143, 1465, 3243, 5143, 5143, 3244,
+     2928, 3252, 2938, 2929, 2297, 3253,  323,  426, 1429, 1667,
+     1429, 1429,  426,  426, 1884,  426,  426,  426, 1429, 1429,
+      426,  426,  426, 1669, 1885, 1429,  426,  426,  426,  426,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,  426,  426,
+
+      426, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884, 1884, 1884, 1884, 1884, 1670,  426,  319,  319,  319,
+      319, 5143, 5143, 5143,  862,  862, 1460,  319,  319, 5143,
+     1975, 1938,  321,  362,  319, 3256, 3275, 3280, 3257, 3276,
+     3281, 1976, 1939,  898, 3285, 2536, 5143, 3289, 1082, 1082,
+     5143, 5143, 5143, 5143, 2964, 5143, 5143, 2965, 3290, 3293,
+     3313, 1984, 3294, 3314,  323, 1196, 1673, 1673, 1673, 1673,
+     1196, 1196, 1890, 1196, 1196, 1196, 1891, 1891, 1197, 1196,
+     1196, 1892, 1196, 1891, 1196, 1196, 1196, 1196, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1196, 1196, 1196, 1890,
+
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1893, 1196, 1196, 1891, 1891, 1891, 1891,
+     1196, 1196, 1894, 1196, 1196, 1196, 1891, 1891, 1197, 1196,
+     1196, 1895, 1896, 1891, 1196, 1196, 1196, 1196, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1196, 1196, 1196, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894, 1894, 1893, 1196, 1676,  114,  290, 1673, 5143,
+     5143, 5143, 5143, 5143, 5143, 1677, 5143, 3319,  421, 2485,
+     3320, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 5143,
+     5143, 5143, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+
+     1676, 1676, 1676, 1676, 1676, 1676, 1017, 1682, 1904, 1682,
+     1682, 1017, 1017, 1905, 1017, 1017, 1017, 1017, 1017, 1018,
+     1017, 1017, 1906, 1017, 1017, 1017, 1017, 1017, 1017, 1905,
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1017, 1017, 1017,
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1905, 1905, 1905, 1017, 1017, 1907, 2630, 2486, 1891,
+     5143, 5143, 5143, 5143, 5143, 5143, 1908, 5143, 3324, 3493,
+     2488, 3325, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+     5143, 5143, 5143, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907, 1907, 1683, 1478, 1435,
+
+     2486, 5143, 5143, 5143, 5143, 5143, 5143, 1684, 5143, 3337,
+     2164, 3493, 3338, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+     1683, 5143, 5143, 5143, 1683, 1683, 1683, 1683, 1683, 1683,
+     1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,  324,  502,
+      502,  502,  502,  324,  324,  581,  324,  324,  324,  324,
+      324,  325,  324,  324,  582,  324,  324,  324,  324,  324,
+      324,  581,  581,  581,  581,  581,  581,  581,  581,  324,
+      324,  324,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  324,  324,  838, 1910,
+     1904, 1910, 1910,  838,  838, 1911,  838,  838,  838, 1910,
+
+     1910,  839,  838,  838, 1912, 1913, 1910,  838,  838,  838,
+      838, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,  838,
+      838,  838, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
+     1911, 1911, 1911, 1911, 1911, 1911, 1914,  838,  326, 1446,
+     1432, 1446, 1446,  326,  326, 1917,  326,  326,  326, 1446,
+     1446,  326,  326,  326, 1448, 1918, 1446,  326,  326,  326,
+      326, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,  326,
+      326,  326, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917, 1450,  326, 1691, 1281,
+     1891, 1904, 5143, 5143, 5143, 5143, 5143, 5143, 1692, 5143,
+
+     2652, 2488, 2502, 2653, 1691, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691, 5143, 5143, 5143, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,  599,
+      854,  854,  854,  854,  599, 1038,  855,  599,  856,  599,
+     1039, 1040,  858,  856,  859, 1041,  861, 1042,  599,  599,
+      856,  599, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+      856,  599,  856, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1038,  599, 1093,
+     1700, 1924, 1700, 1700, 1093, 1925, 1926, 1093, 1927, 1093,
+     1928, 1929, 1927, 1927, 1930, 1931, 1932, 1933, 1093, 1093,
+
+     1927, 1093, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+     1927, 1093, 1927, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1925, 1093,  248,
+      336,  336,  336,  336,  248,  377,  248,  248,  248,  248,
+      336,  336,  249,  248,  248,  378,  248,  377,  248,  248,
+      248,  248,  377,  377,  377,  377,  377,  377,  377,  377,
+      248,  248,  248,  377,  377,  377,  377,  377,  377,  377,
+      377,  377,  377,  377,  377,  377,  377,  377,  248,  248,
+      610,  610,  610,  610,  248,  248,  729,  248,  610,  248,
+      248,  605,  730,  610,  731,  732,  733,  610,  248,  248,
+
+      610,  248,  729,  729,  729,  729,  729,  729,  729,  729,
+      610,  248,  610,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  248,  248,  248,
+      516,  516,  516,  516,  248,  248,  713,  248,  604,  248,
+      248,  605,  606,  604,  607,  608,  714,  610,  248,  248,
+      604,  248,  713,  713,  713,  713,  713,  713,  713,  713,
+      604,  248,  604,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  248,  248,  599,
+     1039, 1039, 1039, 1039,  599, 1038,  599,  599,  599,  599,
+     1039, 1039,  600,  599,  599, 1046,  599, 1038,  599,  599,
+
+      599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+      599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  250,
+     1708, 1940, 1708, 1708,  250,  705,  737,  250,  738,  250,
+      598, 1941,  738,  738,  740, 1942,  742, 1943,  250,  250,
+      738,  250, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+      738,  250,  738, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944,  705,  250,  601,
+     1763, 1763, 1763, 1763,  601,  601, 1945,  601, 1946,  601,
+      601, 1947, 1948, 1946, 1949, 1950, 1951, 1952,  601,  601,
+
+     1946,  601, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+     1946,  601, 1946, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+     1945, 1945, 1945, 1945, 1945, 1945, 1945,  601,  601,  709,
+      709,  709,  709, 5143,  169,  115,  516,  116, 5143,  168,
+      850,  116,  116,  118,  851,  120,  852, 1481, 5143,  116,
+     1482,  853,  853,  853,  853,  853,  853,  853,  853,  116,
+     5143,  116,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  169,  215,  749,  709,
+      749,  749,  215,  750,  215,  215,  215,  215,  749,  749,
+      215,  215,  215,  751,  215,  750,  215,  215,  215,  215,
+
+      750,  750,  750,  750,  750,  750,  750,  750,  215,  215,
+      215,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  215,  215,  626,  755,
+      626,  626,  215,  215,  756,  215,  626,  215,  215,  622,
+      626,  626,  757,  758,  759,  626,  215,  215,  626,  215,
+      756,  756,  756,  756,  756,  756,  756,  756,  626,  215,
+      626,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  215,  215,  215,  524,  619,
+      524,  524,  215,  215,  747,  215,  621,  215,  215,  622,
+      621,  621,  623,  624,  748,  626,  215,  215,  621,  215,
+
+      747,  747,  747,  747,  747,  747,  747,  747,  621,  215,
+      621,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  215,  215,  255,  535,  535,
+      535,  535,  255,  255,  762,  255,  629,  255,  255,  404,
+      630,  629,  631,  632,  763,  345,  255,  255,  629,  255,
+      762,  762,  762,  762,  762,  762,  762,  762,  629,  255,
+      629,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  255,  255,  257, 1725, 1962,
+     1725, 1725,  257,  952,  778,  257,  779,  257,  951, 1963,
+      779,  779,  781, 1964,  783, 1965,  257,  257,  779,  257,
+
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,  779,  257,
+      779, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966,  952,  257, 1080, 1732, 1817,
+     1732, 1732, 1080, 1972, 1080, 1080, 1080, 1080, 1732, 1732,
+     1081, 1080, 1080, 1973, 1080, 1972, 1080, 1080, 1080, 1080,
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1080, 1080,
+     1080, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1080,  512, 1738, 1460,
+     1738, 1738,  512,  512, 1977,  512, 1978,  512,  512, 1979,
+     1980, 1978, 1981, 1982, 1983, 1984,  512,  512, 1978,  512,
+
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1978,  512,
+     1978, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977,  512,  512,  517,  890, 1082,
+      890,  890,  517,  517, 1083,  517, 1084,  517,  517, 1085,
+     1985, 1084, 1087, 1986, 1089, 1090,  517,  517, 1084,  517,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1084,  517,
+     1084, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083,  517,  517, 1093, 1744, 1713,
+     1744, 1744, 1093, 1093, 1926, 1093, 1927, 1093, 1093, 1989,
+     1927, 1927, 1930, 1990, 1932, 1991, 1093, 1093, 1927, 1093,
+
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1927, 1093,
+     1927, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1093, 1093,  517, 1090, 1281,
+     1090, 1090,  517,  517, 1508,  517, 1090,  517,  517, 1085,
+     1283, 1090, 1518, 1285, 1747, 1090,  517,  517, 1090,  517,
+     1748, 1748, 1748, 1748, 1508, 1508, 1508, 1508, 1090,  517,
+     1090, 1748, 1748, 1748, 1748, 1748, 1508, 1748, 1508, 1508,
+     1508, 1508, 1508, 1508, 1748,  517,  517,  213, 1281, 1281,
+     1281, 1281,  213,  382,  398,  213,  344,  213,  381, 1256,
+      399,  344,  400, 1506,  402, 1258,  213,  213,  344,  213,
+
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,  344,  213,
+      344, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507,  382,  213, 1284, 3009, 1509,
+      308, 5143, 1016, 5143,  854, 1508, 1508, 1508, 1508, 3371,
+     3009, 1315, 3372, 1681, 1316, 1459, 1508, 1508, 1508, 1508,
+     1508, 3371, 1508, 5143, 3373, 5143, 5143, 5143, 5143, 1508,
+      734, 1501, 1749, 1501, 1501,  734,  734, 1750,  734, 1501,
+      734,  734, 1497, 1751, 1501, 1752, 1995, 1753, 1501,  734,
+      734, 1501,  734, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+     1750, 1501,  734, 1501, 1750, 1750, 1750, 1750, 1750, 1750,
+
+     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,  734,  734,
+     1282,  535,  854,  854, 5143, 5143, 5143, 5143, 5143, 5143,
+     1286, 5143, 1545, 1459, 1459, 1546, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 5143, 5143, 5143, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1518,  535, 1519, 1952, 5143, 1039, 5143, 2897, 1520,
+     1520, 1520, 1520, 1545, 1232, 2065, 1546, 1462, 3380, 3559,
+     1520, 1520, 1520, 1520, 1520, 1961, 1520, 5143, 2577, 5143,
+     5143, 5143, 5143, 1520,  641, 1759, 1478, 1759, 1759,  641,
+      641, 1996,  641, 1997,  641,  641, 1382, 1998, 1997, 1999,
+
+     2000, 2001, 1154,  641,  641, 1997,  641, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1997,  641, 1997, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996,  641,  641,  213,  381,  381,  381,  381,  213,
+      382,  213,  213,  213,  213,  381,  381,  214,  213,  213,
+      383,  213,  382,  213,  213,  213,  213,  382,  382,  382,
+      382,  382,  382,  382,  382,  213,  213,  213,  382,  382,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  213,  599,  712,  712,  712,  712,  599,
+      599,  855,  599,  856,  599,  599,  857,  858,  856,  859,
+
+      860,  861,  862,  599,  599,  856,  599,  855,  855,  855,
+      855,  855,  855,  855,  855,  856,  599,  856,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  599,  599,  248,  516,  516,  516,  516,  248,
+      248,  603,  248,  604,  248,  248,  605,  606,  604,  607,
+      608,  609,  610,  248,  248,  604,  248,  603,  603,  603,
+      603,  603,  603,  603,  603,  604,  248,  604,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  248,  248,  876, 1524, 1765, 1524, 1524,  876,
+      876, 2008,  876, 1767,  876,  876, 1768, 1769, 1767, 1770,
+
+     1771, 2009, 1773,  876,  876, 1767,  876, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 1767,  876, 1767, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008,  876,  876, 1766,  535,  712,  712, 5143, 5143,
+     5143, 5143, 5143, 5143, 1772, 5143, 1330, 1235, 1235, 1331,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 5143, 5143,
+     5143, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766, 1766,  876, 1483, 1460, 1483, 1483,
+      876, 1728,  876,  876,  876,  876, 1483, 1483,  877,  876,
+      876, 1729,  876, 1728,  876,  876,  876,  876, 1728, 1728,
+
+     1728, 1728, 1728, 1728, 1728, 1728,  876,  876,  876, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728,  876, 1069, 2010, 2011, 2010, 2010,
+     1069, 1069, 2012, 1069, 2013, 1069, 1069, 2014, 2015, 2013,
+     2016, 2017, 2018, 2019, 1069, 1069, 2013, 1069, 2012, 2012,
+     2012, 2012, 2012, 2012, 2012, 2012, 2013, 1069, 2013, 2012,
+     2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
+     2012, 2012, 2012, 1069, 1069, 2022, 1147, 2023, 1360, 5143,
+     2897, 5143,  862, 2024, 2024, 2024, 2024, 3407,  961, 3423,
+     3408, 3559, 3424, 1480, 2024, 2024, 2024, 2024, 2024, 3119,
+
+     2024, 5143, 3120, 5143, 5143, 5143, 5143, 2024,  876, 1773,
+     2025, 1773, 1773,  876,  876, 2026,  876, 1773,  876,  876,
+     1768, 2027, 1773, 2028, 2029, 2030, 1773,  876,  876, 1773,
+      876, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 1773,
+      876, 1773, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 2026, 2026, 2026, 2026, 2026,  876,  876,  617, 1296,
+     1297, 1296, 1296,  617,  617, 1298,  617, 1299,  617,  617,
+     1300, 1301, 1299, 1302, 1525, 1303, 1304,  617,  617, 1299,
+      617, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1299,
+      617, 1299, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+
+     1298, 1298, 1298, 1298, 1298, 1298,  617,  617,  452,  746,
+      903,  746,  746,  452,  452,  904,  452,  905,  452,  452,
+      906, 2031,  905,  908, 2032,  910,  911,  452,  452,  905,
+      452,  904,  904,  904,  904,  904,  904,  904,  904,  905,
+      452,  905,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  452,  452,  255,  535,
+      535,  535,  535,  255,  255,  628,  255,  629,  255,  255,
+      404,  630,  629,  631,  632,  633,  345,  255,  255,  629,
+      255,  628,  628,  628,  628,  628,  628,  628,  628,  629,
+      255,  629,  628,  628,  628,  628,  628,  628,  628,  628,
+
+      628,  628,  628,  628,  628,  628,  255,  255,  946, 1537,
+     1777, 1537, 1537,  946,  946, 2033,  946, 1779,  946,  946,
+     1780, 1781, 1779, 1782, 1783, 2034, 1547,  946,  946, 1779,
+      946, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 1779,
+      946, 1779, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033,  946,  946, 1778, 3429,
+     1460, 1817, 5143, 5143, 5143, 5143, 5143, 5143, 1784, 5143,
+     3430, 1727, 1971, 2430, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 5143, 5143, 5143, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,  946,
+
+     2035, 1478, 2035, 2035,  946, 2036,  946,  946,  946,  946,
+     2035, 2035,  947,  946,  946, 2037,  946, 2036,  946,  946,
+      946,  946, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+      946,  946,  946, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+     2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,  946, 1133,
+     2038, 2039, 2038, 2038, 1133, 1133, 2040, 1133, 2041, 1133,
+     1133, 2042, 2043, 2041, 2044, 2045, 2046, 2047, 1133, 1133,
+     2041, 1133, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
+     2041, 1133, 2041, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
+     2040, 2040, 2040, 2040, 2040, 2040, 2040, 1133, 1133, 2048,
+
+      961, 2049, 1360, 5143, 1360, 5143, 1082, 2050, 2050, 2050,
+     2050, 3433, 1380, 3443, 3434, 1819, 3444, 1505, 2050, 2050,
+     2050, 2050, 2050, 2765, 2050, 5143, 2766, 5143, 5143, 5143,
+     5143, 2050,  213,  344,  344,  344,  344,  213,  213,  454,
+      213,  344,  213,  213,  339,  399,  344,  400,  401,  455,
+      344,  213,  213,  344,  213,  454,  454,  454,  454,  454,
+      454,  454,  454,  344,  213,  344,  454,  454,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
+      213,  213,  283,  449,  449,  449,  449,  283,  283,  527,
+      283,  449,  283,  283,  445,  528,  449,  529, 1543,  530,
+
+      449,  283,  283,  449,  283,  527,  527,  527,  527,  527,
+      527,  527,  527,  449,  283,  449,  527,  527,  527,  527,
+      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      283,  283,  398, 2111, 1082, 1994, 5143, 5143, 5143, 5143,
+     5143, 5143,  402, 5143, 2112, 1505, 3019, 3462,  398,  398,
+      398,  398,  398,  398,  398,  398, 5143, 5143, 5143,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  463, 1581,  464, 3465, 5143, 1994, 5143,
+     1478,  465,  465,  465,  465, 2095, 2803, 3466, 2756, 3019,
+     3467, 2229,  465,  465,  465,  465,  465, 2804,  465, 5143,
+
+     3471, 5143, 5143, 5143, 5143,  465,  533,  931,  931,  931,
+      931,  533,  533, 1785,  533,  931,  533,  533,  926, 1786,
+      931, 1787, 1788, 1789,  931,  533,  533,  931,  533, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785,  931,  533,  931,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785,  533,  533,  946, 1547, 1792, 1547,
+     1547,  946,  946, 2053,  946, 1547,  946,  946, 1780, 1794,
+     1547, 1795, 1796, 2054, 1547,  946,  946, 1547,  946, 2053,
+     2053, 2053, 2053, 2053, 2053, 2053, 2053, 1547,  946, 1547,
+     2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+
+     2053, 2053, 2053, 2053,  946,  946, 1133, 2047, 2055, 2047,
+     2047, 1133, 1133, 2056, 1133, 2047, 1133, 1133, 2042, 2057,
+     2047, 2058, 2059, 2060, 2047, 1133, 1133, 2047, 1133, 2056,
+     2056, 2056, 2056, 2056, 2056, 2056, 2056, 2047, 1133, 2047,
+     2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
+     2056, 2056, 2056, 2056, 1133, 1133, 1793, 3478, 1281, 1994,
+     5143, 5143, 5143, 5143, 5143, 5143, 1797, 5143, 3479, 1761,
+     3019, 3480, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     5143, 5143, 5143, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 2061,  290, 2062,
+
+     3137, 5143, 1147, 5143, 1147, 2063, 2063, 2063, 2063, 3481,
+     1432, 3138, 3482, 1816, 3483, 1816, 2063, 2063, 2063, 2063,
+     2063, 3488, 2063, 5143, 3489, 5143, 5143, 5143, 5143, 2063,
+      599,  862,  862,  862,  862,  599,  599, 1061,  599,  862,
+      599,  599,  857, 1062,  862, 1063, 1064, 1065,  862,  599,
+      599,  862,  599, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061,  862,  599,  862, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  599,  599,
+     1080, 1801, 2025, 1801, 1801, 1080, 1080, 2066, 1080, 2067,
+     1080, 1080, 2068, 2069, 2067, 2070, 2071, 2072, 1846, 1080,
+
+     1080, 2067, 1080, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2067, 1080, 2067, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 1080, 1080,
+      536,  948, 1121,  948,  948,  536,  536, 1135,  536, 1136,
+      536,  536, 1137, 2073, 1136, 1139, 2074, 1141, 1142,  536,
+      536, 1136,  536, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1136,  536, 1136, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,  536,  536,
+      536, 1142, 1353, 1142, 1142,  536,  536, 1562,  536, 1142,
+      536,  536, 1137, 1355, 1142, 1572, 1357, 1803, 1142,  536,
+
+      536, 1142,  536, 1804, 1804, 1804, 1804, 1562, 1562, 1562,
+     1562, 1142,  536, 1142, 1804, 1804, 1804, 1804, 1804, 1562,
+     1804, 1562, 1562, 1562, 1562, 1562, 1562, 1804,  536,  536,
+     1356, 3147, 1563,  319, 5143,  961, 5143, 1147, 1562, 1562,
+     1562, 1562, 3148, 2166, 3495, 3494, 1589, 3496, 1816, 1562,
+     1562, 1562, 1562, 1562, 2167, 1562, 5143, 2493, 5143, 5143,
+     5143, 5143, 1562,  776, 1559, 1805, 1559, 1559,  776,  776,
+     1806,  776, 1559,  776,  776, 1555, 1807, 1559, 1808, 2075,
+     1809, 1559,  776,  776, 1559,  776, 1806, 1806, 1806, 1806,
+     1806, 1806, 1806, 1806, 1559,  776, 1559, 1806, 1806, 1806,
+
+     1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+     1806,  776,  776, 1354, 3147, 1147, 1380, 5143, 5143, 5143,
+     5143, 5143, 5143, 1358, 5143, 3148, 1816, 1842, 3502, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 5143, 5143, 5143,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1572,  680, 1573, 3165, 5143,  812,
+     5143, 1408, 1574, 1574, 1574, 1574, 3505, 1432, 3166, 3506,
+     1407, 3507, 2131, 1574, 1574, 1574, 1574, 1574, 3510, 1574,
+     5143, 3511, 5143, 5143, 5143, 5143, 1574,  550, 1814, 1792,
+     1814, 1814,  550,  550, 2076,  550, 2077,  550,  550, 1157,
+
+     2078, 2077, 2079, 2080, 2081,  967,  550,  550, 2077,  550,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2077,  550,
+     2077, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076,  550,  550,  248, 1817, 1817,
+     1817, 1817,  248,  377,  729,  248,  610,  248,  336, 1701,
+      730,  610,  731, 2086,  733, 1703,  248,  248,  610,  248,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,  610,  248,
+      610, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087,  377,  248,  784, 1147, 1147,
+     1147, 1147,  784, 1359, 1148,  784,  961,  784, 1360, 1361,
+
+     2092,  961, 1151, 2093, 1153, 1363,  784,  784,  961,  784,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,  961,  784,
+      961, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1359,  784,  257, 1825, 2096,
+     1825, 1825,  257,  952,  796,  257,  648,  257,  951, 1963,
+      648,  648,  797, 2097,  799, 1965,  257,  257,  648,  257,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,  648,  257,
+      648, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2098, 2098, 2098, 2098, 2098,  952,  257,  641, 1154, 1380,
+     1154, 1154,  641,  641, 1594,  641, 1154,  641,  641, 1382,
+
+     1383, 1154, 1610, 1385, 1828, 1154,  641,  641, 1154,  641,
+     1829, 1829, 1829, 1829, 1594, 1594, 1594, 1594, 1154,  641,
+     1154, 1829, 1829, 1829, 1829, 1829, 1594, 1829, 1594, 1594,
+     1594, 1594, 1594, 1594, 1829,  641,  641, 1381, 3518,  493,
+      354, 5143, 5143, 5143, 5143, 1384, 5143, 1386, 5143, 3519,
+      819,  495, 1910, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 5143, 5143, 5143, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,  255, 1380,
+     1380, 1380, 1380,  255,  469,  403,  255,  345,  255,  468,
+     1590,  405,  345,  406, 1591,  408, 1592,  255,  255,  345,
+
+      255, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,  345,
+      255,  345, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593,  469,  255, 1384, 3521,
+     1595, 3525, 5143,  812, 5143, 1177, 1594, 1594, 1594, 1594,
+     3522,  709, 3526, 3523, 1407, 3527, 1421, 1594, 1594, 1594,
+     1594, 1594, 2187, 1594, 5143, 2188, 5143, 5143, 5143, 5143,
+     1594,  641, 1596, 1597, 1596, 1596,  641, 1598,  641,  641,
+      641,  641, 1596, 1596,  642,  641,  641, 1599,  641, 1598,
+      641,  641,  641,  641, 1598, 1598, 1598, 1598, 1598, 1598,
+     1598, 1598,  641,  641,  641, 1598, 1598, 1598, 1598, 1598,
+
+     1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+      641,  962, 1832, 1833, 1832, 1832,  962,  962, 1834,  962,
+     1832,  962,  962, 1835, 1836, 1832, 1837, 2104, 1838, 1832,
+      962,  962, 1832,  962, 1834, 1834, 1834, 1834, 1834, 1834,
+     1834, 1834, 1832,  962, 1832, 1834, 1834, 1834, 1834, 1834,
+     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834,  962,
+      962, 1610, 3539, 1611, 2970, 5143, 1673, 5143, 2486, 1612,
+     1612, 1612, 1612, 3540,  709, 2971, 3541, 2485, 3542, 3493,
+     1612, 1612, 1612, 1612, 1612, 2187, 1612, 5143, 2188, 5143,
+     5143, 5143, 5143, 1612,  784,  961,  961,  961,  961,  784,
+
+      784, 1148,  784,  961,  784,  784, 1149, 1150,  961, 1151,
+     1152, 1153,  961,  784,  784,  961,  784, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148,  961,  784,  961, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148,  784,  784, 1080, 1846, 2113, 1846, 1846, 1080,
+     1080, 2114, 1080, 1846, 1080, 1080, 2068, 2115, 1846, 2116,
+     2117, 2118, 1846, 1080, 1080, 1846, 1080, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 1846, 1080, 1846, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 1080, 1080,  550,  967, 1155,  967,  967,  550,
+
+      550, 1156,  550,  967,  550,  550, 1157, 2119,  967, 1159,
+     2120, 1161,  967,  550,  550,  967,  550, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156,  967,  550,  967, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156,  550,  550,  561,  812,  812,  812,  812,  561,
+      561,  813,  561,  561,  561,  561,  561,  562,  561,  561,
+      984,  561,  561,  561,  561,  561,  561,  813,  813,  813,
+      813,  813,  813,  813,  813,  561,  561,  561,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  985,  561, 1001, 2122, 1860, 2122, 2122, 1001,
+
+     1001, 2123, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     2124, 2123, 1001, 1001, 1001, 1001, 1001, 2123, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 1001, 1001, 1001, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2125, 1001,  986,  986,  986,  986, 5143, 3555,
+      114, 1225, 5143, 5143, 5143, 2215,  562, 3062, 5143,  988,
+     3556, 1464, 1712, 3557, 1465, 2297, 3243,  114, 3063, 3244,
+     5143, 3582, 2223, 2232, 1817, 5143, 5143, 5143, 1464, 1891,
+     5143, 1465, 5143, 3593, 2233, 3595, 3594, 2585, 3596, 5143,
+     2488,  989, 1178, 1863, 2135, 1863, 1863, 1178, 1178, 2136,
+
+     1178, 1178, 1178, 1178, 1178, 1179, 1178, 1178, 2137, 1178,
+     1178, 1178, 1178, 1178, 1178, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 1178, 1178, 1178, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+     2138, 1178,  986,  986,  986,  986, 5143, 1460, 2408, 3603,
+     5143, 5143, 5143,  709,  562, 2643, 5143,  988, 3280, 2409,
+     3604, 3281, 3085, 3605, 1740, 3009, 3616, 1741, 5143, 3617,
+     1082, 3329, 1478, 5143, 5143, 5143, 3371, 1435, 5143, 3018,
+     5143, 3313, 3623, 3630, 3314, 2627, 3631, 5143, 2164,  989,
+      559,  979, 1170,  979,  979,  559,  559, 2140,  559,  559,
+
+      559,  559,  559,  560,  559,  559, 1171, 2140,  559,  559,
+      559,  559,  559, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140,  559,  559,  559, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1172,  559,
+      187, 1177, 1177, 1177, 1177,  187,  187,  316,  187,  187,
+      187,  187,  187,  188,  187,  187, 1183,  187,  187,  187,
+      187,  187,  187,  316,  316,  316,  316,  316,  316,  316,
+      316,  187,  187,  187,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316, 1184,  187,
+      818, 1415, 1644, 1415, 1415,  818,  818, 1880,  818,  818,
+
+      818,  818,  818,  819,  818,  818, 1645, 1880,  818,  818,
+      818,  818,  818, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880,  818,  818,  818, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1646,  818,
+     1194, 1883, 2152, 1883, 1883, 1194, 1194, 2153, 1194, 1194,
+     1194, 1883, 1883, 1195, 1194, 1194, 2154, 1194, 1883, 1194,
+     1194, 1194, 1194, 2153, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 1194, 1194, 1194, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2155, 1194,
+      426, 1429, 1667, 1429, 1429,  426,  426, 1884,  426,  426,
+
+      426, 1429, 1429,  426,  426,  426, 1669, 1885, 1429,  426,
+      426,  426,  426, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884,  426,  426,  426, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1670,  426,
+     1196, 1891, 1891, 1891, 1891, 1196, 1196, 2156, 1196, 1196,
+     1196, 1891, 1891, 1197, 1196, 1196, 1895, 2157, 1891, 1196,
+     1196, 1196, 1196, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 1196, 1196, 1196, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 1893, 1196,
+     2158, 1281, 2486, 1904, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     1196, 5143, 3634, 3493, 2502, 3635, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 5143, 5143, 5143, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 1894, 1281, 1435,  854, 5143, 5143, 5143, 5143, 5143,
+     5143, 1896, 5143, 3654, 2164, 1459, 3655, 1894, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 5143, 5143, 5143, 1894, 1894,
+     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
+     1894, 1894,  424, 1016, 1016, 1016, 1016,  424,  424, 1200,
+      424,  424,  424,  424,  424,  425,  424,  424, 1201,  424,
+      424,  424,  424,  424,  424, 1200, 1200, 1200, 1200, 1200,
+
+     1200, 1200, 1200,  424,  424,  424, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+      424,  424,  324, 1904, 1904, 1904, 1904,  324,  324, 2168,
+      324,  324,  324,  681,  681,  325,  324,  324, 2169,  324,
+      681,  324,  324,  324,  324, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168,  324,  324,  324, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+      685,  324, 1017, 2170, 2171, 2170, 2170, 1017, 1017, 2172,
+     1017, 1017, 1017, 2170, 2170, 1018, 1017, 1017, 2173, 2174,
+     2170, 1017, 1017, 1017, 1017, 2172, 2172, 2172, 2172, 2172,
+
+     2172, 2172, 2172, 1017, 1017, 1017, 2172, 2172, 2172, 2172,
+     2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+     2175, 1017, 1907,  308,  854,  854, 5143, 5143, 5143, 5143,
+     5143, 5143, 1908, 5143, 2545, 1459, 1459, 2546, 1907, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907, 5143, 5143, 5143, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+     1907, 1907, 1907,  838, 1910, 1904, 1910, 1910,  838,  838,
+     2178,  838,  838,  838, 1910, 1910,  839,  838,  838, 1912,
+      838, 1910,  838,  838,  838,  838, 2178, 2178, 2178, 2178,
+     2178, 2178, 2178, 2178,  838,  838,  838, 2178, 2178, 2178,
+
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+     2178, 1914,  838, 2179,  516, 2897, 1039, 5143, 5143, 5143,
+     5143, 5143, 5143, 2180, 5143, 1481, 3559, 1462, 1482, 2179,
+     2179, 2179, 2179, 2179, 2179, 2179, 2179, 5143, 5143, 5143,
+     2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
+     2179, 2179, 2179, 2179, 1911, 3009, 2897,  862, 5143, 5143,
+     5143, 5143, 5143, 5143, 1913, 5143, 3371, 3559, 1480, 3659,
+     1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 5143, 5143,
+     5143, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
+     1911, 1911, 1911, 1911, 1911,  326, 1446, 1432, 1446, 1446,
+
+      326,  326, 1917,  326,  326,  326, 1446, 1446,  326,  326,
+      326, 1448, 1918, 1446,  326,  326,  326,  326, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917,  326,  326,  326, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1450,  326,  599,  854,  854,  854,  854,
+      599, 1038,  855,  599,  856,  599, 1039, 1040,  858,  856,
+      859, 1041,  861, 1042,  599,  599,  856,  599, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043,  856,  599,  856, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1038,  599,  709,  709,  709,  709, 5143,
+
+      169,  115,  516,  116, 5143,  168,  850,  116,  116,  118,
+      851,  120,  852, 1481, 5143,  116, 1482,  853,  853,  853,
+      853,  853,  853,  853,  853,  116, 5143,  116,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  853,  853,
+      853,  853,  169, 1093, 1744, 1713, 1744, 1744, 1093, 1093,
+     2184, 1093, 1927, 1093, 1093, 1989, 1927, 1927, 1930, 1990,
+     2185, 1991, 1093, 1093, 1927, 1093, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 1927, 1093, 1927, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 1093, 1093, 1926,  308, 1817,  854, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 1932, 5143, 1315, 1971, 1459, 1316, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 5143, 5143, 5143,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1093, 1928, 1940, 1928, 1928, 1093,
+     1925, 1093, 1093, 1093, 1093, 1928, 1928, 1093, 1093, 1093,
+     2186, 1093, 1925, 1093, 1093, 1093, 1093, 1925, 1925, 1925,
+     1925, 1925, 1925, 1925, 1925, 1093, 1093, 1093, 1925, 1925,
+     1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+     1925, 1925, 1925, 1093, 2189,  535, 2190, 1147, 5143, 1082,
+     5143, 1082, 2191, 2191, 2191, 2191, 1545, 1147, 3687, 1546,
+
+     1505, 3688, 1505, 2191, 2191, 2191, 2191, 2191, 3691, 2191,
+     5143, 3692, 5143, 5143, 5143, 5143, 2191, 1093, 1991, 1962,
+     1991, 1991, 1093, 1093, 2192, 1093, 1991, 1093, 1093, 1989,
+     1991, 1991, 2193, 2194, 2195, 1991, 1093, 1093, 1991, 1093,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 1991, 1093,
+     1991, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 1093, 1093,  599, 1039, 1039,
+     1039, 1039,  599, 1038,  599,  599,  599,  599, 1039, 1039,
+      600,  599,  599, 1046,  599, 1038,  599,  599,  599,  599,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  599,
+
+      599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,  599,  250,  598,  704,
+      598,  598,  250,  705,  250,  250,  250,  250,  598,  598,
+      250,  250,  250,  706,  250,  705,  250,  250,  250,  250,
+      705,  705,  705,  705,  705,  705,  705,  705,  250,  250,
+      250,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      705,  705,  705,  705,  705,  705,  250,  250,  743,  898,
+      743,  743,  250,  250,  899,  250,  743,  250,  250,  739,
+      743,  743,  900,  901,  902,  743,  250,  250,  743,  250,
+      899,  899,  899,  899,  899,  899,  899,  899,  743,  250,
+
+      743,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  250,  250,  250,  614,  709,
+      614,  614,  250,  250,  891,  250,  738,  250,  250,  739,
+      738,  738,  740,  741,  892,  743,  250,  250,  738,  250,
+      891,  891,  891,  891,  891,  891,  891,  891,  738,  250,
+      738,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  250,  250,  599,  712,  712,
+      712,  712,  599,  599, 1044,  599,  856,  599,  599,  857,
+      858,  856,  859,  860, 1045,  862,  599,  599,  856,  599,
+     1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,  856,  599,
+
+      856, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+     1044, 1044, 1044, 1044, 1044,  599,  599,  855, 2394, 1478,
+     1281, 5143, 5143, 5143, 5143, 5143, 5143,  861, 5143, 2395,
+     2229, 1761, 2738,  855,  855,  855,  855,  855,  855,  855,
+      855, 5143, 5143, 5143,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  710, 1225,
+     1225, 1225, 1225,  710,  710, 1226,  710, 1227,  710,  710,
+     1228, 1229, 1227, 1230, 2201, 1231, 1232,  710,  710, 1227,
+      710, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1227,
+      710, 1227, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+
+     1226, 1226, 1226, 1226, 1226, 1226,  710,  710,  213, 1082,
+     1082, 1082, 1082,  213,  382,  337,  213,  338,  213,  381,
+     1256,  615,  338,  341, 2202,  343, 1258,  213,  213,  338,
+      213, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  338,
+      213,  338, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259,  382,  213, 1058, 1360,
+     1059, 2408, 5143, 1281, 5143, 1994, 1060, 1060, 1060, 1060,
+     3704, 2111, 2409, 3705, 1761, 2748, 3019, 1060, 1060, 1060,
+     1060, 1060, 2112, 1060, 5143, 3462, 5143, 5143, 5143, 5143,
+     1060,  599,  862,  862,  862,  862,  599,  599, 1061,  599,
+
+      862,  599,  599,  857, 1062,  862, 1063, 1064, 1065,  862,
+      599,  599,  862,  599, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061,  862,  599,  862, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  599,
+      599, 1234, 1955, 2203, 1955, 1955, 1234, 2204, 2205, 1234,
+     2206, 1234, 2207, 2208, 2209, 2206, 2210, 2211, 2212, 2213,
+     1234, 1234, 2206, 1234, 2214, 2214, 2214, 2214, 2214, 2214,
+     2214, 2214, 2206, 1234, 2206, 2214, 2214, 2214, 2214, 2214,
+     2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2204,
+     1234, 1476, 2215, 2215, 2215, 2215, 1476, 1476, 2216, 1476,
+
+     2217, 1476, 1476, 2218, 2219, 2217, 2220, 2221, 2222, 2223,
+     1476, 1476, 2217, 1476, 2216, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2217, 1476, 2217, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 1476,
+     1476,  257,  951,  898,  951,  951,  257,  952,  257,  257,
+      257,  257,  951,  951,  257,  257,  257,  953,  257,  952,
+      257,  257,  257,  257,  952,  952,  952,  952,  952,  952,
+      952,  952,  257,  257,  257,  952,  952,  952,  952,  952,
+      952,  952,  952,  952,  952,  952,  952,  952,  952,  952,
+      257,  257,  648,  795,  648,  648,  257,  257,  796,  257,
+
+      648,  257,  257,  780,  648,  648,  797,  798,  799,  648,
+      257,  257,  648,  257,  796,  796,  796,  796,  796,  796,
+      796,  796,  648,  257,  648,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  257,
+      257,  257,  638,  755,  638,  638,  257,  257,  949,  257,
+      779,  257,  257,  780,  779,  779,  781,  782,  950,  648,
+      257,  257,  779,  257,  949,  949,  949,  949,  949,  949,
+      949,  949,  779,  257,  779,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  257,
+      257,  248, 1460, 1460, 1460, 1460,  248,  377,  603,  248,
+
+      604,  248,  336, 1701,  606,  604,  607, 1702,  609, 1703,
+      248,  248,  604,  248, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704,  604,  248,  604, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,  377,
+      248,  512, 1738, 1460, 1738, 1738,  512,  512, 2239,  512,
+     1978,  512,  512, 1979, 1980, 1978, 1981, 1982, 2240, 1984,
+      512,  512, 1978,  512, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 1978,  512, 1978, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,  512,
+      512, 1977, 3123, 1147, 1147, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 1983, 5143, 3124, 1816, 1816, 3713, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 5143, 5143, 5143, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977,  512,  847, 1033,  847,  847,  512, 1034,  512,
+      512,  512,  512,  847,  847,  513,  512,  512, 1035,  512,
+     1034,  512,  512,  512,  512, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034,  512,  512,  512, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034,  512,  595, 2241, 1968, 2241, 2241,  595,  595, 2242,
+      595, 2243,  595,  595, 2244, 2245, 2243, 2246, 2247, 2248,
+
+     2249,  595,  595, 2243,  595, 2242, 2242, 2242, 2242, 2242,
+     2242, 2242, 2242, 2243,  595, 2243, 2242, 2242, 2242, 2242,
+     2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
+      595,  595, 2252,  121, 2253, 2423, 5143, 1360, 5143, 1380,
+     2254, 2254, 2254, 2254, 1821, 1380, 2424, 1822, 1819, 3715,
+     1842, 2254, 2254, 2254, 2254, 2254, 3718, 2254, 5143, 3719,
+     5143, 5143, 5143, 5143, 2254,  512, 1984, 1817, 1984, 1984,
+      512,  512, 2255,  512, 1984,  512,  512, 1979, 2256, 1984,
+     2257, 2258, 2259, 1984,  512,  512, 1984,  512, 2255, 2255,
+     2255, 2255, 2255, 2255, 2255, 2255, 1984,  512, 1984, 2255,
+
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+     2255, 2255, 2255,  512,  512,  734, 1493, 1494, 1493, 1493,
+      734,  734, 1495,  734, 1496,  734,  734, 1497, 1498, 1496,
+     1499, 1739, 1500, 1501,  734,  734, 1496,  734, 1495, 1495,
+     1495, 1495, 1495, 1495, 1495, 1495, 1496,  734, 1496, 1495,
+     1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495,
+     1495, 1495, 1495,  734,  734, 1093, 1928, 1940, 1928, 1928,
+     1093, 1925, 1093, 1093, 1093, 1093, 1928, 1928, 1093, 1093,
+     1093, 2186, 1093, 1925, 1093, 1093, 1093, 1093, 1925, 1925,
+     1925, 1925, 1925, 1925, 1925, 1925, 1093, 1093, 1093, 1925,
+
+     1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+     1925, 1925, 1925, 1925, 1093, 1093, 1991, 1962, 1991, 1991,
+     1093, 1093, 2192, 1093, 1991, 1093, 1093, 1989, 1991, 1991,
+     2193, 2194, 2195, 1991, 1093, 1093, 1991, 1093, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 1991, 1093, 1991, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 1093, 1093,  784, 1994, 1994, 1994, 1994,
+      784,  784, 2263,  784, 2264,  784,  784, 1149, 2265, 2264,
+     2266, 2267, 2268,  961,  784,  784, 2264,  784, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2264,  784, 2264, 2263,
+
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263,  784,  784,  517,  890, 1082,  890,  890,
+      517,  517, 1083,  517, 1084,  517,  517, 1085, 2269, 1084,
+     1087, 2270, 1089, 1090,  517,  517, 1084,  517, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1084,  517, 1084, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083,  517,  517,  641, 1759, 1478, 1759, 1759,
+      641,  641, 2271,  641, 1997,  641,  641, 1382, 1998, 1997,
+     1999, 2000, 2272, 1154,  641,  641, 1997,  641, 2271, 2271,
+     2271, 2271, 2271, 2271, 2271, 2271, 1997,  641, 1997, 2271,
+
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271,  641,  641, 1996,  610, 1408, 1408, 5143,
+     5143, 5143, 5143, 5143, 5143, 2001, 5143, 1730, 2131, 2131,
+     1731, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 5143,
+     5143, 5143, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996,  788, 2273, 2274, 2273,
+     2273,  788,  788, 2275,  788, 2276,  788,  788, 1603, 2277,
+     2276, 2278, 2279, 2280, 1600,  788,  788, 2276,  788, 2275,
+     2275, 2275, 2275, 2275, 2275, 2275, 2275, 2276,  788, 2276,
+     2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275,
+
+     2275, 2275, 2275, 2275,  788,  788, 2283, 1849, 2284, 1408,
+     5143,  353, 5143, 1408, 2285, 2285, 2285, 2285, 1850,  493,
+     3736, 2782,  560, 3737, 2131, 2285, 2285, 2285, 2285, 2285,
+     3740, 2285, 5143, 3741, 5143, 5143, 5143, 5143, 2285, 1291,
+     2006, 1962, 2006, 2006, 1291, 1291, 2288, 1291, 2289, 1291,
+     1291, 2290, 2289, 2289, 2291, 2292, 2293, 2109, 1291, 1291,
+     2289, 1291, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2289, 1291, 2289, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 1291, 1291, 1234,
+     2007, 2294, 2007, 2007, 1234, 1234, 2205, 1234, 2206, 1234,
+
+     1234, 2295, 2209, 2206, 2210, 2296, 2212, 2297, 1234, 1234,
+     2206, 1234, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2206, 1234, 2206, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 1234, 1234,  876,
+     1524, 1765, 1524, 1524,  876,  876, 2008,  876, 1767,  876,
+      876, 1768, 1769, 1767, 1770, 1771, 2009, 1773,  876,  876,
+     1767,  876, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     1767,  876, 1767, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008,  876,  876, 2022,
+     5143, 2298, 5143, 5143, 1177, 5143,  812, 2299, 2299, 2299,
+
+     2299, 2457, 2458, 2457, 2457, 1421,  354, 1407, 2299, 2299,
+     2299, 2299, 2299, 1179, 2299, 3745, 2460, 3742, 5143, 3750,
+     3743, 2299, 1766, 1432, 1408,  662, 3746, 5143, 5143, 2805,
+     3751, 5143, 1772, 1879, 3757, 2131, 1179, 3758, 1766, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 5143, 5143, 2461, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766,  248,  516,  516,  516,  516,  248,  248,
+      603,  248,  604,  248,  248,  605,  606,  604,  607,  608,
+      609,  610,  248,  248,  604,  248,  603,  603,  603,  603,
+      603,  603,  603,  603,  604,  248,  604,  603,  603,  603,
+
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  248,  248,  876, 1483, 1460, 1483, 1483,  876, 1728,
+      876,  876,  876,  876, 1483, 1483,  877,  876,  876, 1729,
+      876, 1728,  876,  876,  876,  876, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728,  876,  876,  876, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728,  876, 1249, 2300, 2301, 2300, 2300, 1249, 1249,
+     2302, 1249, 2303, 1249, 1249, 2304, 2305, 2303, 2306, 1771,
+     2307, 2308, 1249, 1249, 2303, 1249, 2302, 2302, 2302, 2302,
+     2302, 2302, 2302, 2302, 2303, 1249, 2303, 2302, 2302, 2302,
+
+     2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302,
+     2302, 1249, 1249,  215,  749,  709,  749,  749,  215,  750,
+      215,  215,  215,  215,  749,  749,  520,  215,  215, 2309,
+      215,  750,  215,  215,  215,  215,  750,  750,  750,  750,
+      750,  750,  750,  750,  215,  215,  215,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  215, 2022, 3762, 2023, 1435, 5143, 1673, 5143,
+     2486, 2024, 2024, 2024, 2024, 3763, 3780, 3773, 3141, 2485,
+     3774, 3493, 2024, 2024, 2024, 2024, 2024, 3781, 2024, 5143,
+     2170, 5143, 5143, 5143, 5143, 2024,  876, 1773, 2025, 1773,
+
+     1773,  876,  876, 2026,  876, 1773,  876,  876, 1768, 2027,
+     1773, 2028, 2029, 2030, 1773,  876,  876, 1773,  876, 2026,
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 1773,  876, 1773,
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 2026, 2026, 2026,  876,  876, 2313, 1435, 2486, 1891,
+     5143, 5143, 5143, 5143, 5143, 5143, 2314, 5143, 3787, 3493,
+     2488, 3788, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313,
+     5143, 5143, 5143, 2313, 2313, 2313, 2313, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313, 2313, 2313, 2313, 1069, 2019, 2315,
+     2019, 2019, 1069, 1069, 2316, 1069, 2019, 1069, 1069, 2014,
+
+     2317, 2019, 2318, 2319, 2320, 2019, 1069, 1069, 2019, 1069,
+     2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2019, 1069,
+     2019, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
+     2316, 2316, 2316, 2316, 2316, 1069, 1069, 2323, 3790, 2324,
+     1922, 5143, 1673, 5143, 1891, 2325, 2325, 2325, 2325, 3791,
+     1922, 1923, 2508, 2485, 2850, 2488, 2325, 2325, 2325, 2325,
+     2325, 1923, 2325, 5143, 2513, 5143, 5143, 5143, 5143, 2325,
+     1535, 2326, 2327, 2326, 2326, 1535, 1535, 2328, 1535, 2329,
+     1535, 1535, 2330, 2331, 2329, 2332, 2333, 2334, 2335, 1535,
+     1535, 2329, 1535, 2328, 2328, 2328, 2328, 2328, 2328, 2328,
+
+     2328, 2329, 1535, 2329, 2328, 2328, 2328, 2328, 2328, 2328,
+     2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 1535, 1535,
+      946, 1537, 1777, 1537, 1537,  946,  946, 2033,  946, 1779,
+      946,  946, 1780, 1781, 1779, 1782, 1783, 2034, 1547,  946,
+      946, 1779,  946, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 1779,  946, 1779, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,  946,  946,
+     2048,  709, 2336, 1922, 5143, 1435, 5143, 1435, 2337, 2337,
+     2337, 2337, 2187,  898, 1923, 2188, 2164, 2855, 2164, 2337,
+     2337, 2337, 2337, 2337, 3830, 2337, 5143, 3831, 5143, 5143,
+
+     5143, 5143, 2337,  946, 2035, 1478, 2035, 2035,  946, 2036,
+      946,  946,  946,  946, 2035, 2035,  947,  946,  946, 2037,
+      946, 2036,  946,  946,  946,  946, 2036, 2036, 2036, 2036,
+     2036, 2036, 2036, 2036,  946,  946,  946, 2036, 2036, 2036,
+     2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+     2036, 2036,  946, 1778, 1938, 1478, 2897, 5143, 5143, 5143,
+     5143, 5143, 5143, 1784, 5143, 1939, 2229, 3559, 2592, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 5143, 5143, 5143,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778,  255,  535,  535,  535,  535,  255,
+
+      255,  628,  255,  629,  255,  255,  404,  630,  629,  631,
+      632,  633,  345,  255,  255,  629,  255,  628,  628,  628,
+      628,  628,  628,  628,  628,  629,  255,  629,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  255,  255, 1334, 2340, 2341, 2340, 2340, 1334,
+     1334, 2342, 1334, 2343, 1334, 1334, 2344, 2345, 2343, 2346,
+     1783, 2347, 2348, 1334, 1334, 2343, 1334, 2342, 2342, 2342,
+     2342, 2342, 2342, 2342, 2342, 2343, 1334, 2343, 2342, 2342,
+     2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+     2342, 2342, 1334, 1334,  215,  626,  755,  626,  626,  215,
+
+      215,  756,  215,  626,  215,  215,  622, 2349,  626,  757,
+     2350,  759,  626,  215,  215,  626,  215,  756,  756,  756,
+      756,  756,  756,  756,  756,  626,  215,  626,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  215,  215, 2048, 3221, 2049,  516, 5143, 2897,
+     5143, 1460, 2050, 2050, 2050, 2050, 3838,  712, 3840, 3839,
+     3559, 3841, 1727, 2050, 2050, 2050, 2050, 2050, 1953, 2050,
+     5143, 1954, 5143, 5143, 5143, 5143, 2050,  946, 1547, 1792,
+     1547, 1547,  946,  946, 1793,  946, 1547,  946,  946, 1780,
+     1794, 1547, 1795, 1796, 1797, 1547,  946,  946, 1547,  946,
+
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1547,  946,
+     1547, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793,  946,  946,  309,  936,  936,
+      936,  936,  309,  309,  937,  309,  938,  309,  309,  544,
+      939,  938,  940, 1132,  941,  542,  309,  309,  938,  309,
+      937,  937,  937,  937,  937,  937,  937,  937,  938,  309,
+      938,  937,  937,  937,  937,  937,  937,  937,  937,  937,
+      937,  937,  937,  937,  937,  309,  309, 2053, 5143, 5143,
+     5143, 1082, 5143, 5143, 5143, 5143, 5143, 2054, 3480, 3472,
+     3480, 3480, 1505, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+
+     2053, 5143, 5143, 3747, 2053, 2053, 2053, 2053, 2053, 2053,
+     2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2061,  535,
+     2353, 1082, 5143, 3660, 5143, 2897, 2354, 2354, 2354, 2354,
+     2935,  344, 1505, 2936, 4164, 3748, 3559, 2354, 2354, 2354,
+     2354, 2354, 3855, 2354, 5143, 3856, 5143, 5143, 5143, 5143,
+     2354, 1334, 2348, 2355, 2348, 2348, 1334, 1334, 2356, 1334,
+     2348, 1334, 1334, 2344, 2357, 2348, 2358, 1796, 2359, 2348,
+     1334, 1334, 2348, 1334, 2356, 2356, 2356, 2356, 2356, 2356,
+     2356, 2356, 2348, 1334, 2348, 2356, 2356, 2356, 2356, 2356,
+     2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 1334,
+
+     1334, 2061, 1478, 2062,  121, 5143, 1281, 5143, 3660, 2063,
+     2063, 2063, 2063, 3630, 1232, 1719, 3631, 1761, 1720, 4164,
+     2063, 2063, 2063, 2063, 2063, 1961, 2063, 5143, 2703, 5143,
+     5143, 5143, 5143, 2063, 1080, 1801, 2025, 1801, 1801, 1080,
+     1080, 2363, 1080, 2067, 1080, 1080, 2068, 2069, 2067, 2070,
+     2071, 2364, 1846, 1080, 1080, 2067, 1080, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2067, 1080, 2067, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 1080, 1080, 2066, 2587, 1994, 1147, 5143, 5143,
+     5143, 5143, 5143, 5143, 2072, 5143, 2588, 3019, 1816, 2963,
+
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 5143, 5143,
+     5143, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 1080, 1732, 1817, 1732, 1732,
+     1080, 1972, 1080, 1080, 1080, 1080, 1732, 1732, 1081, 1080,
+     1080, 1973, 1080, 1972, 1080, 1080, 1080, 1080, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1080, 1080, 1080, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1080, 1254, 2365, 2315, 2365, 2365,
+     1254, 1254, 2366, 1254, 2367, 1254, 1254, 2368, 2369, 2367,
+     2370, 2371, 2372, 2373, 1254, 1254, 2367, 1254, 2366, 2366,
+
+     2366, 2366, 2366, 2366, 2366, 2366, 2367, 1254, 2367, 2366,
+     2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+     2366, 2366, 2366, 1254, 1254, 2376,  381, 2377, 1817, 5143,
+     1147, 5143, 1147, 2378, 2378, 2378, 2378, 3881, 3521, 3595,
+     3882, 1816, 3596, 1816, 2378, 2378, 2378, 2378, 2378, 3522,
+     2378, 5143, 2984, 5143, 5143, 5143, 5143, 2378,  776, 1552,
+     1528, 1552, 1552,  776,  776, 1553,  776, 1554,  776,  776,
+     1555, 1556, 1554, 1557, 1802, 1558, 1559,  776,  776, 1554,
+      776, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1554,
+      776, 1554, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553,
+
+     1553, 1553, 1553, 1553, 1553, 1553,  776,  776,  536,  948,
+     1121,  948,  948,  536,  536, 1135,  536, 1136,  536,  536,
+     1137, 2379, 1136, 1139, 2380, 1141, 1142,  536,  536, 1136,
+      536, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136,
+      536, 1136, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135,  536,  536,  550, 1814,
+     1792, 1814, 1814,  550,  550, 2381,  550, 2077,  550,  550,
+     1157, 2078, 2077, 2079, 2080, 2382,  967,  550,  550, 2077,
+      550, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2077,
+      550, 2077, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+
+     2381, 2381, 2381, 2381, 2381, 2381,  550,  550, 2076,  709,
+     1408, 1408, 5143, 5143, 5143, 5143, 5143, 5143, 2081, 5143,
+     1740, 2131, 2131, 1741, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 5143, 5143, 5143, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,  646,
+     2383, 2055, 2383, 2383,  646,  646, 2384,  646, 2385,  646,
+      646, 1395, 2386, 2385, 2387, 2388, 2389, 1392,  646,  646,
+     2385,  646, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384,
+     2385,  646, 2385, 2384, 2384, 2384, 2384, 2384, 2384, 2384,
+     2384, 2384, 2384, 2384, 2384, 2384, 2384,  646,  646, 2390,
+
+     1494, 2391, 1994, 5143,  662, 5143,  986, 2392, 2392, 2392,
+     2392, 1988,  114, 3896, 2627, 1179, 3897, 1410, 2392, 2392,
+     2392, 2392, 2392, 3319, 2392, 5143, 3320, 5143, 5143, 5143,
+     5143, 2392,  784, 1147, 1147, 1147, 1147,  784, 1359, 1148,
+      784,  961,  784, 1360, 1361, 1150,  961, 1151, 1362, 1153,
+     1363,  784,  784,  961,  784, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364,  961,  784,  961, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1359,  784, 1291, 2085, 2396, 2085, 2085, 1291, 2397, 2398,
+     1291, 2109, 1291, 2237, 2399, 2109, 2109, 2400, 2401, 2402,
+
+     2403, 1291, 1291, 2109, 1291, 2404, 2404, 2404, 2404, 2404,
+     2404, 2404, 2404, 2109, 1291, 2109, 2404, 2404, 2404, 2404,
+     2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404,
+     2397, 1291,  248,  610,  610,  610,  610,  248,  248,  878,
+      248,  610,  248,  248,  605,  730,  610,  731,  732,  879,
+      610,  248,  248,  610,  248,  878,  878,  878,  878,  878,
+      878,  878,  878,  610,  248,  610,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  878,  878,
+      248,  248,  784, 1360, 1360, 1360, 1360,  784, 1359,  784,
+      784,  784,  784, 1360, 1360,  785,  784,  784, 1367,  784,
+
+     1359,  784,  784,  784,  784, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359,  784,  784,  784, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359,  784,  250, 2091, 2410, 2091, 2091,  250,  705,  899,
+      250,  743,  250,  598, 1941,  743,  743,  900, 2411,  902,
+     1943,  250,  250,  743,  250, 2412, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412,  743,  250,  743, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+      705,  250,  786, 2111, 2111, 2111, 2111,  786,  786, 2413,
+      786, 2111,  786,  786, 2414, 2415, 2111, 2416, 2417, 2418,
+
+     2111,  786,  786, 2111,  786, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2111,  786, 2111, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+      786,  786,  898,  898,  898,  898, 5143,  169,  176, 2643,
+      121, 5143,  168,  850,  121,  121,  177, 1094,  179,  852,
+     3616, 5143,  121, 3617, 1095, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095,  121, 5143,  121, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,  169,
+      257,  648,  795,  648,  648,  257,  257,  968,  257,  648,
+      257,  257,  780,  648,  648,  797,  798,  969,  648,  257,
+
+      257,  648,  257,  968,  968,  968,  968,  968,  968,  968,
+      968,  648,  257,  648,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  257,  257,
+      641, 1154, 1380, 1154, 1154,  641,  641, 1381,  641, 1154,
+      641,  641, 1382, 2425, 1154, 1384, 2426, 1386, 1154,  641,
+      641, 1154,  641, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1154,  641, 1154, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,  641,  641,
+     1291, 2109, 2096, 2109, 2109, 1291, 1291, 2398, 1291, 2109,
+     1291, 1291, 2290, 2109, 2109, 2400, 2429, 2402, 2109, 1291,
+
+     1291, 2109, 1291, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2109, 1291, 2109, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 1291, 1291,
+      784,  961,  961,  961,  961,  784,  784, 1148,  784,  961,
+      784,  784, 1149, 1150,  961, 1151, 1152, 1153,  961,  784,
+      784,  961,  784, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148,  961,  784,  961, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,  784,  784,
+      729, 2657, 1408, 1673, 5143, 5143, 5143, 5143, 5143, 5143,
+      733, 5143, 2938, 2131, 2485, 3253,  729,  729,  729,  729,
+
+      729,  729,  729,  729, 5143, 5143, 5143,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
+      729, 1080, 1846, 2113, 1846, 1846, 1080, 1080, 2431, 1080,
+     1846, 1080, 1080, 2068, 2115, 1846, 2116, 2117, 2432, 1846,
+     1080, 1080, 1846, 1080, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 1846, 1080, 1846, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 1080,
+     1080, 1254, 2373, 2433, 2373, 2373, 1254, 1254, 2434, 1254,
+     2373, 1254, 1254, 2368, 2435, 2373, 2436, 2437, 2438, 2373,
+     1254, 1254, 2373, 1254, 2434, 2434, 2434, 2434, 2434, 2434,
+
+     2434, 2434, 2373, 1254, 2373, 2434, 2434, 2434, 2434, 2434,
+     2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 1254,
+     1254, 2114, 3907, 2486, 1673, 5143, 5143, 5143, 5143, 5143,
+     5143, 2118, 5143, 3908, 3493, 2485, 3909, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 5143, 5143, 5143, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2441,  709, 2442, 3898, 5143, 1673, 5143, 1673,
+     2443, 2443, 2443, 2443, 1740, 1994, 3921, 1741, 2485, 3922,
+     2485, 2443, 2443, 2443, 2443, 2443, 3930, 2443, 5143, 3931,
+     5143, 5143, 5143, 5143, 2443,  793, 1617, 1618, 1617, 1617,
+
+      793,  793, 1619,  793, 1617,  793,  793, 1620, 1621, 1617,
+     1622, 1847, 1623, 1617,  793,  793, 1617,  793, 1619, 1619,
+     1619, 1619, 1619, 1619, 1619, 1619, 1617,  793, 1617, 1619,
+     1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619,
+     1619, 1619, 1619,  793,  793, 1406, 2121, 2444, 2121, 2121,
+     1406, 1406, 2445, 1406, 1406, 1406, 1406, 1406, 1407, 1406,
+     1406, 2446, 1406, 1406, 1406, 1406, 1406, 1406, 2445, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 1406, 1406, 1406, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2447, 1406, 1001, 2122, 1860, 2122, 2122,
+
+     1001, 1001, 2123, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 2124, 2123, 1001, 1001, 1001, 1001, 1001, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 1001, 1001, 1001, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2123, 2125, 1001, 1409, 2132, 2453, 2132, 2132,
+     1409, 1409, 2454, 1409, 1409, 1409, 1409, 1409, 1410, 1409,
+     1409, 2455, 1409, 1409, 1409, 1409, 1409, 1409, 2454, 2454,
+     2454, 2454, 2454, 2454, 2454, 2454, 1409, 1409, 1409, 2454,
+     2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+     2454, 2454, 2454, 2456, 1409,  561,  812,  812,  812,  812,
+
+      561,  561,  813,  561,  561,  561,  561,  561,  562,  561,
+      561,  984,  561,  561,  561,  561,  561,  561,  813,  813,
+      813,  813,  813,  813,  813,  813,  561,  561,  561,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  985,  561, 1178, 2457, 2458, 2457, 2457,
+     1178, 1178, 2459, 1178, 1178, 1178, 1178, 1178, 1179, 1178,
+     1178, 2460, 2459, 1178, 1178, 1178, 1178, 1178, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 1178, 1178, 1178, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2461, 1178,  559,  979, 1170,  979,  979,
+
+      559,  559, 2140,  559,  559,  559,  559,  559,  560,  559,
+      559, 1171, 2140,  559,  559,  559,  559,  559, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140,  559,  559,  559, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 1172,  559, 1420, 2143, 2469, 2143, 2143,
+     1420, 1420, 2470, 1420, 1420, 1420, 1420, 1420, 1421, 1420,
+     1420, 2471, 1420, 1420, 1420, 1420, 1420, 1420, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 1420, 1420, 1420, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2472, 1420,  424,  680,  680,  680,  680,
+
+      424,  424,  830,  424,  424,  424,  680,  680,  425,  424,
+      424,  831,  424,  680,  424,  424,  424,  424,  830,  830,
+      830,  830,  830,  830,  830,  830,  424,  424,  424,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  832,  424, 1194, 1883, 2152, 1883, 1883,
+     1194, 1194, 2478, 1194, 1194, 1194, 1883, 1883, 1195, 1194,
+     1194, 2154, 2479, 1883, 1194, 1194, 1194, 1194, 2478, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 1194, 1194, 1194, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2478, 2478, 2155, 1194, 1196, 1891, 1891, 1891, 1891,
+
+     1196, 1196, 2156, 1196, 1196, 1196, 1891, 1891, 1197, 1196,
+     1196, 1895, 2157, 1891, 1196, 1196, 1196, 1196, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 1196, 1196, 1196, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 1893, 1196, 2482, 1994, 1891, 1904, 5143,
+     5143, 5143, 5143, 5143, 5143, 2483, 5143, 3942, 2488, 2502,
+     3943, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 5143,
+     5143, 5143, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482,  424, 1016, 1016, 1016,
+     1016,  424,  424, 1200,  424,  424,  424,  424,  424,  425,
+
+      424,  424, 1201,  424,  424,  424,  424,  424,  424, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200,  424,  424,  424,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200,  424,  424,  324,  681,  681,  681,
+      681,  324,  324,  834,  324,  324,  324,  681,  681,  325,
+      324,  324,  683,  835,  681,  324,  324,  324,  324,  834,
+      834,  834,  834,  834,  834,  834,  834,  324,  324,  324,
+      834,  834,  834,  834,  834,  834,  834,  834,  834,  834,
+      834,  834,  834,  834,  685,  324, 1017, 2170, 2171, 2170,
+     2170, 1017, 1017, 2496, 1017, 1017, 1017, 2170, 2170, 1018,
+
+     1017, 1017, 2173, 1017, 2170, 1017, 1017, 1017, 1017, 2496,
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 1017, 1017, 1017,
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+     2496, 2496, 2496, 2496, 2175, 1017,  833,  308, 1904, 1082,
+     5143, 5143, 5143, 5143, 5143, 5143,  324, 5143, 1315, 2502,
+     1505, 1316,  833,  833,  833,  833,  833,  833,  833,  833,
+     5143, 5143, 5143,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  833,  833,  833,  833,  833, 2497,  344, 1460,
+     1478, 5143, 5143, 5143, 5143, 5143, 5143, 2498, 5143, 3855,
+     1727, 2229, 3856, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+
+     2497, 5143, 5143, 5143, 2497, 2497, 2497, 2497, 2497, 2497,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2172, 3958,
+     1460, 1478, 5143, 5143, 5143, 5143, 5143, 5143, 2174, 5143,
+     3959, 1727, 2229, 3960, 2172, 2172, 2172, 2172, 2172, 2172,
+     2172, 2172, 5143, 5143, 5143, 2172, 2172, 2172, 2172, 2172,
+     2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,  838,
+     1910, 1904, 1910, 1910,  838,  838, 2503,  838,  838,  838,
+     1910, 1910,  839,  838,  838, 1912, 2504, 1910,  838,  838,
+      838,  838, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+      838,  838,  838, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 1914,  838, 2179,
+     3962, 2897,  712, 5143, 5143, 5143, 5143, 5143, 5143, 2180,
+     5143, 3963, 3559, 1235, 3964, 2179, 2179, 2179, 2179, 2179,
+     2179, 2179, 2179, 5143, 5143, 5143, 2179, 2179, 2179, 2179,
+     2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
+     1458, 2183, 2509, 2183, 2183, 1458, 2510, 2511, 1458, 2512,
+     1458, 2513, 2514, 2515, 2512, 2516, 2517, 2518, 2519, 1458,
+     1458, 2512, 1458, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+     2520, 2512, 1458, 2512, 2520, 2520, 2520, 2520, 2520, 2520,
+     2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2510, 1458,
+
+     1093, 1744, 1713, 1744, 1744, 1093, 1093, 2184, 1093, 1927,
+     1093, 1093, 1989, 1927, 1927, 1930, 1990, 2185, 1991, 1093,
+     1093, 1927, 1093, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 1927, 1093, 1927, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 1093, 1093,
+     2189, 5143, 2521, 5143, 5143,  862, 5143, 1478, 2522, 2522,
+     2522, 2522,  986,  986,  986,  986, 1480,  898, 2229, 2522,
+     2522, 2522, 2522, 2522,  562, 2522, 3289,  988, 2741, 5143,
+      898, 2742, 2522, 1926, 3976, 1460, 1478, 3290, 5143, 5143,
+     3966, 2741, 5143, 2190, 2742, 3977, 1727, 2229, 3978, 2191,
+
+     2191, 2191, 2191, 1926, 1926, 1926, 1926, 5143, 5143,  989,
+     2191, 2191, 2191, 2191, 2191, 1926, 2191, 1926, 1926, 1926,
+     1926, 1926, 1926, 2191, 1093, 1991, 1962, 1991, 1991, 1093,
+     1093, 2525, 1093, 1991, 1093, 1093, 1989, 1991, 1991, 2193,
+     2194, 2526, 1991, 1093, 1093, 1991, 1093, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 1991, 1093, 1991, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 1093, 1093, 2192,  898, 1039, 1460, 5143, 5143,
+     5143, 5143, 5143, 5143, 2195, 5143, 2105, 1462, 1727, 2106,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 5143, 5143,
+
+     5143, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2529,  345, 2530, 1408, 5143,
+     3660, 5143, 2897, 2531, 2531, 2531, 2531, 3094, 2789, 3981,
+     3095, 4164, 3982, 3559, 2531, 2531, 2531, 2531, 2531, 2790,
+     2531, 5143, 3127, 5143, 5143, 5143, 5143, 2531, 1461, 2198,
+     2532, 2198, 2198, 1461, 2533, 2534, 1461, 2535, 1461, 2536,
+     2537, 2538, 2535, 2539, 2540, 2541, 2542, 1461, 1461, 2535,
+     1461, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2535,
+     1461, 2535, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+     2543, 2543, 2543, 2543, 2543, 2543, 2533, 1461,  599,  712,
+
+      712,  712,  712,  599,  599,  855,  599,  856,  599,  599,
+      857, 1709,  856,  859, 2544,  861,  862,  599,  599,  856,
+      599,  855,  855,  855,  855,  855,  855,  855,  855,  856,
+      599,  856,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  599,  599,  599,  854,
+      854,  854,  854,  599, 1038,  855,  599,  856,  599, 1039,
+     1040,  858,  856,  859, 1041,  861, 1042,  599,  599,  856,
+      599, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,  856,
+      599,  856, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1038,  599, 1234, 2007,
+
+     2294, 2007, 2007, 1234, 1234, 2547, 1234, 2206, 1234, 1234,
+     2295, 2209, 2206, 2210, 2296, 2548, 2297, 1234, 1234, 2206,
+     1234, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2206,
+     1234, 2206, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 1234, 1234, 2205,  353,
+     3660, 1817, 5143, 5143, 5143, 5143, 5143, 5143, 2212, 5143,
+     3983, 4164, 1971, 3984, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 5143, 5143, 5143, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 1234,
+     2207,  854, 2207, 2207, 1234, 2204, 1234, 1234, 1234, 1234,
+
+     2207, 2207, 1235, 1234, 1234, 2549, 1234, 2204, 1234, 1234,
+     1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     1234, 1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 1234, 1466,
+     2550, 2551, 2550, 2550, 1466, 1466, 2552, 1466, 2553, 1466,
+     1466, 2554, 2555, 2553, 2556, 2557, 2558, 2559, 1466, 1466,
+     2553, 1466, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
+     2553, 1466, 2553, 2552, 2552, 2552, 2552, 2552, 2552, 2552,
+     2552, 2552, 2552, 2552, 2552, 2552, 2552, 1466, 1466, 2560,
+     3986, 2561, 3989, 5143, 1380, 5143,  812, 2562, 2562, 2562,
+
+     2562, 3987, 1849, 3990, 2457, 1842, 2139, 1407, 2562, 2562,
+     2562, 2562, 2562, 1850, 2562, 5143, 3991, 5143, 5143, 5143,
+     5143, 2562, 1234, 2297, 2563, 2297, 2297, 1234, 1234, 2564,
+     1234, 2297, 1234, 1234, 2295, 2565, 2297, 2566, 2567, 2568,
+     2297, 1234, 1234, 2297, 1234, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2297, 1234, 2297, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     1234, 1234,  599,  712,  712,  712,  712,  599,  599, 1044,
+      599,  856,  599,  599,  857,  858,  856,  859,  860, 1045,
+      862,  599,  599,  856,  599, 1044, 1044, 1044, 1044, 1044,
+
+     1044, 1044, 1044,  856,  599,  856, 1044, 1044, 1044, 1044,
+     1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
+      599,  599,  599, 1039, 1039, 1039, 1039,  599, 1038,  599,
+      599,  599,  599, 1039, 1039,  600,  599,  599, 1046,  599,
+     1038,  599,  599,  599,  599, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038,  599,  599,  599, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038,  599,  710, 1225, 1225, 1225, 1225,  710,  710, 1226,
+      710, 1227,  710,  710, 1228, 1229, 1227, 1230, 2569, 1231,
+     1232,  710,  710, 1227,  710, 1226, 1226, 1226, 1226, 1226,
+
+     1226, 1226, 1226, 1227,  710, 1227, 1226, 1226, 1226, 1226,
+     1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
+      710,  710,  255, 1478, 1478, 1478, 1478,  255,  469,  628,
+      255,  629,  255,  468, 1590, 1130,  629,  631, 2570,  633,
+     1592,  255,  255,  629,  255, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722,  629,  255,  629, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+      469,  255,  858, 5143, 1058,  860, 1059, 1408, 1658,  986,
+     5143, 5143, 1060, 1060, 1060, 1060, 5143, 1673, 3992, 1659,
+     1410, 3993, 2812, 1060, 1060, 1060, 1060, 1060, 3998, 1060,
+
+     5143, 3999, 5143, 5143, 5143, 5143, 1060,  599,  862,  862,
+      862,  862,  599,  599, 1061,  599,  862,  599,  599,  857,
+     1062,  862, 1063, 1064, 1065,  862,  599,  599,  862,  599,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,  599,
+      862, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061,  599,  599, 1479, 2230, 2573,
+     2230, 2230, 1479, 2574, 2575, 1479, 2576, 1479, 2577, 2578,
+     2579, 2576, 2580, 2581, 2582, 2583, 1479, 1479, 2576, 1479,
+     2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2576, 1479,
+     2576, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584,
+
+     2584, 2584, 2584, 2584, 2584, 2574, 1479,  248, 1460, 1460,
+     1460, 1460,  248,  377,  603,  248,  604,  248,  336, 1701,
+      606,  604,  607, 1702,  609, 1703,  248,  248,  604,  248,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,  604,  248,
+      604, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704,  377,  248,  248, 1817, 1817,
+     1817, 1817,  248,  377,  729,  248,  610,  248,  336, 1701,
+      730,  610,  731, 2086,  733, 1703,  248,  248,  610,  248,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,  610,  248,
+      610, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+
+     2087, 2087, 2087, 2087, 2087,  377,  248, 1291, 2237, 2410,
+     2237, 2237, 1291, 2397, 1291, 1291, 1291, 1291, 2237, 2237,
+     1291, 1291, 1291, 2589, 1291, 2397, 1291, 1291, 1291, 1291,
+     2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 1291, 1291,
+     1291, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
+     2397, 2397, 2397, 2397, 2397, 2397, 1291, 1461, 2238,  854,
+     2238, 2238, 1461, 1461, 2534, 1461, 2535, 1461, 1461, 2590,
+     2538, 2535, 2539, 2591, 2541, 2592, 1461, 1461, 2535, 1461,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2535, 1461,
+     2535, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+
+     2534, 2534, 2534, 2534, 2534, 1461, 1461,  512, 1738, 1460,
+     1738, 1738,  512,  512, 2239,  512, 1978,  512,  512, 1979,
+     1980, 1978, 1981, 1982, 2240, 1984,  512,  512, 1978,  512,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 1978,  512,
+     1978, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239,  512,  512, 2252, 5143, 2593,
+     5143, 5143,  812, 5143,  812, 2594, 2594, 2594, 2594, 2782,
+     2453, 2782, 2782, 1407, 4001, 1407, 2594, 2594, 2594, 2594,
+     2594, 1407, 2594, 1891, 2784, 4002, 5143, 1435, 3492, 2594,
+     1977, 2824, 1673, 1891, 4008, 5143, 5143, 4009, 4010, 5143,
+
+     1983, 4011, 2825, 2485, 2488, 3152, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 5143, 5143, 2785, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977,  512,  847, 1033,  847,  847,  512, 1034,  512,  512,
+      512,  512,  847,  847,  513,  512,  512, 1035,  512, 1034,
+      512,  512,  512,  512, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034,  512,  512,  512, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+      512,  701, 2595, 2232, 2595, 2595,  701,  701, 2596,  701,
+     2597,  701,  701, 2598, 2599, 2597, 2600, 1982, 2601, 2602,
+
+      701,  701, 2597,  701, 2596, 2596, 2596, 2596, 2596, 2596,
+     2596, 2596, 2597,  701, 2597, 2596, 2596, 2596, 2596, 2596,
+     2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,  701,
+      701,  250,  598,  704,  598,  598,  250,  705,  250,  250,
+      250,  250,  598,  598,  893,  250,  250, 2603,  250,  705,
+      250,  250,  250,  250,  705,  705,  705,  705,  705,  705,
+      705,  705,  250,  250,  250,  705,  705,  705,  705,  705,
+      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      250, 2252, 1891, 2253, 4019, 5143, 1904, 5143,  854, 2254,
+     2254, 2254, 2254, 4016, 1904, 4020, 4017, 2502, 2839, 1459,
+
+     2254, 2254, 2254, 2254, 2254, 4027, 2254, 5143, 4028, 5143,
+     5143, 5143, 5143, 2254,  512, 1984, 1817, 1984, 1984,  512,
+      512, 2255,  512, 1984,  512,  512, 1979, 2256, 1984, 2257,
+     2258, 2259, 1984,  512,  512, 1984,  512, 2255, 2255, 2255,
+     2255, 2255, 2255, 2255, 2255, 1984,  512, 1984, 2255, 2255,
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+     2255, 2255,  512,  512, 2607, 2845,  854, 1460, 5143, 5143,
+     5143, 5143, 5143, 5143, 2608, 5143, 2846, 1459, 1727, 4029,
+     2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 5143, 5143,
+     5143, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
+
+     2607, 2607, 2607, 2607, 2607,  595, 2249, 2235, 2249, 2249,
+      595,  595, 2609,  595, 2249,  595,  595, 2244, 2610, 2249,
+     2611, 2612, 2613, 2249,  595,  595, 2249,  595, 2609, 2609,
+     2609, 2609, 2609, 2609, 2609, 2609, 2249,  595, 2249, 2609,
+     2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609,
+     2609, 2609, 2609,  595,  595, 2616, 2824, 2617, 1082, 5143,
+      854, 5143, 1039, 2618, 2618, 2618, 2618, 2825, 1460, 4030,
+     3499, 1459, 4031, 1462, 2618, 2618, 2618, 2618, 2618, 4044,
+     2618, 5143, 4045, 5143, 5143, 5143, 5143, 2618, 1504, 2262,
+     2619, 2262, 2262, 1504, 1504, 2620, 1504, 2621, 1504, 1504,
+
+     2622, 2623, 2621, 2624, 2625, 2626, 2627, 1504, 1504, 2621,
+     1504, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2621,
+     1504, 2621, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 1504, 1504,  784, 1994,
+     1994, 1994, 1994,  784,  784, 2628,  784, 2264,  784,  784,
+     1149, 2265, 2264, 2266, 2267, 2629,  961,  784,  784, 2264,
+      784, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2264,
+      784, 2264, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628,  784,  784, 2263,  854,
+      854, 1039, 5143, 5143, 5143, 5143, 5143, 5143, 2268, 5143,
+
+     2867, 1459, 1462, 2868, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 5143, 5143, 5143, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,  957,
+     2630, 2630, 2630, 2630,  957,  957, 2631,  957, 2632,  957,
+      957, 1370, 2633, 2632, 2634, 2635, 2636, 1368,  957,  957,
+     2632,  957, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631,
+     2632,  957, 2632, 2631, 2631, 2631, 2631, 2631, 2631, 2631,
+     2631, 2631, 2631, 2631, 2631, 2631, 2631,  957,  957, 2639,
+     1478, 2640, 1478, 5143, 3660, 5143,  862, 2641, 2641, 2641,
+     2641, 3337,  336, 4079, 3338, 4164, 4080, 1480, 2641, 2641,
+
+     2641, 2641, 2641, 4081, 2641, 5143, 4082, 5143, 5143, 5143,
+     5143, 2641, 1756, 2642, 2643, 2642, 2642, 1756, 1756, 2644,
+     1756, 2645, 1756, 1756, 2646, 2647, 2645, 2648, 2649, 2650,
+     2651, 1756, 1756, 2645, 1756, 2644, 2644, 2644, 2644, 2644,
+     2644, 2644, 2644, 2645, 1756, 2645, 2644, 2644, 2644, 2644,
+     2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644,
+     1756, 1756,  641, 1759, 1478, 1759, 1759,  641,  641, 2271,
+      641, 1997,  641,  641, 1382, 1998, 1997, 1999, 2000, 2272,
+     1154,  641,  641, 1997,  641, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271, 1997,  641, 1997, 2271, 2271, 2271, 2271,
+
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+      641,  641, 2283, 5143, 2654, 5143, 5143,  862, 5143,  854,
+     2655, 2655, 2655, 2655, 2791, 2792, 2791, 2791, 1480,  854,
+     1459, 2655, 2655, 2655, 2655, 2655, 1410, 2655,  468, 2794,
+     2867, 5143, 3548, 2868, 2655, 1996, 4102, 1281, 3660, 4094,
+     5143, 5143, 4095, 4097, 5143, 2001, 3558, 4103, 1761, 4164,
+     2207, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 5143,
+     5143, 2795, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996,  255, 1478, 1478, 1478,
+     1478,  255,  469,  628,  255,  629,  255,  468, 1590,  630,
+
+      629,  631, 1721,  633, 1592,  255,  255,  629,  255, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722,  629,  255,  629,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722,  469,  255,  962, 2656, 2657, 2656,
+     2656,  962,  962, 2658,  962, 2659,  962,  962, 1835, 2660,
+     2659, 2661, 2000, 2662, 1832,  962,  962, 2659,  962, 2658,
+     2658, 2658, 2658, 2658, 2658, 2658, 2658, 2659,  962, 2659,
+     2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
+     2658, 2658, 2658, 2658,  962,  962,  250,  743,  898,  743,
+      743,  250,  250,  899,  250,  743,  250,  250,  739, 2663,
+
+      743,  900, 2664,  902,  743,  250,  250,  743,  250,  899,
+      899,  899,  899,  899,  899,  899,  899,  743,  250,  743,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  250,  250, 2283,  712, 2284,  862,
+     5143, 1478, 5143, 1460, 2285, 2285, 2285, 2285, 1953, 4117,
+     3058, 1954, 2229, 3059, 1727, 2285, 2285, 2285, 2285, 2285,
+     4118, 2285, 5143, 2362, 5143, 5143, 5143, 5143, 2285, 1291,
+     2006, 1962, 2006, 2006, 1291, 1291, 2669, 1291, 2289, 1291,
+     1291, 2290, 2289, 2289, 2291, 2292, 2670, 2109, 1291, 1291,
+     2289, 1291, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+
+     2289, 1291, 2289, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 1291, 1291, 2288,
+     5143, 5143, 5143, 1380, 5143, 5143, 5143, 5143, 5143, 2293,
+      662,  662,  662,  662, 1842, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 5143, 5143,  814, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2671, 1478, 2672, 1817, 5143, 1817, 5143,  961, 2673, 2673,
+     2673, 2673, 4121,  610, 1971, 4122, 1971,  815, 1589, 2673,
+     2673, 2673, 2673, 2673, 4132, 2673, 5143, 4133, 5143, 5143,
+     5143, 5143, 2673,  599,  712,  712,  712,  712,  599,  599,
+
+      855,  599,  856,  599,  599,  857,  858,  856,  859,  860,
+      861,  862,  599,  599,  856,  599,  855,  855,  855,  855,
+      855,  855,  855,  855,  856,  599,  856,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  599,  599, 1234, 2207,  854, 2207, 2207, 1234, 2204,
+     1234, 1234, 1234, 1234, 2207, 2207, 1235, 1234, 1234, 2549,
+     1234, 2204, 1234, 1234, 1234, 1234, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 1234, 1234, 1234, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 1234, 1234, 2297, 2563, 2297, 2297, 1234, 1234,
+
+     2564, 1234, 2297, 1234, 1234, 2295, 2565, 2297, 2566, 2567,
+     2568, 2297, 1234, 1234, 2297, 1234, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2297, 1234, 2297, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 1234, 1234,  876, 1524, 1765, 1524, 1524,  876,  876,
+     2008,  876, 1767,  876,  876, 1768, 1769, 1767, 2022, 1771,
+     2298, 1773,  876,  876, 1767,  876, 2299, 2299, 2299, 2299,
+     2008, 2008, 2008, 2008, 1767,  876, 1767, 2299, 2299, 2299,
+     2299, 2299, 2008, 2299, 2008, 2008, 2008, 2008, 2008, 2008,
+     2299,  876,  876, 1766,  712, 1360, 1817, 5143, 5143, 5143,
+
+     5143, 1770, 5143, 1772, 5143, 1953, 1819, 1971, 1954, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 5143, 5143, 5143,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766,  248,  516,  516,  516,  516,  248,
+      248,  603,  248,  604,  248,  248,  605,  606,  604,  607,
+      608,  609,  610,  248,  248,  604,  248,  603,  603,  603,
+      603,  603,  603,  603,  603,  604,  248,  604,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  248,  248, 1770,  345, 2009, 4149, 5143,  812,
+     5143, 1673, 2008, 2008, 2008, 2008, 4146, 1460, 4150, 4147,
+
+     1407, 2238, 2485, 2008, 2008, 2008, 2008, 2008, 4151, 2008,
+     5143, 4152, 5143, 5143, 5143, 5143, 2008,  876, 1483, 1460,
+     1483, 1483,  876, 1728,  876,  876,  876,  876, 1483, 1483,
+      877,  876,  876, 1729,  876, 1728,  876,  876,  876,  876,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,  876,  876,
+      876, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728,  876, 1249, 2300, 2301,
+     2300, 2300, 1249, 1249, 2302, 1249, 2303, 1249, 1249, 2304,
+     2305, 2303, 2306, 2676, 2307, 2308, 1249, 1249, 2303, 1249,
+     2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302, 2303, 1249,
+
+     2303, 2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302, 2302,
+     2302, 2302, 2302, 2302, 2302, 1249, 1249, 2022, 1082, 2023,
+     3009, 5143, 2486, 5143, 1673, 2024, 2024, 2024, 2024, 2260,
+     1281, 3371, 2261, 3493, 3659, 2485, 2024, 2024, 2024, 2024,
+     2024, 3654, 2024, 5143, 3655, 5143, 5143, 5143, 5143, 2024,
+      876, 1773, 2025, 1773, 1773,  876,  876, 2026,  876, 1773,
+      876,  876, 1768, 2027, 1773, 2028, 2029, 2030, 1773,  876,
+      876, 1773,  876, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 1773,  876, 1773, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,  876,  876,
+
+     2313, 4168, 1904, 3660, 5143, 5143, 5143, 5143, 5143, 5143,
+     2314, 5143, 4169, 2502, 4164, 3343, 2313, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313, 5143, 5143, 5143, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313,
+     2313, 2323,  898, 2680, 1749, 5143, 2897, 5143, 3660, 2681,
+     2681, 2681, 2681, 2002, 1994, 2287, 2003, 3559, 3031, 4164,
+     2681, 2681, 2681, 2681, 2681, 3896, 2681, 5143, 3897, 5143,
+     5143, 5143, 5143, 2681, 1249, 2308, 2682, 2308, 2308, 1249,
+     1249, 2683, 1249, 2308, 1249, 1249, 2304, 2684, 2308, 2685,
+     2029, 2686, 2308, 1249, 1249, 2308, 1249, 2683, 2683, 2683,
+
+     2683, 2683, 2683, 2683, 2683, 2308, 1249, 2308, 2683, 2683,
+     2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683,
+     2683, 2683, 1249, 1249,  215,  749,  709,  749,  749,  215,
+      750,  215,  215,  215,  215,  749,  749,  918,  215,  215,
+     2687,  215,  750,  215,  215,  215,  215,  750,  750,  750,
+      750,  750,  750,  750,  750,  215,  215,  215,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  215, 2323, 3038, 2324, 3052, 5143, 1994,
+     5143,  862, 2325, 2325, 2325, 2325, 3039,  535, 3053, 4188,
+     3019, 4199, 1480, 2325, 2325, 2325, 2325, 2325, 1330, 2325,
+
+     5143, 1331, 5143, 5143, 5143, 5143, 2325,  452,  746,  903,
+      746,  746,  452,  452,  904,  452,  905,  452,  452,  906,
+      907,  905,  908,  909,  910,  911,  452,  452,  905,  452,
+      904,  904,  904,  904,  904,  904,  904,  904,  905,  452,
+      905,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  452,  452,  213,  308,  308,
+      308,  308,  213,  213,  337,  213,  338,  213,  213,  339,
+      340,  338,  341,  342,  343,  344,  213,  213,  338,  213,
+      337,  337,  337,  337,  337,  337,  337,  337,  338,  213,
+      338,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  213,  213, 1103,  344, 3660,
+     1281, 5143, 5143, 5143, 5143, 5143, 5143, 1104, 5143, 1570,
+     4164, 1761, 1571, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 5143, 5143, 5143, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,  452, 1105,
+     1082, 1105, 1105,  452, 1106,  452,  452,  452,  452, 1105,
+     1105,  453,  452,  452, 1107,  452, 1106,  452,  452,  452,
+      452, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,  452,
+      452,  452, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106,  452,  617, 1296,
+
+     1297, 1296, 1296,  617,  617, 1298,  617, 1299,  617,  617,
+     1300, 1301, 1299, 1302, 2691, 1303, 1304,  617,  617, 1299,
+      617, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1299,
+      617, 1299, 1298, 1298, 1298, 1298, 1298, 1298, 1298, 1298,
+     1298, 1298, 1298, 1298, 1298, 1298,  617,  617,  946, 1537,
+     1777, 1537, 1537,  946,  946, 1778,  946, 1779,  946,  946,
+     1780, 2692, 1779, 1782, 2693, 1784, 1547,  946,  946, 1779,
+      946, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779,
+      946, 1779, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778,  946,  946, 1118, 2394,
+
+     1119, 2394, 5143, 2897, 5143, 1460, 1120, 1120, 1120, 1120,
+     2395,  610, 2395, 3071, 3559, 3072, 1727, 1120, 1120, 1120,
+     1120, 1120, 4222, 1120, 5143, 4223, 5143, 5143, 5143, 5143,
+     1120,  452,  911, 1121,  911,  911,  452,  452, 1122,  452,
+      911,  452,  452,  906, 1123,  911, 1124, 1125, 1126,  911,
+      452,  452,  911,  452, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122,  911,  452,  911, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,  452,
+      452,  946, 1537, 1777, 1537, 1537,  946,  946, 2033,  946,
+     1779,  946,  946, 1780, 1781, 1779, 2048, 1783, 2336, 1547,
+
+      946,  946, 1779,  946, 2337, 2337, 2337, 2337, 2033, 2033,
+     2033, 2033, 1779,  946, 1779, 2337, 2337, 2337, 2337, 2337,
+     2033, 2337, 2033, 2033, 2033, 2033, 2033, 2033, 2337,  946,
+      946,  255,  535,  535,  535,  535,  255,  255,  628,  255,
+      629,  255,  255,  404,  630,  629,  631,  632,  633,  345,
+      255,  255,  629,  255,  628,  628,  628,  628,  628,  628,
+      628,  628,  629,  255,  629,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  255,
+      255, 1782,  961, 2034,  468, 5143, 1478, 5143, 1147, 2033,
+     2033, 2033, 2033, 2419, 3958, 4232, 2420, 2229, 4233, 1816,
+
+     2033, 2033, 2033, 2033, 2033, 3959, 2033, 5143, 3447, 5143,
+     5143, 5143, 5143, 2033,  946, 2035, 1478, 2035, 2035,  946,
+     2036,  946,  946,  946,  946, 2035, 2035,  947,  946,  946,
+     2037,  946, 2036,  946,  946,  946,  946, 2036, 2036, 2036,
+     2036, 2036, 2036, 2036, 2036,  946,  946,  946, 2036, 2036,
+     2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+     2036, 2036, 2036,  946, 1334, 2340, 2341, 2340, 2340, 1334,
+     1334, 2342, 1334, 2343, 1334, 1334, 2344, 2345, 2343, 2346,
+     2697, 2347, 2348, 1334, 1334, 2343, 1334, 2342, 2342, 2342,
+     2342, 2342, 2342, 2342, 2342, 2343, 1334, 2343, 2342, 2342,
+
+     2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+     2342, 2342, 1334, 1334, 1781, 5143, 2048, 1783, 2049, 4238,
+     4241, 1147, 5143, 5143, 2050, 2050, 2050, 2050, 5143, 2476,
+     4239, 4242, 1816, 2782, 2791, 2050, 2050, 2050, 2050, 2050,
+     2477, 2050, 5143, 3130, 5143, 5143, 5143, 5143, 2050,  946,
+     1547, 1792, 1547, 1547,  946,  946, 1793,  946, 1547,  946,
+      946, 1780, 1794, 1547, 1795, 1796, 1797, 1547,  946,  946,
+     1547,  946, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1547,  946, 1547, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793,  946,  946, 2053,
+
+     1869, 1360, 1147, 5143, 5143, 5143, 5143, 2061, 5143, 2353,
+     5143, 1870, 1819, 1816, 3131, 2354, 2354, 2354, 2354, 2053,
+     2053, 2053, 2053, 5143, 5143, 5143, 2354, 2354, 2354, 2354,
+     2354, 2053, 2354, 2053, 2053, 2053, 2053, 2053, 2053, 2354,
+     1795, 4246, 2054, 1673, 5143, 2486, 5143, 2486, 2053, 2053,
+     2053, 2053, 4247, 3137, 4248, 2805, 3493, 4249, 3493, 2053,
+     2053, 2053, 2053, 2053, 3138, 2053, 5143, 3483, 5143, 5143,
+     5143, 5143, 2053, 1334, 2348, 2355, 2348, 2348, 1334, 1334,
+     2356, 1334, 2348, 1334, 1334, 2344, 2357, 2348, 2358, 2700,
+     2359, 2348, 1334, 1334, 2348, 1334, 2356, 2356, 2356, 2356,
+
+     2356, 2356, 2356, 2356, 2348, 1334, 2348, 2356, 2356, 2356,
+     2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356,
+     2356, 1334, 1334, 2061, 4001, 2062, 1891, 5143, 1904, 5143,
+     1673, 2063, 2063, 2063, 2063, 4002, 3147, 4253, 4252, 2502,
+     4254, 2485, 2063, 2063, 2063, 2063, 2063, 3148, 2063, 5143,
+     3494, 5143, 5143, 5143, 5143, 2063, 1479, 2362, 2563, 2362,
+     2362, 1479, 1479, 2575, 1479, 2576, 1479, 1479, 2701, 2579,
+     2576, 2580, 2702, 2582, 2703, 1479, 1479, 2576, 1479, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2576, 1479, 2576,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+
+     2575, 2575, 2575, 2575, 1479, 1479, 1080, 1801, 2025, 1801,
+     1801, 1080, 1080, 2363, 1080, 2067, 1080, 1080, 2068, 2069,
+     2067, 2070, 2071, 2364, 1846, 1080, 1080, 2067, 1080, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2067, 1080, 2067,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 1080, 1080, 2376, 5143, 2704, 5143,
+     5143, 1435, 5143, 3660, 2705, 2705, 2705, 2705,  986,  986,
+      986,  986, 2164, 3790, 4164, 2705, 2705, 2705, 2705, 2705,
+      562, 2705, 3160,  988, 3791, 5143, 3147, 4257, 2705, 2066,
+     1904, 2897,  862, 3161, 5143, 5143, 4258, 3148, 5143, 2072,
+
+     3766, 4262, 3559, 1480, 4263, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 5143, 5143,  989, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     1080, 1732, 1817, 1732, 1732, 1080, 1972, 1080, 1080, 1080,
+     1080, 1732, 1732, 1081, 1080, 1080, 1973, 1080, 1972, 1080,
+     1080, 1080, 1080, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1080, 1080, 1080, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1080,
+     1485, 2706, 2682, 2706, 2706, 1485, 1485, 2707, 1485, 2708,
+     1485, 1485, 2709, 2710, 2708, 2711, 2071, 2712, 2713, 1485,
+
+     1485, 2708, 1485, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
+     2707, 2708, 1485, 2708, 2707, 2707, 2707, 2707, 2707, 2707,
+     2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 1485, 1485,
+      257,  951,  898,  951,  951,  257,  952,  257,  257,  257,
+      257,  951,  951,  634,  257,  257, 2714,  257,  952,  257,
+      257,  257,  257,  952,  952,  952,  952,  952,  952,  952,
+      952,  257,  257,  257,  952,  952,  952,  952,  952,  952,
+      952,  952,  952,  952,  952,  952,  952,  952,  952,  257,
+     2376, 3165, 2377, 4267, 5143, 3660, 5143,  854, 2378, 2378,
+     2378, 2378, 3166, 4282, 4268, 3507, 4164, 2850, 1459, 2378,
+
+     2378, 2378, 2378, 2378, 4283, 2378, 5143, 2513, 5143, 5143,
+     5143, 5143, 2378, 1080, 1846, 2113, 1846, 1846, 1080, 1080,
+     2114, 1080, 1846, 1080, 1080, 2068, 2115, 1846, 2116, 2117,
+     2118, 1846, 1080, 1080, 1846, 1080, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 1846, 1080, 1846, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 1080, 1080, 1812, 2718, 2719, 2718, 2718, 1812, 1812,
+     2720, 1812, 2721, 1812, 1812, 2722, 2723, 2721, 2724, 2725,
+     2726, 2727, 1812, 1812, 2721, 1812, 2720, 2720, 2720, 2720,
+     2720, 2720, 2720, 2720, 2721, 1812, 2721, 2720, 2720, 2720,
+
+     2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
+     2720, 1812, 1812,  550, 1814, 1792, 1814, 1814,  550,  550,
+     2381,  550, 2077,  550,  550, 1157, 2078, 2077, 2079, 2080,
+     2382,  967,  550,  550, 2077,  550, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2077,  550, 2077, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381,  550,  550, 2390, 5143, 2728, 5143, 5143, 2897, 5143,
+     1994, 2729, 2729, 2729, 2729,  986,  986,  986,  986, 3559,
+     1460, 3019, 2729, 2729, 2729, 2729, 2729,  562, 2729,  854,
+      988, 4292, 5143, 4321, 4293, 2729, 2076, 4324, 1994, 1177,
+
+     2867, 5143, 5143, 2868, 4322, 5143, 2081, 2855, 4325, 3019,
+     1421, 2536, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     5143, 5143,  989, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076,  793, 2730, 2355,
+     2730, 2730,  793,  793, 2731,  793, 2732,  793,  793, 1620,
+     2733, 2732, 2734, 2080, 2735, 1617,  793,  793, 2732,  793,
+     2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2732,  793,
+     2732, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
+     2731, 2731, 2731, 2731, 2731,  793,  793,  257,  648,  795,
+      648,  648,  257,  257,  796,  257,  648,  257,  257,  780,
+
+     2736,  648,  797, 2737,  799,  648,  257,  257,  648,  257,
+      796,  796,  796,  796,  796,  796,  796,  796,  648,  257,
+      648,  796,  796,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  257,  257, 2390, 2897, 2391,
+     4340, 5143, 2486, 5143, 2486, 2392, 2392, 2392, 2392, 4337,
+     3548, 4341, 4338, 3493, 2592, 3493, 2392, 2392, 2392, 2392,
+     2392, 4097, 2392, 5143, 4342, 5143, 5143, 5143, 5143, 2392,
+      784, 1147, 1147, 1147, 1147,  784, 1359, 1148,  784,  961,
+      784, 1360, 1361, 1150,  961, 1151, 1362, 1153, 1363,  784,
+      784,  961,  784, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+
+     1364,  961,  784,  961, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1359,  784,
+      898,  898,  898,  898, 5143,  169,  176,  898,  121, 5143,
+      168,  850,  121,  121,  177, 1094,  179,  852, 3830, 5143,
+      121, 3831, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+      121, 5143,  121, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095, 1095, 1095, 1095,  169, 1291, 2109,
+     2096, 2109, 2109, 1291, 1291, 2739, 1291, 2109, 1291, 1291,
+     2290, 2109, 2109, 2400, 2429, 2740, 2109, 1291, 1291, 2109,
+     1291, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2109,
+
+     1291, 2109, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 1291, 1291, 1291, 2237,
+     2410, 2237, 2237, 1291, 2397, 1291, 1291, 1291, 1291, 2237,
+     2237, 1291, 1291, 1291, 2589, 1291, 2397, 1291, 1291, 1291,
+     1291, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 1291,
+     1291, 1291, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
+     2397, 2397, 2397, 2397, 2397, 2397, 2397, 1291, 2398, 2678,
+     1435, 1891, 5143, 5143, 5143, 5143, 5143, 5143, 2402, 5143,
+     2679, 2164, 2488, 3232, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 5143, 5143, 5143, 2398, 2398, 2398, 2398, 2398,
+
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2743,
+      308, 2744, 1952, 5143, 2486, 5143, 2897, 2745, 2745, 2745,
+     2745, 2545, 4347, 2065, 2546, 3493, 3380, 3559, 2745, 2745,
+     2745, 2745, 2745, 4348, 2745, 5143, 3885, 5143, 5143, 5143,
+     5143, 2745,  784, 1360, 1360, 1360, 1360,  784, 1359,  784,
+      784,  784,  784, 1360, 1360,  785,  784,  784, 1367,  784,
+     1359,  784,  784,  784,  784, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359,  784,  784,  784, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359,  784,  250,  743,  898,  743,  743,  250,  250, 1096,
+
+      250,  743,  250,  250,  739,  743,  743,  900,  901, 1097,
+      743,  250,  250,  743,  250, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096,  743,  250,  743, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+      250,  250,  784,  961,  961,  961,  961,  784,  784, 1365,
+      784,  961,  784,  784, 1149, 1150,  961, 1151, 1152, 1366,
+      961,  784,  784,  961,  784, 1365, 1365, 1365, 1365, 1365,
+     1365, 1365, 1365,  961,  784,  961, 1365, 1365, 1365, 1365,
+     1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
+      784,  784,  959, 1581, 1581, 1581, 1581,  959,  959, 1582,
+
+      959, 1581,  959,  959, 1583, 1584, 1581, 1585, 2751, 1586,
+     1581,  959,  959, 1581,  959, 1582, 1582, 1582, 1582, 1582,
+     1582, 1582, 1582, 1581,  959, 1581, 1582, 1582, 1582, 1582,
+     1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582,
+      959,  959, 1148,  709, 2897,  862, 5143, 5143, 5143, 5143,
+     5143, 5143, 1153, 5143, 2527, 3559, 1480, 2528, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 5143, 5143, 5143, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148,  255, 1380, 1380, 1380, 1380,  255,  469,
+      403,  255,  345,  255,  468, 1590,  791,  345,  406, 2752,
+
+      408, 1592,  255,  255,  345,  255, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593,  345,  255,  345, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593,  469,  255, 1377, 4351, 1378,  862, 5143, 3660, 5143,
+     1177, 1379, 1379, 1379, 1379, 4352, 4366, 2224, 2577, 4164,
+     2225, 1421, 1379, 1379, 1379, 1379, 1379, 4367, 1379, 5143,
+     2703, 5143, 5143, 5143, 5143, 1379, 1588, 2421, 2753, 2421,
+     2421, 1588, 2754, 2755, 1588, 2430, 1588, 2756, 2757, 2758,
+     2430, 2759, 2760, 2761, 2762, 1588, 1588, 2430, 1588, 2763,
+     2763, 2763, 2763, 2763, 2763, 2763, 2763, 2430, 1588, 2430,
+
+     2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+     2763, 2763, 2763, 2763, 2754, 1588,  962, 1832, 1833, 1832,
+     1832,  962,  962, 1834,  962, 1832,  962,  962, 1835, 1836,
+     1832, 1837, 2104, 1838, 1832,  962,  962, 1832,  962, 1834,
+     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1832,  962, 1832,
+     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834,
+     1834, 1834, 1834, 1834,  962,  962, 1588, 2430, 2768, 2430,
+     2430, 1588, 1588, 2755, 1588, 2430, 1588, 1588, 2769, 2758,
+     2430, 2759, 2770, 2761, 2430, 1588, 1588, 2430, 1588, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2430, 1588, 2430,
+
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 1588, 1588, 1080, 1846, 2113, 1846,
+     1846, 1080, 1080, 2431, 1080, 1846, 1080, 1080, 2068, 2115,
+     1846, 2116, 2117, 2432, 1846, 1080, 1080, 1846, 1080, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 1846, 1080, 1846,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 1080, 1080, 2441, 1975, 2771, 4369,
+     5143, 1673, 5143, 1891, 2772, 2772, 2772, 2772, 1976, 1082,
+     4370, 3285, 2485, 2984, 2488, 2772, 2772, 2772, 2772, 2772,
+     2260, 2772, 5143, 2261, 5143, 5143, 5143, 5143, 2772,  248,
+
+      610,  610,  610,  610,  248,  248,  729,  248,  610,  248,
+      248,  605,  730,  610,  731,  732,  733,  610,  248,  248,
+      610,  248,  729,  729,  729,  729,  729,  729,  729,  729,
+      610,  248,  610,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  248,  248, 1485,
+     2713, 2773, 2713, 2713, 1485, 1485, 2774, 1485, 2713, 1485,
+     1485, 2709, 2775, 2713, 2776, 2117, 2777, 2713, 1485, 1485,
+     2713, 1485, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
+     2713, 1485, 2713, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
+     2774, 2774, 2774, 2774, 2774, 2774, 2774, 1485, 1485, 2114,
+
+      344, 1673, 2897, 5143, 5143, 5143, 5143, 5143, 5143, 2118,
+     5143, 4384, 2485, 3559, 4385, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 5143, 5143, 5143, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+      257,  951,  898,  951,  951,  257,  952,  257,  257,  257,
+      257,  951,  951,  644,  257,  257, 2778,  257,  952,  257,
+      257,  257,  257,  952,  952,  952,  952,  952,  952,  952,
+      952,  257,  257,  257,  952,  952,  952,  952,  952,  952,
+      952,  952,  952,  952,  952,  952,  952,  952,  952,  257,
+     2441, 4387, 2442, 1380, 5143, 3660, 5143, 3660, 2443, 2443,
+
+     2443, 2443, 4388, 3548, 4390, 4389, 4164, 4391, 4164, 2443,
+     2443, 2443, 2443, 2443, 4097, 2443, 5143, 4392, 5143, 5143,
+     5143, 5143, 2443,  561,  812,  812,  812,  812,  561,  561,
+      813,  561,  561,  561,  561,  561,  562,  561,  561,  984,
+      561,  561,  561,  561,  561,  561,  813,  813,  813,  813,
+      813,  813,  813,  813,  561,  561,  561,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  985,  561, 1406, 2782, 2453, 2782, 2782, 1406, 1406,
+     2783, 1406, 1406, 1406, 1406, 1406, 1407, 1406, 1406, 2784,
+     2783, 1406, 1406, 1406, 1406, 1406, 2783, 2783, 2783, 2783,
+
+     2783, 2783, 2783, 2783, 1406, 1406, 1406, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2785, 1406,  260, 1408, 1408, 1408, 1408,  260,  260,
+      565,  260,  260,  260,  260,  260,  261,  260,  260, 1632,
+      260,  260,  260,  260,  260,  260,  565,  565,  565,  565,
+      565,  565,  565,  565,  260,  260,  260,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565, 1633,  260, 1409, 2791, 2792, 2791, 2791, 1409, 1409,
+     2793, 1409, 1409, 1409, 1409, 1409, 1410, 1409, 1409, 2794,
+     2793, 1409, 1409, 1409, 1409, 1409, 2793, 2793, 2793, 2793,
+
+     2793, 2793, 2793, 2793, 1409, 1409, 1409, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2795, 1409, 1178, 2457, 2458, 2457, 2457, 1178, 1178,
+     2459, 1178, 1178, 1178, 1178, 1178, 1179, 1178, 1178, 2460,
+     2459, 1178, 1178, 1178, 1178, 1178, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 1178, 1178, 1178, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2461, 1178,  187, 1177, 1177, 1177, 1177,  187,  187,
+      316,  187,  187,  187,  187,  187,  188,  187,  187, 1183,
+      187,  187,  187,  187,  187,  187,  316,  316,  316,  316,
+
+      316,  316,  316,  316,  187,  187,  187,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316, 1184,  187, 1420, 2805, 2806, 2805, 2805, 1420, 1420,
+     2807, 1420, 1420, 1420, 1420, 1420, 1421, 1420, 1420, 2808,
+     2807, 1420, 1420, 1420, 1420, 1420, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 1420, 1420, 1420, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2809, 1420, 1194, 1883, 2152, 1883, 1883, 1194, 1194,
+     2478, 1194, 1194, 1194, 1883, 1883, 1195, 1194, 1194, 2154,
+     2479, 1883, 1194, 1194, 1194, 1194, 2478, 2478, 2478, 2478,
+
+     2478, 2478, 2478, 2478, 1194, 1194, 1194, 2478, 2478, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2155, 1194, 1196, 1891, 1891, 1891, 1891, 1196, 1196,
+     2482, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1895,
+     2483, 1891, 1196, 1196, 1196, 1196, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 1196, 1196, 1196, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 1893, 1196,  424, 2486, 2486, 2486, 2486,  424,  424,
+     2817,  424,  424,  424,  680,  680,  425,  424,  424, 2818,
+      424,  680,  424,  424,  424,  424, 2817, 2817, 2817, 2817,
+
+     2817, 2817, 2817, 2817,  424,  424,  424, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817,  832,  424, 1196, 1435, 1435, 1435, 1435, 1196, 1196,
+     1674, 1196, 1196, 1196, 1196, 1196, 1197, 1196, 1196, 1675,
+     1196, 1196, 1196, 1196, 1196, 1196, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1196, 1196, 1196, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1196, 1196,  326, 2492, 2826, 2492, 2492,  326,  326,
+     2827,  326,  326,  326, 1446, 1446,  326,  326,  326, 2828,
+      326, 1446,  326,  326,  326,  326, 2827, 2827, 2827, 2827,
+
+     2827, 2827, 2827, 2827,  326,  326,  326, 2827, 2827, 2827,
+     2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+     2827, 1450,  326, 1680, 2493, 2486, 2493, 2493, 1680, 1680,
+     2829, 1680, 1680, 1680, 2493, 2493, 1681, 1680, 1680, 2830,
+     1680, 2493, 1680, 1680, 1680, 1680, 2829, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 1680, 1680, 1680, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2831, 1680, 1017, 2170, 2171, 2170, 2170, 1017, 1017,
+     2834, 1017, 1017, 1017, 2170, 2170, 1018, 1017, 1017, 2173,
+     2835, 2170, 1017, 1017, 1017, 1017, 2834, 2834, 2834, 2834,
+
+     2834, 2834, 2834, 2834, 1017, 1017, 1017, 2834, 2834, 2834,
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2834, 2175, 1017, 2497, 1817,  812, 1673, 5143, 5143, 5143,
+     5143, 5143, 5143, 2498, 5143, 4404, 1407, 2485, 4405, 2497,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497, 5143, 5143, 5143,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+     2497, 2497, 2497, 2497,  838, 1910, 1904, 1910, 1910,  838,
+      838, 2503,  838,  838,  838, 1910, 1910,  839,  838,  838,
+     1912, 2504, 1910,  838,  838,  838,  838, 2503, 2503, 2503,
+     2503, 2503, 2503, 2503, 2503,  838,  838,  838, 2503, 2503,
+
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+     2503, 2503, 1914,  838, 1680, 2508, 2847, 2508, 2508, 1680,
+     1680, 2848, 1680, 1680, 1680, 1680, 1680, 1681, 1680, 1680,
+     2849, 1680, 1680, 1680, 1680, 1680, 1680, 2848, 2848, 2848,
+     2848, 2848, 2848, 2848, 2848, 1680, 1680, 1680, 2848, 2848,
+     2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
+     2848, 2848, 1680, 1680,  599,  854,  854,  854,  854,  599,
+     1038,  855,  599,  856,  599, 1039, 1040,  858,  856,  859,
+     1041,  861, 1042,  599,  599,  856,  599, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043,  856,  599,  856, 1043, 1043,
+
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1038,  599, 1458, 2850, 2203, 2850, 2850, 1458,
+     1458, 2851, 1458, 2512, 1458, 1458, 2852, 2515, 2512, 2516,
+     2853, 2854, 2855, 1458, 1458, 2512, 1458, 2851, 2851, 2851,
+     2851, 2851, 2851, 2851, 2851, 2512, 1458, 2512, 2851, 2851,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+     2851, 2851, 1458, 1458, 2511, 1082, 3660, 1082, 5143, 5143,
+     5143, 5143, 5143, 5143, 2518, 5143, 2260, 4164, 1505, 2261,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 5143, 5143,
+     5143, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+
+     2511, 2511, 2511, 2511, 2511, 1458, 2513, 2532, 2513, 2513,
+     1458, 2510, 1458, 1458, 1458, 1458, 2513, 2513, 1459, 1458,
+     1458, 2856, 1458, 2510, 1458, 1458, 1458, 1458, 2510, 2510,
+     2510, 2510, 2510, 2510, 2510, 2510, 1458, 1458, 1458, 2510,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510,
+     2510, 2510, 2510, 2510, 1458, 1697, 2857, 2858, 2857, 2857,
+     1697, 1697, 2859, 1697, 2860, 1697, 1697, 2861, 2862, 2860,
+     2863, 2864, 2865, 2866, 1697, 1697, 2860, 1697, 2859, 2859,
+     2859, 2859, 2859, 2859, 2859, 2859, 2860, 1697, 2860, 2859,
+     2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859,
+
+     2859, 2859, 2859, 1697, 1697, 2869, 1380, 2870,  114, 5143,
+     3660, 5143, 2897, 2871, 2871, 2871, 2871, 4390,  345, 3319,
+     4391, 4164, 3320, 3559, 2871, 2871, 2871, 2871, 2871, 2351,
+     2871, 5143, 2352, 5143, 5143, 5143, 5143, 2871, 1458, 2855,
+     2573, 2855, 2855, 1458, 1458, 2872, 1458, 2855, 1458, 1458,
+     2852, 2873, 2855, 2874, 2875, 2876, 2855, 1458, 1458, 2855,
+     1458, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2855,
+     1458, 2855, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 1458, 1458, 1093, 1744,
+     1713, 1744, 1744, 1093, 1093, 2184, 1093, 1927, 1093, 1093,
+
+     1989, 1927, 1927, 2189, 1990, 2521, 1991, 1093, 1093, 1927,
+     1093, 2522, 2522, 2522, 2522, 2184, 2184, 2184, 2184, 1927,
+     1093, 1927, 2522, 2522, 2522, 2522, 2522, 2184, 2522, 2184,
+     2184, 2184, 2184, 2184, 2184, 2522, 1093, 1093, 1093, 1991,
+     1962, 1991, 1991, 1093, 1093, 2525, 1093, 1991, 1093, 1093,
+     1989, 1991, 1991, 2193, 2194, 2526, 1991, 1093, 1093, 1991,
+     1093, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1991,
+     1093, 1991, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 1093, 1093, 2529, 5143,
+     2877, 5143, 5143, 1460, 5143, 1478, 2878, 2878, 2878, 2878,
+
+     2805, 2806, 2805, 2805, 1727, 1380, 2229, 2878, 2878, 2878,
+     2878, 2878, 1421, 2878, 1817, 2808, 4430, 5143, 1147, 4431,
+     2878, 2192,  336,  862, 2897, 4440, 5143, 5143, 4441, 3407,
+     5143, 2530, 3408, 4453, 1480, 3559, 4454, 2531, 2531, 2531,
+     2531, 2192, 2192, 2192, 2192, 5143, 5143, 2809, 2531, 2531,
+     2531, 2531, 2531, 2192, 2531, 2192, 2192, 2192, 2192, 2192,
+     2192, 2531, 1461, 2238,  854, 2238, 2238, 1461, 1461, 2879,
+     1461, 2535, 1461, 1461, 2590, 2538, 2535, 2539, 2591, 2880,
+     2592, 1461, 1461, 2535, 1461, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2535, 1461, 2535, 2879, 2879, 2879, 2879,
+
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     1461, 1461, 2534, 1147, 2897, 1478, 5143, 5143, 5143, 5143,
+     5143, 5143, 2541, 5143, 3407, 3559, 2229, 3408, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 5143, 5143, 5143, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 1461, 2536, 2881, 2536, 2536, 1461, 2533,
+     1461, 1461, 1461, 1461, 2536, 2536, 1462, 1461, 1461, 2882,
+     1461, 2533, 1461, 1461, 1461, 1461, 2533, 2533, 2533, 2533,
+     2533, 2533, 2533, 2533, 1461, 1461, 1461, 2533, 2533, 2533,
+     2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533,
+
+     2533, 2533, 1461, 1705, 2883, 1698, 2883, 2883, 1705, 1705,
+     2884, 1705, 2885, 1705, 1705, 2886, 2887, 2885, 2888, 2889,
+     2890, 2891, 1705, 1705, 2885, 1705, 2884, 2884, 2884, 2884,
+     2884, 2884, 2884, 2884, 2885, 1705, 2885, 2884, 2884, 2884,
+     2884, 2884, 2884, 2884, 2884, 2884, 2884, 2884, 2884, 2884,
+     2884, 1705, 1705, 2894, 4463, 2895, 4468, 5143, 1904, 5143,
+     1460, 2896, 2896, 2896, 2896, 4464, 1817, 4469, 2756, 2502,
+     2764, 1727, 2896, 2896, 2896, 2896, 2896, 4470, 2896, 5143,
+     4471, 5143, 5143, 5143, 5143, 2896, 1461, 2592, 2897, 2592,
+     2592, 1461, 1461, 2898, 1461, 2592, 1461, 1461, 2590, 2899,
+
+     2592, 2900, 2901, 2902, 2592, 1461, 1461, 2592, 1461, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2592, 1461, 2592,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 1461, 1461, 1234, 2007, 2294, 2007,
+     2007, 1234, 1234, 2547, 1234, 2206, 1234, 1234, 2295, 2209,
+     2206, 2210, 2296, 2548, 2297, 1234, 1234, 2206, 1234, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2206, 1234, 2206,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 1234, 1234, 2560, 5143, 2906, 5143,
+     5143, 3660, 5143, 1673, 2907, 2907, 2907, 2907, 3127, 3468,
+
+     3127, 3127, 4164, 1380, 2485, 2907, 2907, 2907, 2907, 2907,
+     2131, 2907, 3465, 3469, 2765, 5143, 2803, 2766, 2907, 2205,
+      812, 3660, 5143, 3466, 5143, 5143, 3467, 2804, 5143, 2212,
+     3471, 4472, 4164, 5143, 4473, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 5143, 5143, 3470, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+      599,  712,  712,  712,  712,  599,  599,  855,  599,  856,
+      599,  599,  857,  858,  856,  859,  860,  861,  862,  599,
+      599,  856,  599,  855,  855,  855,  855,  855,  855,  855,
+      855,  856,  599,  856,  855,  855,  855,  855,  855,  855,
+
+      855,  855,  855,  855,  855,  855,  855,  855,  599,  599,
+     1234, 2207,  854, 2207, 2207, 1234, 2204, 1234, 1234, 1234,
+     1234, 2207, 2207, 1235, 1234, 1234, 2549, 1234, 2204, 1234,
+     1234, 1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 1234, 1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 1234,
+     1711, 2910, 2911, 2910, 2910, 1711, 1711, 2912, 1711, 2913,
+     1711, 1711, 2914, 2915, 2913, 2916, 2296, 2917, 2918, 1711,
+     1711, 2913, 1711, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+     2912, 2913, 1711, 2913, 2912, 2912, 2912, 2912, 2912, 2912,
+
+     2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 1711, 1711,
+      215, 1468, 1713, 1468, 1468,  215,  750,  620,  215,  621,
+      215,  749, 1714, 1305,  621,  623, 2919,  625, 1716,  215,
+      215,  621,  215, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717,  621,  215,  621, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,  750,  215,
+     2560, 3465, 2561, 4475, 5143, 5143, 5143, 5143, 2562, 2562,
+     2562, 2562, 3466, 4019, 4476, 3480, 5143, 4477, 5143, 2562,
+     2562, 2562, 2562, 2562, 4020, 2562, 5143, 4482, 5143, 5143,
+     5143, 5143, 2562, 1234, 2297, 2563, 2297, 2297, 1234, 1234,
+
+     2564, 1234, 2297, 1234, 1234, 2295, 2565, 2297, 2566, 2567,
+     2568, 2297, 1234, 1234, 2297, 1234, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2297, 1234, 2297, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 1234, 1234, 2920, 4491, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2921, 5143, 4492, 5143, 5143, 4493, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920, 2920, 5143, 5143, 5143,
+     2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+     2920, 2920, 2920, 2920, 1466, 2559, 2922, 2559, 2559, 1466,
+     1466, 2923, 1466, 2559, 1466, 1466, 2554, 2924, 2559, 2925,
+
+     2926, 2927, 2559, 1466, 1466, 2559, 1466, 2923, 2923, 2923,
+     2923, 2923, 2923, 2923, 2923, 2559, 1466, 2559, 2923, 2923,
+     2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923,
+     2923, 2923, 1466, 1466, 2930,  502, 2931, 3521, 5143, 5143,
+     5143, 5143, 2932, 2932, 2932, 2932, 4494,  709, 3522, 4495,
+     5143, 3523, 5143, 2932, 2932, 2932, 2932, 2932, 2523, 2932,
+     5143, 2524, 5143, 5143, 5143, 5143, 2932,  599,  862,  862,
+      862,  862,  599,  599, 1061,  599,  862,  599,  599,  857,
+     2933,  862, 1063, 2934, 1065,  862,  599,  599,  862,  599,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,  599,
+
+      862, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061,  599,  599, 1479, 2362, 2563,
+     2362, 2362, 1479, 1479, 2939, 1479, 2576, 1479, 1479, 2701,
+     2579, 2576, 2580, 2702, 2940, 2703, 1479, 1479, 2576, 1479,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2576, 1479,
+     2576, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 1479, 1479, 2575, 3525, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 2582, 5143, 3526,
+     5143, 5143, 3527, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 5143, 5143, 5143, 2575, 2575, 2575, 2575, 2575, 2575,
+
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 1479, 2577,
+     2897, 2577, 2577, 1479, 2574, 1479, 1479, 1479, 1479, 2577,
+     2577, 1480, 1479, 1479, 2941, 1479, 2574, 1479, 1479, 1479,
+     1479, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 1479,
+     1479, 1479, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 1479, 1723, 2942,
+     2922, 2942, 2942, 1723, 1723, 2943, 1723, 2944, 1723, 1723,
+     2945, 2946, 2944, 2947, 2948, 2949, 2950, 1723, 1723, 2944,
+     1723, 2943, 2943, 2943, 2943, 2943, 2943, 2943, 2943, 2944,
+     1723, 2944, 2943, 2943, 2943, 2943, 2943, 2943, 2943, 2943,
+
+     2943, 2943, 2943, 2943, 2943, 2943, 1723, 1723, 2951, 4506,
+     2952, 1082, 5143, 5143, 5143, 5143, 2953, 2953, 2953, 2953,
+     4507,  709, 4030, 3818, 5143, 4031, 5143, 2953, 2953, 2953,
+     2953, 2953, 2527, 2953, 5143, 2528, 5143, 5143, 5143, 5143,
+     2953, 1479, 2703, 2954, 2703, 2703, 1479, 1479, 2955, 1479,
+     2703, 1479, 1479, 2701, 2956, 2703, 2957, 2958, 2959, 2703,
+     1479, 1479, 2703, 1479, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2703, 1479, 2703, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 1479,
+     1479, 1726, 2585, 2960, 2585, 2585, 1726, 2961, 1726, 1726,
+
+     1726, 1726, 2585, 2585, 1727, 1726, 1726, 2962, 1726, 2961,
+     1726, 1726, 1726, 1726, 2961, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 1726, 1726, 1726, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     1726,  248, 1817, 1817, 1817, 1817,  248,  377,  729,  248,
+      610,  248,  336, 1701,  730,  610,  731, 2086,  733, 1703,
+      248,  248,  610,  248, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087,  610,  248,  610, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,  377,
+      248,  512, 1738, 1460, 1738, 1738,  512,  512, 2239,  512,
+
+     1978,  512,  512, 1979, 1980, 1978, 2252, 1982, 2593, 1984,
+      512,  512, 1978,  512, 2594, 2594, 2594, 2594, 2239, 2239,
+     2239, 2239, 1978,  512, 1978, 2594, 2594, 2594, 2594, 2594,
+     2239, 2594, 2239, 2239, 2239, 2239, 2239, 2239, 2594,  512,
+      512, 1977, 3539, 5143, 5143, 5143, 5143, 5143, 5143, 1981,
+     5143, 1983, 5143, 3540, 5143, 5143, 3541, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 5143, 5143, 5143, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1981, 2970, 2240, 1082, 5143, 5143, 5143, 5143,
+     2239, 2239, 2239, 2239, 2971, 3548, 4030, 3542, 5143, 4031,
+
+     5143, 2239, 2239, 2239, 2239, 2239, 4097, 2239, 5143, 4342,
+     5143, 5143, 5143, 5143, 2239,  512,  847, 1033,  847,  847,
+      512, 1034,  512,  512,  512,  512,  847,  847,  513,  512,
+      512, 1035,  512, 1034,  512,  512,  512,  512, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034,  512,  512,  512, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034,  512,  701, 2595, 2232, 2595, 2595,
+      701,  701, 2596,  701, 2597,  701,  701, 2598, 2599, 2597,
+     2600, 2968, 2601, 2602,  701,  701, 2597,  701, 2596, 2596,
+     2596, 2596, 2596, 2596, 2596, 2596, 2597,  701, 2597, 2596,
+
+     2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596,
+     2596, 2596, 2596,  701,  701, 2252, 3555, 2253,  712, 5143,
+     5143, 5143, 5143, 2254, 2254, 2254, 2254, 3556,  535, 2674,
+     3557, 5143, 2675, 5143, 2254, 2254, 2254, 2254, 2254, 2935,
+     2254, 5143, 2936, 5143, 5143, 5143, 5143, 2254,  512, 1984,
+     1817, 1984, 1984,  512,  512, 2255,  512, 1984,  512,  512,
+     1979, 2256, 1984, 2257, 2258, 2259, 1984,  512,  512, 1984,
+      512, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 1984,
+      512, 1984, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+     2255, 2255, 2255, 2255, 2255, 2255,  512,  512,  599, 1039,
+
+     1039, 1039, 1039,  599, 1038,  599,  599,  599,  599, 1039,
+     1039,  600,  599,  599, 1046,  599, 1038,  599,  599,  599,
+      599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,
+      599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038,  599, 2607, 4531,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2608, 5143,
+     4532, 5143, 5143, 3818, 2607, 2607, 2607, 2607, 2607, 2607,
+     2607, 2607, 5143, 5143, 5143, 2607, 2607, 2607, 2607, 2607,
+     2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2616,
+     3062, 2972,  308, 5143, 5143, 5143, 5143, 2973, 2973, 2973,
+
+     2973, 3063, 2223, 2545, 3582, 5143, 2546, 5143, 2973, 2973,
+     2973, 2973, 2973, 3593, 2973, 5143, 3594, 5143, 5143, 5143,
+     5143, 2973,  701, 2602, 2587, 2602, 2602,  701,  701, 2974,
+      701, 2602,  701,  701, 2598, 2975, 2602, 2976, 2258, 2977,
+     2602,  701,  701, 2602,  701, 2974, 2974, 2974, 2974, 2974,
+     2974, 2974, 2974, 2602,  701, 2602, 2974, 2974, 2974, 2974,
+     2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974,
+      701,  701,  250,  598,  704,  598,  598,  250,  705,  250,
+      250,  250,  250,  598,  598, 1098,  250,  250, 2978,  250,
+      705,  250,  250,  250,  250,  705,  705,  705,  705,  705,
+
+      705,  705,  705,  250,  250,  250,  705,  705,  705,  705,
+      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      705,  250, 2616, 3525, 2617,  961, 5143, 5143, 5143, 5143,
+     2618, 2618, 2618, 2618, 3526, 4551, 4548, 3605, 5143, 4549,
+     5143, 2618, 2618, 2618, 2618, 2618, 4552, 2618, 5143, 4553,
+     5143, 5143, 5143, 5143, 2618,  213, 1082, 1082, 1082, 1082,
+      213,  382,  337,  213,  338,  213,  381, 1256,  340,  338,
+      341, 1257,  343, 1258,  213,  213,  338,  213, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259,  338,  213,  338, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+
+     1259, 1259, 1259,  382,  213, 1504, 2262, 2619, 2262, 2262,
+     1504, 1504, 2982, 1504, 2621, 1504, 1504, 2622, 2623, 2621,
+     2624, 2625, 2983, 2627, 1504, 1504, 2621, 1504, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2621, 1504, 2621, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 1504, 1504, 2620, 4555, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 2626, 5143, 4556, 5143, 5143,
+     4163, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 5143,
+     5143, 5143, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 1504, 2984, 2985, 2984,
+
+     2984, 1504, 2986, 1504, 1504, 1504, 1504, 2984, 2984, 1505,
+     1504, 1504, 2987, 1504, 2986, 1504, 1504, 1504, 1504, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 1504, 1504, 1504,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 1504, 1742, 2988, 2989, 2988,
+     2988, 1742, 1742, 2990, 1742, 2991, 1742, 1742, 2992, 2993,
+     2991, 2994, 2995, 2996, 2997, 1742, 1742, 2991, 1742, 2990,
+     2990, 2990, 2990, 2990, 2990, 2990, 2990, 2991, 1742, 2991,
+     2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2990,
+     2990, 2990, 2990, 2990, 1742, 1742, 2998, 3624, 2999, 4576,
+
+     5143, 5143, 5143, 5143, 3000, 3000, 3000, 3000, 4560, 1281,
+     4577, 3031, 5143, 3343, 5143, 3000, 3000, 3000, 3000, 3000,
+     2652, 3000, 5143, 2653, 5143, 5143, 5143, 5143, 3000, 1504,
+     2627, 3001, 2627, 2627, 1504, 1504, 3002, 1504, 2627, 1504,
+     1504, 2622, 3003, 2627, 3004, 3005, 3006, 2627, 1504, 1504,
+     2627, 1504, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     2627, 1504, 2627, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 1504, 1504,  784,
+     1994, 1994, 1994, 1994,  784,  784, 2628,  784, 2264,  784,
+      784, 1149, 2265, 2264, 2266, 2267, 2629,  961,  784,  784,
+
+     2264,  784, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2264,  784, 2264, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628,  784,  784, 2639,
+     5143, 3007, 5143, 5143, 5143, 5143, 5143, 3008, 3008, 3008,
+     3008,  986,  986,  986,  986, 5143,  516, 5143, 3008, 3008,
+     3008, 3008, 3008,  562, 3008,  535,  988, 4598, 5143, 4605,
+     4599, 3008, 2263, 4616, 5143, 5143, 4602, 5143, 5143, 4603,
+     4606, 5143, 2268, 3071, 4617, 5143, 5143, 3072, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 5143, 5143,  989, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+
+     2263, 2263, 2263,  959, 3009, 3009, 3009, 3009,  959,  959,
+     3010,  959, 3011,  959,  959, 1583, 3012, 3011, 3013, 2267,
+     3014, 1581,  959,  959, 3011,  959, 3010, 3010, 3010, 3010,
+     3010, 3010, 3010, 3010, 3011,  959, 3011, 3010, 3010, 3010,
+     3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
+     3010,  959,  959,  898,  898,  898,  898, 5143,  169,  176,
+     4621,  121, 5143,  168,  850,  942,  121,  177, 3015,  179,
+      852, 4622, 5143,  121, 3085, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095,  121, 5143,  121, 1095, 1095, 1095, 1095,
+     1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
+
+      169, 2639, 3123, 2640,  345, 5143, 5143, 5143, 5143, 2641,
+     2641, 2641, 2641, 3124, 2423, 3094, 3713, 5143, 3095, 5143,
+     2641, 2641, 2641, 2641, 2641, 2424, 2641, 5143, 3715, 5143,
+     5143, 5143, 5143, 2641,  517,  890, 1082,  890,  890,  517,
+      517, 1083,  517, 1084,  517,  517, 1085, 1086, 1084, 1087,
+     1088, 1089, 1090,  517,  517, 1084,  517, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1084,  517, 1084, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083,  517,  517, 1260, 4627, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 1261, 5143, 4628, 5143, 5143, 3447,
+
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 5143, 5143,
+     5143, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260,  517, 1262, 1263, 1262, 1262,
+      517, 1264,  517,  517,  517,  517, 1262, 1262,  518,  517,
+      517, 1265,  517, 1264,  517,  517,  517,  517, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264,  517,  517,  517, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264,  517,  734, 1493, 1494, 1493, 1493,
+      734,  734, 1495,  734, 1496,  734,  734, 1497, 1498, 1496,
+     1499, 3020, 1500, 1501,  734,  734, 1496,  734, 1495, 1495,
+
+     1495, 1495, 1495, 1495, 1495, 1495, 1496,  734, 1496, 1495,
+     1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495,
+     1495, 1495, 1495,  734,  734,  641, 1759, 1478, 1759, 1759,
+      641,  641, 1996,  641, 1997,  641,  641, 1382, 3021, 1997,
+     1999, 3022, 2001, 1154,  641,  641, 1997,  641, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1997,  641, 1997, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996,  641,  641, 1278, 3745, 1279, 3137, 5143,
+     5143, 5143, 5143, 1280, 1280, 1280, 1280, 3746, 2486, 3138,
+     4629, 5143, 3754, 5143, 1280, 1280, 1280, 1280, 1280, 4635,
+
+     1280, 5143, 4636, 5143, 5143, 5143, 5143, 1280,  517, 1090,
+     1281, 1090, 1090,  517,  517, 1282,  517, 1090,  517,  517,
+     1085, 1283, 1090, 1284, 1285, 1286, 1090,  517,  517, 1090,
+      517, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1090,
+      517, 1090, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282,  517,  517,  641, 1759,
+     1478, 1759, 1759,  641,  641, 2271,  641, 1997,  641,  641,
+     1382, 1998, 1997, 2283, 2000, 2654, 1154,  641,  641, 1997,
+      641, 2655, 2655, 2655, 2655, 2271, 2271, 2271, 2271, 1997,
+      641, 1997, 2655, 2655, 2655, 2655, 2655, 2271, 2655, 2271,
+
+     2271, 2271, 2271, 2271, 2271, 2655,  641,  641,  255, 1478,
+     1478, 1478, 1478,  255,  469,  628,  255,  629,  255,  468,
+     1590,  630,  629,  631, 1721,  633, 1592,  255,  255,  629,
+      255, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,  629,
+      255,  629, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722,  469,  255, 1999, 1016,
+     2272,  681, 5143, 5143, 5143, 5143, 2271, 2271, 2271, 2271,
+     4639, 4644, 4641, 4640, 5143, 4642, 5143, 2271, 2271, 2271,
+     2271, 2271, 4645, 2271, 5143, 4021, 5143, 5143, 5143, 5143,
+     2271,  962, 2656, 2657, 2656, 2656,  962,  962, 2658,  962,
+
+     2659,  962,  962, 1835, 2660, 2659, 2661, 3023, 2662, 1832,
+      962,  962, 2659,  962, 2658, 2658, 2658, 2658, 2658, 2658,
+     2658, 2658, 2659,  962, 2659, 2658, 2658, 2658, 2658, 2658,
+     2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,  962,
+      962, 1998, 5143, 2283, 2000, 2284, 4649,  709, 5143, 5143,
+     5143, 2285, 2285, 2285, 2285, 5143, 4654, 4650, 2523, 5143,
+     3169, 2524, 2285, 2285, 2285, 2285, 2285, 4655, 2285, 5143,
+     3885, 5143, 5143, 5143, 5143, 2285,  213,  381,  381,  381,
+      381,  213,  382,  213,  213,  213,  213,  381,  381,  214,
+      213,  213,  383,  213,  382,  213,  213,  213,  213,  382,
+
+      382,  382,  382,  382,  382,  382,  382,  213,  213,  213,
+      382,  382,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  382,  213, 1760, 2668, 3001, 2668,
+     2668, 1760, 1760, 3024, 1760, 3025, 1760, 1760, 3026, 3027,
+     3025, 3028, 3029, 3030, 3031, 1760, 1760, 3025, 1760, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3025, 1760, 3025,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 1760, 1760, 1291, 2006, 1962, 2006,
+     2006, 1291, 1291, 2669, 1291, 2289, 1291, 1291, 2290, 2289,
+     2289, 2291, 2292, 2670, 2109, 1291, 1291, 2289, 1291, 2669,
+
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2289, 1291, 2289,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 1291, 1291, 2671, 5143, 3032, 5143,
+     5143, 5143, 5143, 5143, 3033, 3033, 3033, 3033,  986,  986,
+      986,  986, 5143,  854, 5143, 3033, 3033, 3033, 3033, 3033,
+      562, 3033, 1478,  988, 3174, 5143,  854, 3175, 3033, 2288,
+     1478, 5143, 5143, 4079, 5143, 5143, 4080, 3174, 5143, 2672,
+     3175, 4079, 5143, 5143, 4080, 2673, 2673, 2673, 2673, 2288,
+     2288, 2288, 2288, 5143, 5143,  989, 2673, 2673, 2673, 2673,
+     2673, 2288, 2673, 2288, 2288, 2288, 2288, 2288, 2288, 2673,
+
+      876, 1483, 1460, 1483, 1483,  876, 1728,  876,  876,  876,
+      876, 1483, 1483, 2020,  876,  876, 3035,  876, 1728,  876,
+      876,  876,  876, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728,  876,  876,  876, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,  876,
+      599,  712,  712,  712,  712,  599,  599,  855,  599,  856,
+      599,  599,  857,  858,  856,  859,  860,  861,  862,  599,
+      599,  856,  599,  855,  855,  855,  855,  855,  855,  855,
+      855,  856,  599,  856,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  599,  599,
+
+      876, 1773, 2025, 1773, 1773,  876,  876, 2313,  876, 1773,
+      876,  876, 1768, 2027, 1773, 2323, 2029, 2680, 1773,  876,
+      876, 1773,  876, 2681, 2681, 2681, 2681, 2313, 2313, 2313,
+     2313, 1773,  876, 1773, 2681, 2681, 2681, 2681, 2681, 2313,
+     2681, 2313, 2313, 2313, 2313, 2313, 2313, 2681,  876,  876,
+      248,  516,  516,  516,  516,  248,  248,  603,  248,  604,
+      248,  248,  605,  606,  604,  607,  608,  609,  610,  248,
+      248,  604,  248,  603,  603,  603,  603,  603,  603,  603,
+      603,  604,  248,  604,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  248,  248,
+
+     2028, 2897, 2314,  712, 5143, 5143, 5143, 5143, 2313, 2313,
+     2313, 2313, 4337, 4555, 2928, 4338, 5143, 2929, 5143, 2313,
+     2313, 2313, 2313, 2313, 4556, 2313, 5143, 4698, 5143, 5143,
+     5143, 5143, 2313, 1249, 2308, 2682, 2308, 2308, 1249, 1249,
+     2683, 1249, 2308, 1249, 1249, 2304, 2684, 2308, 2685, 3036,
+     2686, 2308, 1249, 1249, 2308, 1249, 2683, 2683, 2683, 2683,
+     2683, 2683, 2683, 2683, 2308, 1249, 2308, 2683, 2683, 2683,
+     2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683, 2683,
+     2683, 1249, 1249, 2026, 1478, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2030, 5143, 3630, 5143, 5143, 3631, 2026,
+
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 5143, 5143, 5143,
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 2026, 2026, 2026, 2323,  712, 2324,  535, 5143, 5143,
+     5143, 5143, 2325, 2325, 2325, 2325, 2674, 1478, 2935, 2675,
+     5143, 2936, 5143, 2325, 2325, 2325, 2325, 2325, 3337, 2325,
+      862, 3338, 5143, 5143, 5143, 5143, 2325, 2266, 3889, 2268,
+     1952, 4708, 5143, 5143, 4709, 2263, 2263, 2263, 2263, 4713,
+     4555, 2065, 4714, 5143, 4714, 5143, 2263, 2263, 2263, 2263,
+     2263, 4556, 2263, 5143, 4721, 5143, 5143, 5143, 5143, 2263,
+      452,  911, 1121,  911,  911,  452,  452, 1122,  452,  911,
+
+      452,  452,  906, 3040,  911, 1124, 3041, 1126,  911,  452,
+      452,  911,  452, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122,  911,  452,  911, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,  452,  452,
+     1538, 3042, 3043, 3042, 3042, 1538, 1538, 3044, 1538, 3045,
+     1538, 1538, 3046, 3047, 3045, 3048, 2691, 3049, 3050, 1538,
+     1538, 3045, 1538, 3044, 3044, 3044, 3044, 3044, 3044, 3044,
+     3044, 3045, 1538, 3045, 3044, 3044, 3044, 3044, 3044, 3044,
+     3044, 3044, 3044, 3044, 3044, 3044, 3044, 3044, 1538, 1538,
+      946, 1547, 1792, 1547, 1547,  946,  946, 1793,  946, 1547,
+
+      946,  946, 1780, 3054, 1547, 1795, 3055, 1797, 1547,  946,
+      946, 1547,  946, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1547,  946, 1547, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,  946,  946,
+     1479, 2577, 2897, 2577, 2577, 1479, 2574, 1479, 1479, 1479,
+     1479, 2577, 2577, 1480, 1479, 1479, 2941, 1479, 2574, 1479,
+     1479, 1479, 1479, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 1479, 1479, 1479, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 1479,
+     1479, 2703, 2954, 2703, 2703, 1479, 1479, 2955, 1479, 2703,
+
+     1479, 1479, 2701, 2956, 2703, 2957, 2958, 2959, 2703, 1479,
+     1479, 2703, 1479, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2703, 1479, 2703, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 1479, 1479,
+     1080, 1801, 2025, 1801, 1801, 1080, 1080, 2363, 1080, 2067,
+     1080, 1080, 2068, 2069, 2067, 2376, 2071, 2704, 1846, 1080,
+     1080, 2067, 1080, 2705, 2705, 2705, 2705, 2363, 2363, 2363,
+     2363, 2067, 1080, 2067, 2705, 2705, 2705, 2705, 2705, 2363,
+     2705, 2363, 2363, 2363, 2363, 2363, 2363, 2705, 1080, 1080,
+     2066,  709, 5143, 5143, 5143, 5143, 5143, 5143, 2070, 5143,
+
+     2072, 5143, 4722, 5143, 5143, 4723, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 5143, 5143, 5143, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2070, 3898, 2364, 2897, 5143, 5143, 5143, 5143, 2363,
+     2363, 2363, 2363, 3921,  709, 4724, 3922, 5143, 4725, 5143,
+     2363, 2363, 2363, 2363, 2363, 2523, 2363, 5143, 2524, 5143,
+     5143, 5143, 5143, 2363, 1080, 1732, 1817, 1732, 1732, 1080,
+     1972, 1080, 1080, 1080, 1080, 1732, 1732, 1081, 1080, 1080,
+     1973, 1080, 1972, 1080, 1080, 1080, 1080, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1080, 1080, 1080, 1972, 1972,
+
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1080, 1485, 2706, 2682, 2706, 2706, 1485,
+     1485, 2707, 1485, 2708, 1485, 1485, 2709, 2710, 2708, 2711,
+     3060, 2712, 2713, 1485, 1485, 2708, 1485, 2707, 2707, 2707,
+     2707, 2707, 2707, 2707, 2707, 2708, 1485, 2708, 2707, 2707,
+     2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707,
+     2707, 2707, 1485, 1485, 2376, 4728, 2377,  709, 5143, 5143,
+     5143, 5143, 2378, 2378, 2378, 2378, 4729, 4735, 2527, 3909,
+     5143, 2528, 5143, 2378, 2378, 2378, 2378, 2378, 4736, 2378,
+     5143, 3372, 5143, 5143, 5143, 5143, 2378, 1080, 1846, 2113,
+
+     1846, 1846, 1080, 1080, 2114, 1080, 1846, 1080, 1080, 2068,
+     2115, 1846, 2116, 2117, 2118, 1846, 1080, 1080, 1846, 1080,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 1846, 1080,
+     1846, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 1080, 1080,  599,  862,  862,
+      862,  862,  599,  599, 1061,  599,  862,  599,  599,  857,
+     1062,  862, 1063, 1064, 1065,  862,  599,  599,  862,  599,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,  599,
+      862, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061,  599,  599,  536,  948, 1121,
+
+      948,  948,  536,  536, 1135,  536, 1136,  536,  536, 1137,
+     1138, 1136, 1139, 1140, 1141, 1142,  536,  536, 1136,  536,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136,  536,
+     1136, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135,  536,  536,  213,  308,  308,
+      308,  308,  213,  213,  337,  213,  338,  213,  213,  339,
+      340,  338,  341,  342,  343,  344,  213,  213,  338,  213,
+      337,  337,  337,  337,  337,  337,  337,  337,  338,  213,
+      338,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  213,  213, 1336, 1994, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1337, 5143, 3896,
+     5143, 5143, 3897, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 5143, 5143, 5143, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,  536, 1338,
+     1281, 1338, 1338,  536, 1339,  536,  536,  536,  536, 1338,
+     1338,  537,  536,  536, 1340,  536, 1339,  536,  536,  536,
+      536, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,  536,
+      536,  536, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339, 1339, 1339, 1339,  536,  776, 1552,
+     1528, 1552, 1552,  776,  776, 1553,  776, 1554,  776,  776,
+
+     1555, 1556, 1554, 1557, 3064, 1558, 1559,  776,  776, 1554,
+      776, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1554,
+      776, 1554, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553,
+     1553, 1553, 1553, 1553, 1553, 1553,  776,  776,  550, 1814,
+     1792, 1814, 1814,  550,  550, 2076,  550, 2077,  550,  550,
+     1157, 3065, 2077, 2079, 3066, 2081,  967,  550,  550, 2077,
+      550, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2077,
+      550, 2077, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076,  550,  550, 1350, 4746,
+     1351, 3958, 5143, 5143, 5143, 5143, 1352, 1352, 1352, 1352,
+
+     4747,  898, 3959, 3373, 5143, 3960, 5143, 1352, 1352, 1352,
+     1352, 1352, 2964, 1352, 5143, 2965, 5143, 5143, 5143, 5143,
+     1352,  536, 1142, 1353, 1142, 1142,  536,  536, 1354,  536,
+     1142,  536,  536, 1137, 1355, 1142, 1356, 1357, 1358, 1142,
+      536,  536, 1142,  536, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1142,  536, 1142, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,  536,
+      536,  550, 1814, 1792, 1814, 1814,  550,  550, 2381,  550,
+     2077,  550,  550, 1157, 2078, 2077, 2390, 2080, 2728,  967,
+      550,  550, 2077,  550, 2729, 2729, 2729, 2729, 2381, 2381,
+
+     2381, 2381, 2077,  550, 2077, 2729, 2729, 2729, 2729, 2729,
+     2381, 2729, 2381, 2381, 2381, 2381, 2381, 2381, 2729,  550,
+      550, 2079, 3962, 2382, 1380, 5143, 5143, 5143, 5143, 2381,
+     2381, 2381, 2381, 3963, 3289, 4430, 3964, 5143, 4431, 5143,
+     2381, 2381, 2381, 2381, 2381, 3290, 2381, 5143, 3966, 5143,
+     5143, 5143, 5143, 2381,  793, 2730, 2355, 2730, 2730,  793,
+      793, 2731,  793, 2732,  793,  793, 1620, 2733, 2732, 2734,
+     3067, 2735, 1617,  793,  793, 2732,  793, 2731, 2731, 2731,
+     2731, 2731, 2731, 2731, 2731, 2732,  793, 2732, 2731, 2731,
+     2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
+
+     2731, 2731,  793,  793, 2078, 5143, 2390, 2080, 2391, 1380,
+      961, 5143, 5143, 5143, 2392, 2392, 2392, 2392, 5143, 3962,
+     4430, 3119, 5143, 4431, 3120, 2392, 2392, 2392, 2392, 2392,
+     3963, 2392, 5143, 3978, 5143, 5143, 5143, 5143, 2392, 1815,
+     2738, 3068, 2738, 2738, 1815, 3069, 3070, 1815, 3071, 1815,
+     3072, 3073, 3074, 3071, 3075, 3076, 3077, 3078, 1815, 1815,
+     3071, 1815, 3079, 3079, 3079, 3079, 3079, 3079, 3079, 3079,
+     3071, 1815, 3071, 3079, 3079, 3079, 3079, 3079, 3079, 3079,
+     3079, 3079, 3079, 3079, 3079, 3079, 3079, 3069, 1815, 1291,
+     2109, 2096, 2109, 2109, 1291, 1291, 2739, 1291, 2109, 1291,
+
+     1291, 2290, 2109, 2109, 2400, 2429, 2740, 2109, 1291, 1291,
+     2109, 1291, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2109, 1291, 2109, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 1291, 1291, 2743,
+     2486, 3080, 4001, 5143, 5143, 5143, 5143, 3081, 3081, 3081,
+     3081, 4756,  680, 4002, 4757, 5143, 4252, 5143, 3081, 3081,
+     3081, 3081, 3081, 4758, 3081, 4761, 4759, 4764, 5143, 3137,
+     5143, 3081, 2398, 2486, 5143, 5143, 4762, 5143, 4765, 3499,
+     3138, 3502, 2744, 4766, 4769, 5143, 5143, 4770, 2745, 2745,
+     2745, 2745, 2398, 2398, 2398, 2398, 5143, 5143, 5143, 2745,
+
+     2745, 2745, 2745, 2745, 2398, 2745, 2398, 2398, 2398, 2398,
+     2398, 2398, 2745, 1818, 2748, 3082, 2748, 2748, 1818, 3083,
+     3084, 1818, 2764, 1818, 3085, 3086, 3087, 2764, 3088, 3089,
+     3090, 3091, 1818, 1818, 2764, 1818, 3092, 3092, 3092, 3092,
+     3092, 3092, 3092, 3092, 2764, 1818, 2764, 3092, 3092, 3092,
+     3092, 3092, 3092, 3092, 3092, 3092, 3092, 3092, 3092, 3092,
+     3092, 3083, 1818,  784,  961,  961,  961,  961,  784,  784,
+     1148,  784,  961,  784,  784, 1149, 2092,  961, 1151, 3093,
+     1153,  961,  784,  784,  961,  784, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148,  961,  784,  961, 1148, 1148, 1148,
+
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148,  784,  784,  784, 1147, 1147, 1147, 1147,  784, 1359,
+     1148,  784,  961,  784, 1360, 1361, 1150,  961, 1151, 1362,
+     1153, 1363,  784,  784,  961,  784, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364,  961,  784,  961, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1359,  784, 1588, 2430, 2768, 2430, 2430, 1588, 1588,
+     3096, 1588, 2430, 1588, 1588, 2769, 2758, 2430, 2759, 2770,
+     3097, 2430, 1588, 1588, 2430, 1588, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 2430, 1588, 2430, 3096, 3096, 3096,
+
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 1588, 1588, 1588, 2756, 1147, 2756, 2756, 1588, 2754,
+     1588, 1588, 1588, 1588, 2756, 2756, 1589, 1588, 1588, 3098,
+     1588, 2754, 1588, 1588, 1588, 1588, 2754, 2754, 2754, 2754,
+     2754, 2754, 2754, 2754, 1588, 1588, 1588, 2754, 2754, 2754,
+     2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 2754, 1588, 1823, 3099, 3100, 3099, 3099, 1823, 1823,
+     3101, 1823, 3099, 1823, 1823, 3102, 3103, 3099, 3104, 3105,
+     3106, 3099, 1823, 1823, 3099, 1823, 3101, 3101, 3101, 3101,
+     3101, 3101, 3101, 3101, 3099, 1823, 3099, 3101, 3101, 3101,
+
+     3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101, 3101,
+     3101, 1823, 1823, 2755, 2845, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2761, 5143, 2846, 5143, 5143, 4029, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 5143, 5143, 5143,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 3107, 1460, 3108, 4555, 5143, 5143,
+     5143, 5143, 3109, 3109, 3109, 3109, 3280,  854, 4556, 3281,
+     5143, 4772, 5143, 3109, 3109, 3109, 3109, 3109, 3199, 3109,
+     5143, 3200, 5143, 5143, 5143, 5143, 3109, 1818, 2764, 1147,
+     2764, 2764, 1818, 1818, 3084, 1818, 2764, 1818, 1818, 3110,
+
+     3087, 2764, 3088, 3111, 3090, 2764, 1818, 1818, 2764, 1818,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 2764, 1818,
+     2764, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 1818, 1818, 1841, 2767, 3112,
+     2767, 2767, 1841, 1841, 3113, 1841, 2767, 1841, 1841, 3114,
+     3115, 2767, 3116, 3117, 3118, 2767, 1841, 1841, 2767, 1841,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 2767, 1841,
+     2767, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 1841, 1841, 1080, 1846, 2113,
+     1846, 1846, 1080, 1080, 2431, 1080, 1846, 1080, 1080, 2068,
+
+     2115, 1846, 2441, 2117, 2771, 1846, 1080, 1080, 1846, 1080,
+     2772, 2772, 2772, 2772, 2431, 2431, 2431, 2431, 1846, 1080,
+     1846, 2772, 2772, 2772, 2772, 2772, 2431, 2772, 2431, 2431,
+     2431, 2431, 2431, 2431, 2772, 1080, 1080,  248,  610,  610,
+      610,  610,  248,  248,  729,  248,  610,  248,  248,  605,
+      730,  610,  731,  732,  733,  610,  248,  248,  610,  248,
+      729,  729,  729,  729,  729,  729,  729,  729,  610,  248,
+      610,  729,  729,  729,  729,  729,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  248,  248, 2116, 1478, 2432,
+      854, 5143, 5143, 5143, 5143, 2431, 2431, 2431, 2431, 3630,
+
+     2897, 3199, 3631, 5143, 3200, 5143, 2431, 2431, 2431, 2431,
+     2431, 4792, 2431, 5143, 4793, 5143, 5143, 5143, 5143, 2431,
+     1485, 2713, 2773, 2713, 2713, 1485, 1485, 2774, 1485, 2713,
+     1485, 1485, 2709, 2775, 2713, 2776, 3121, 2777, 2713, 1485,
+     1485, 2713, 1485, 2774, 2774, 2774, 2774, 2774, 2774, 2774,
+     2774, 2713, 1485, 2713, 2774, 2774, 2774, 2774, 2774, 2774,
+     2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 1485, 1485,
+     2114, 2897, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2118, 5143, 4811, 5143, 5143, 4812, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 5143, 5143, 5143, 2114, 2114, 2114,
+
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2441,  712, 2442, 1082, 5143, 5143, 5143, 5143, 2443,
+     2443, 2443, 2443, 2928, 4155, 3313, 2929, 5143, 3314, 5143,
+     2443, 2443, 2443, 2443, 2443, 4833, 2443, 5143, 4834, 5143,
+     5143, 5143, 5143, 2443, 1406, 2782, 2453, 2782, 2782, 1406,
+     1406, 2783, 1406, 1406, 1406, 1406, 1406, 1407, 1406, 1406,
+     2784, 2783, 1406, 1406, 1406, 1406, 1406, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 1406, 1406, 1406, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2785, 1406,  260, 1408, 1408, 1408, 1408,  260,
+
+      260,  565,  260,  260,  260,  260,  260,  261,  260,  260,
+     1632,  260,  260,  260,  260,  260,  260,  565,  565,  565,
+      565,  565,  565,  565,  565,  260,  260,  260,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565, 1633,  260, 1409, 2791, 2792, 2791, 2791, 1409,
+     1409, 2793, 1409, 1409, 1409, 1409, 1409, 1410, 1409, 1409,
+     2794, 2793, 1409, 1409, 1409, 1409, 1409, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 1409, 1409, 1409, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2795, 1409,  187, 1177, 1177, 1177, 1177,  187,
+
+      187,  316,  187,  187,  187,  187,  187,  188,  187,  187,
+     1183,  187,  187,  187,  187,  187,  187,  316,  316,  316,
+      316,  316,  316,  316,  316,  187,  187,  187,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316, 1184,  187, 1420, 2805, 2806, 2805, 2805, 1420,
+     1420, 2807, 1420, 1420, 1420, 1420, 1420, 1421, 1420, 1420,
+     2808, 2807, 1420, 1420, 1420, 1420, 1420, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 1420, 1420, 1420, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2809, 1420,  420, 2812, 2469, 2812, 2812,  420,
+
+      420,  825,  420,  420,  420,  420,  420,  421,  420,  420,
+     3134,  420,  420,  420,  420,  420,  420,  825,  825,  825,
+      825,  825,  825,  825,  825,  420,  420,  420,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825, 3135,  420, 1196, 1673, 1673, 1673, 1673, 1196,
+     1196, 1890, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196,
+     1892, 1196, 1891, 1196, 1196, 1196, 1196, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1196, 1196, 1196, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1893, 1196, 1909, 2816, 3139, 2816, 2816, 1909,
+
+     1909, 3140, 1909, 1909, 1909, 3141, 3141, 1909, 1909, 1909,
+     3142, 1909, 3141, 1909, 1909, 1909, 1909, 3140, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 1909, 1909, 1909, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3140, 3140, 3143, 1909,  424,  680,  680,  680,  680,  424,
+      424, 1676,  424,  424,  424,  680,  680,  425,  424,  424,
+      831, 1677,  680,  424,  424,  424,  424, 1676, 1676, 1676,
+     1676, 1676, 1676, 1676, 1676,  424,  424,  424, 1676, 1676,
+     1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+     1676, 1676,  832,  424, 1196, 1891, 1891, 1891, 1891, 1196,
+
+     1196, 2158, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196,
+     1895, 1196, 1891, 1196, 1196, 1196, 1196, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 1196, 1196, 1196, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 1893, 1196,  426, 2822, 3149, 2822, 2822,  426,
+      426, 3150,  426,  426,  426, 1429, 1429,  426,  426,  426,
+     3151,  426, 1429,  426,  426,  426,  426, 3150, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150,  426,  426,  426, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150,
+     3150, 3150, 1670,  426, 1196, 1435, 1435, 1435, 1435, 1196,
+
+     1196, 1674, 1196, 1196, 1196, 1196, 1196, 1197, 1196, 1196,
+     1675, 1196, 1196, 1196, 1196, 1196, 1196, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1196, 1196, 1196, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1196, 1196, 1432, 1432, 1432, 1432, 5143,  535,
+     5143, 4155, 5143,  961,  319,  319, 5143, 4168, 3548, 1672,
+     4602,  319, 4833, 4603, 4548, 4553, 1478, 4549, 4169, 4097,
+     3038, 4856, 4520, 5143, 3052, 1147, 1147, 3337, 5143, 5143,
+     3338, 3039, 5143, 5143, 4188, 3053, 3687, 3687, 4199, 3688,
+     3688,  323,  326, 1446, 1432, 1446, 1446,  326,  326, 1691,
+
+      326,  326,  326, 1446, 1446,  326,  326,  326, 1448, 1692,
+     1446,  326,  326,  326,  326, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691, 1691,  326,  326,  326, 1691, 1691, 1691, 1691,
+     1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691,
+     1450,  326, 1680, 2493, 2486, 2493, 2493, 1680, 1680, 3155,
+     1680, 1680, 1680, 2493, 2493, 1681, 1680, 1680, 2830, 3156,
+     2493, 1680, 1680, 1680, 1680, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 1680, 1680, 1680, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     2831, 1680, 1017, 2170, 2171, 2170, 2170, 1017, 1017, 2834,
+
+     1017, 1017, 1017, 2170, 2170, 1018, 1017, 1017, 2173, 2835,
+     2170, 1017, 1017, 1017, 1017, 2834, 2834, 2834, 2834, 2834,
+     2834, 2834, 2834, 1017, 1017, 1017, 2834, 2834, 2834, 2834,
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2175, 1017, 1194, 2839, 2486, 2839, 2839, 1194, 1194, 3162,
+     1194, 1194, 1194, 1194, 1194, 1195, 1194, 1194, 3163, 1194,
+     1194, 1194, 1194, 1194, 1194, 3162, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 1194, 1194, 1194, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
+     1194, 1194,  324, 1904, 1904, 1904, 1904,  324,  324, 2168,
+
+      324,  324,  324,  681,  681,  325,  324,  324, 2169,  324,
+      681,  324,  324,  324,  324, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168,  324,  324,  324, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+      685,  324, 1909, 2843, 2826, 2843, 2843, 1909, 1909, 3167,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 3168, 1909,
+     1909, 1909, 1909, 1909, 1909, 3167, 3167, 3167, 3167, 3167,
+     3167, 3167, 3167, 1909, 1909, 1909, 3167, 3167, 3167, 3167,
+     3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167,
+     1909, 1909,  424, 1016, 1016, 1016, 1016,  424,  424, 1200,
+
+      424,  424,  424,  424,  424,  425,  424,  424, 1201,  424,
+      424,  424,  424,  424,  424, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200,  424,  424,  424, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+      424,  424, 3170, 1177, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3171, 5143, 4873, 5143, 5143, 4874, 3170, 3170,
+     3170, 3170, 3170, 3170, 3170, 3170, 5143, 5143, 5143, 3170,
+     3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170,
+     3170, 3170, 3170, 1458, 2850, 2203, 2850, 2850, 1458, 1458,
+     2511, 1458, 2512, 1458, 1458, 2852, 2515, 2512, 2516, 2853,
+
+     2518, 2855, 1458, 1458, 2512, 1458, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2512, 1458, 2512, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 1458, 1458, 2851, 4876, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2854, 5143, 4877, 5143, 5143, 3754, 2851,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851, 5143, 5143, 5143,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+     2851, 2851, 2851, 2851, 1458, 2513, 2532, 2513, 2513, 1458,
+     2510, 1458, 1458, 1458, 1458, 2513, 2513, 1459, 1458, 1458,
+     2856, 1458, 2510, 1458, 1458, 1458, 1458, 2510, 2510, 2510,
+
+     2510, 2510, 2510, 2510, 2510, 1458, 1458, 1458, 2510, 2510,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510,
+     2510, 2510, 2510, 1458, 2869, 4879, 3176, 3790, 5143, 5143,
+     5143, 5143, 3177, 3177, 3177, 3177, 4880, 3160, 3791, 3766,
+     5143, 4257, 5143, 3177, 3177, 3177, 3177, 3177, 3161, 3177,
+     5143, 4258, 5143, 5143, 5143, 5143, 3177, 1458, 2855, 2573,
+     2855, 2855, 1458, 1458, 2872, 1458, 2855, 1458, 1458, 2852,
+     2873, 2855, 2874, 2875, 2876, 2855, 1458, 1458, 2855, 1458,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2855, 1458,
+     2855, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+
+     2872, 2872, 2872, 2872, 2872, 1458, 1458,  599,  854,  854,
+      854,  854,  599, 1038,  855,  599,  856,  599, 1039, 1040,
+      858,  856,  859, 1041,  861, 1042,  599,  599,  856,  599,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,  856,  599,
+      856, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1038,  599, 1921, 3180, 3181,
+     3180, 3180, 1921, 1921, 3182, 1921, 3183, 1921, 1921, 3184,
+     3185, 3183, 3186, 2853, 3187, 3188, 1921, 1921, 3183, 1921,
+     3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3183, 1921,
+     3183, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+
+     3182, 3182, 3182, 3182, 3182, 1921, 1921, 1093, 1700, 1924,
+     1700, 1700, 1093, 1925, 1926, 1093, 1927, 1093, 1928, 1929,
+     3189, 1927, 1930, 3190, 1932, 1933, 1093, 1093, 1927, 1093,
+     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1927, 1093,
+     1927, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+     1934, 1934, 1934, 1934, 1934, 1925, 1093, 2869, 4884, 2870,
+     1460, 5143, 5143, 5143, 5143, 2871, 2871, 2871, 2871, 4885,
+     4728, 3280, 4021, 5143, 3281, 5143, 2871, 2871, 2871, 2871,
+     2871, 4729, 2871,  709, 4899, 4910, 5143,  308, 5143, 2871,
+     3191, 3660, 5143, 5143, 2187, 5143, 4911, 2188, 2545, 4912,
+
+     3192, 2546, 4924, 5143, 5143, 4925, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191, 3191, 5143, 5143, 5143, 3191, 3191, 3191,
+     3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+     3191, 1697, 2866, 3193, 2866, 2866, 1697, 1697, 3194, 1697,
+     2866, 1697, 1697, 2861, 3195, 2866, 3196, 3197, 3198, 2866,
+     1697, 1697, 2866, 1697, 3194, 3194, 3194, 3194, 3194, 3194,
+     3194, 3194, 2866, 1697, 2866, 3194, 3194, 3194, 3194, 3194,
+     3194, 3194, 3194, 3194, 3194, 3194, 3194, 3194, 3194, 1697,
+     1697, 3201,  345, 3202, 1232, 5143, 5143, 5143, 5143, 3203,
+     3203, 3203, 3203, 4146, 1994, 1961, 4147, 5143, 4932, 5143,
+
+     3203, 3203, 3203, 3203, 3203, 3942, 3203, 5143, 3943, 5143,
+     5143, 5143, 5143, 3203, 1093, 1991, 1962, 1991, 1991, 1093,
+     1093, 2525, 1093, 1991, 1093, 1093, 1989, 1991, 1991, 2529,
+     2194, 2877, 1991, 1093, 1093, 1991, 1093, 2878, 2878, 2878,
+     2878, 2525, 2525, 2525, 2525, 1991, 1093, 1991, 2878, 2878,
+     2878, 2878, 2878, 2525, 2878, 2525, 2525, 2525, 2525, 2525,
+     2525, 2878, 1093, 1093, 1461, 2238,  854, 2238, 2238, 1461,
+     1461, 2879, 1461, 2535, 1461, 1461, 2590, 2538, 2535, 2539,
+     2591, 2880, 2592, 1461, 1461, 2535, 1461, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2535, 1461, 2535, 2879, 2879,
+
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 1461, 1461, 2894,  344, 3204, 3660, 5143, 5143,
+     5143, 5143, 3205, 3205, 3205, 3205, 4384, 1460, 4944, 4385,
+     5143, 4945, 5143, 3205, 3205, 3205, 3205, 3205, 3280, 3205,
+     5143, 3281, 5143, 5143, 5143, 5143, 3205,  599, 1039, 1039,
+     1039, 1039,  599, 1038,  599,  599,  599,  599, 1039, 1039,
+      600,  599,  599, 1046,  599, 1038,  599,  599,  599,  599,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  599,
+      599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,  599, 2534, 1082, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 2541, 5143, 3313,
+     5143, 5143, 3314, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 5143, 5143, 5143, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 1461, 2536,
+     2881, 2536, 2536, 1461, 2533, 1461, 1461, 1461, 1461, 2536,
+     2536, 1462, 1461, 1461, 2882, 1461, 2533, 1461, 1461, 1461,
+     1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461,
+     1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533,
+     2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461, 1937, 3208,
+     1922, 3208, 3208, 1937, 1937, 3209, 1937, 3210, 1937, 1937,
+
+     3211, 3212, 3210, 3213, 2591, 3214, 3215, 1937, 1937, 3210,
+     1937, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3210,
+     1937, 3210, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3209, 3209, 3209, 3209, 3209, 1937, 1937,  250, 1708,
+     1940, 1708, 1708,  250,  705,  737,  250,  738,  250,  598,
+     1941, 1502,  738,  740, 3216,  742, 1943,  250,  250,  738,
+      250, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,  738,
+      250,  738, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944,  705,  250, 2894, 1478,
+     2895,  535, 5143, 5143, 5143, 5143, 2896, 2896, 2896, 2896,
+
+     3630, 1817, 4602, 3631, 5143, 4603, 5143, 2896, 2896, 2896,
+     2896, 2896, 3595, 2896, 5143, 3596, 5143, 5143, 5143, 5143,
+     2896, 1461, 2592, 2897, 2592, 2592, 1461, 1461, 2898, 1461,
+     2592, 1461, 1461, 2590, 2899, 2592, 2900, 2901, 2902, 2592,
+     1461, 1461, 2592, 1461, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2592, 1461, 2592, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 1461,
+     1461,  599, 2897, 2897, 2897, 2897,  599, 1038, 1061,  599,
+      862,  599, 1039, 1040, 1062,  862, 1063, 3217, 1065, 1042,
+      599,  599,  862,  599, 3218, 3218, 3218, 3218, 3218, 3218,
+
+     3218, 3218,  862,  599,  862, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 1038,
+      599, 3219, 4959, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3220, 5143, 4960, 5143, 5143, 3991, 3219, 3219, 3219,
+     3219, 3219, 3219, 3219, 3219, 5143, 5143, 5143, 3219, 3219,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219,
+     3219, 3219, 1705, 2891, 3221, 2891, 2891, 1705, 1705, 3222,
+     1705, 2891, 1705, 1705, 2886, 3223, 2891, 3224, 3225, 3226,
+     2891, 1705, 1705, 2891, 1705, 3222, 3222, 3222, 3222, 3222,
+     3222, 3222, 3222, 2891, 1705, 2891, 3222, 3222, 3222, 3222,
+
+     3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222, 3222,
+     1705, 1705, 3229, 4475, 3230, 4019, 5143, 5143, 5143, 5143,
+     3231, 3231, 3231, 3231, 4476, 1673, 4020, 4477, 5143, 4482,
+     5143, 3231, 3231, 3231, 3231, 3231, 4963, 3231, 5143, 4964,
+     5143, 5143, 5143, 5143, 3231,  599,  712,  712,  712,  712,
+      599,  599,  855,  599,  856,  599,  599,  857,  858,  856,
+      859,  860,  861,  862,  599,  599,  856,  599,  855,  855,
+      855,  855,  855,  855,  855,  855,  856,  599,  856,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  599,  599, 1234, 2007, 2294, 2007, 2007,
+
+     1234, 1234, 2547, 1234, 2206, 1234, 1234, 2295, 2209, 2206,
+     2560, 2296, 2906, 2297, 1234, 1234, 2206, 1234, 2907, 2907,
+     2907, 2907, 2547, 2547, 2547, 2547, 2206, 1234, 2206, 2907,
+     2907, 2907, 2907, 2907, 2547, 2907, 2547, 2547, 2547, 2547,
+     2547, 2547, 2907, 1234, 1234, 2205, 4475, 5143, 5143, 5143,
+     5143, 5143, 5143, 2210, 5143, 2212, 5143, 4476, 5143, 5143,
+     4493, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 5143,
+     5143, 5143, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2210, 3660, 2548, 1082,
+     5143, 5143, 5143, 5143, 2547, 2547, 2547, 2547, 4965, 1082,
+
+     4030, 4966, 5143, 4031, 5143, 2547, 2547, 2547, 2547, 2547,
+     3313, 2547, 5143, 3314, 5143, 5143, 5143, 5143, 2547, 1234,
+     2207,  854, 2207, 2207, 1234, 2204, 1234, 1234, 1234, 1234,
+     2207, 2207, 1235, 1234, 1234, 2549, 1234, 2204, 1234, 1234,
+     1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     1234, 1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 1234, 1711,
+     2910, 2911, 2910, 2910, 1711, 1711, 2912, 1711, 2913, 1711,
+     1711, 2914, 2915, 2913, 2916, 3233, 2917, 2918, 1711, 1711,
+     2913, 1711, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+
+     2913, 1711, 2913, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+     2912, 2912, 2912, 2912, 2912, 2912, 2912, 1711, 1711, 2560,
+     1281, 2561,  898, 5143, 5143, 5143, 5143, 2562, 2562, 2562,
+     2562, 4971, 3548, 3830, 4972, 5143, 3831, 5143, 2562, 2562,
+     2562, 2562, 2562, 4097, 2562, 5143, 4563, 5143, 5143, 5143,
+     5143, 2562, 1234, 2297, 2563, 2297, 2297, 1234, 1234, 2564,
+     1234, 2297, 1234, 1234, 2295, 2565, 2297, 2566, 2567, 2568,
+     2297, 1234, 1234, 2297, 1234, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2297, 1234, 2297, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+
+     1234, 1234, 2920,  712, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 2921, 5143, 2674, 5143, 5143, 2675, 2920, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920, 5143, 5143, 5143, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+     2920, 2920, 2920, 2930, 4531, 3234,  344, 5143, 5143, 5143,
+     5143, 3235, 3235, 3235, 3235, 4532,  862, 3855, 4992, 5143,
+     3856, 5143, 3235, 3235, 3235, 3235, 3235, 3275, 3235, 5143,
+     3276, 5143, 5143, 5143, 5143, 3235, 1711, 2918, 3236, 2918,
+     2918, 1711, 1711, 3237, 1711, 2918, 1711, 1711, 2914, 3238,
+     2918, 3239, 2567, 3240, 2918, 1711, 1711, 2918, 1711, 3237,
+
+     3237, 3237, 3237, 3237, 3237, 3237, 3237, 2918, 1711, 2918,
+     3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237,
+     3237, 3237, 3237, 3237, 1711, 1711,  215, 1468, 1713, 1468,
+     1468,  215,  750,  620,  215,  621,  215,  749, 1714, 1533,
+      621,  623, 3241,  625, 1716,  215,  215,  621,  215, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717,  621,  215,  621,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717,  750,  215, 2930,  961, 2931,  114,
+     5143, 5143, 5143, 5143, 2932, 2932, 2932, 2932, 4996, 4555,
+     3319, 4997, 5143, 3320, 5143, 2932, 2932, 2932, 2932, 2932,
+
+     4556, 2932, 5143, 4721, 5143, 5143, 5143, 5143, 2932,  601,
+     1952, 1952, 1952, 1952,  601,  601, 3245,  601, 1952,  601,
+      601, 1947, 3246, 1952, 3247, 3248, 3249, 1952,  601,  601,
+     1952,  601, 3245, 3245, 3245, 3245, 3245, 3245, 3245, 3245,
+     1952,  601, 1952, 3245, 3245, 3245, 3245, 3245, 3245, 3245,
+     3245, 3245, 3245, 3245, 3245, 3245, 3245,  601,  601, 1479,
+     2362, 2563, 2362, 2362, 1479, 1479, 2939, 1479, 2576, 1479,
+     1479, 2701, 2579, 2576, 2580, 2702, 2940, 2703, 1479, 1479,
+     2576, 1479, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2576, 1479, 2576, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 1479, 1479, 2951,
+     1281, 3254, 1994, 5143, 5143, 5143, 5143, 3255, 3255, 3255,
+     3255, 4971, 3745, 3942, 4972, 5143, 3943, 5143, 3255, 3255,
+     3255, 3255, 3255, 3746, 3255, 4644, 4629, 4654, 5143,  854,
+     5143, 3255, 2575, 1478, 5143, 5143, 4645, 5143, 4655, 5007,
+     3174, 5008, 2582, 3175, 3337, 5143, 5143, 3338, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 5143, 5143, 5143, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 1479, 2577, 2897, 2577, 2577, 1479, 2574,
+     1479, 1479, 1479, 1479, 2577, 2577, 1480, 1479, 1479, 2941,
+
+     1479, 2574, 1479, 1479, 1479, 1479, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 1479, 1479, 1479, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 1479, 1960, 3258, 3236, 3258, 3258, 1960, 1960,
+     3259, 1960, 3260, 1960, 1960, 3261, 3262, 3260, 3263, 2702,
+     3264, 3265, 1960, 1960, 3260, 1960, 3259, 3259, 3259, 3259,
+     3259, 3259, 3259, 3259, 3260, 1960, 3260, 3259, 3259, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259,
+     3259, 1960, 1960,  257, 1725, 1962, 1725, 1725,  257,  952,
+      778,  257,  779,  257,  951, 1963, 1560,  779,  781, 3266,
+
+      783, 1965,  257,  257,  779,  257, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966,  779,  257,  779, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966,  952,  257, 2951, 2897, 2952, 5010, 5143, 5143, 5143,
+     5143, 2953, 2953, 2953, 2953, 4724, 1817, 5011, 4725, 5143,
+     4392, 5143, 2953, 2953, 2953, 2953, 2953, 5012, 2953, 5143,
+     5013, 5143, 5143, 5143, 5143, 2953, 1479, 2703, 2954, 2703,
+     2703, 1479, 1479, 2955, 1479, 2703, 1479, 1479, 2701, 2956,
+     2703, 2957, 2958, 2959, 2703, 1479, 1479, 2703, 1479, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2703, 1479, 2703,
+
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 1479, 1479,  599,  862,  862,  862,
+      862,  599,  599, 1061,  599,  862,  599,  599,  857, 1062,
+      862, 1063, 1064, 1065,  862,  599,  599,  862,  599, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,  599,  862,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061,  599,  599, 3267,  854, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3268, 5143, 2867, 5143,
+     5143, 2868, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267,
+     5143, 5143, 5143, 3267, 3267, 3267, 3267, 3267, 3267, 3267,
+
+     3267, 3267, 3267, 3267, 3267, 3267, 3267, 1723, 2950, 3269,
+     2950, 2950, 1723, 1723, 3270, 1723, 2950, 1723, 1723, 2945,
+     3271, 2950, 3272, 3273, 3274, 2950, 1723, 1723, 2950, 1723,
+     3270, 3270, 3270, 3270, 3270, 3270, 3270, 3270, 2950, 1723,
+     2950, 3270, 3270, 3270, 3270, 3270, 3270, 3270, 3270, 3270,
+     3270, 3270, 3270, 3270, 3270, 1723, 1723, 3277, 1380, 3278,
+      709, 5143, 5143, 5143, 5143, 3279, 3279, 3279, 3279, 5025,
+      862, 4722, 5026, 5143, 4723, 5143, 3279, 3279, 3279, 3279,
+     3279, 3058, 3279, 5143, 3059, 5143, 5143, 5143, 5143, 3279,
+      248, 1460, 1460, 1460, 1460,  248,  377,  603,  248,  604,
+
+      248,  336, 1701,  606,  604,  607, 1702,  609, 1703,  248,
+      248,  604,  248, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704,  604,  248,  604, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,  377,  248,
+     1970, 2963, 3282, 2963, 2963, 1970, 3283, 1970, 1970, 1970,
+     1970, 2963, 2963, 1971, 1970, 1970, 3284, 1970, 3283, 1970,
+     1970, 1970, 1970, 3283, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 1970, 1970, 1970, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 1970,
+      512,  847, 1033,  847,  847,  512, 1034,  512,  512,  512,
+
+      512,  847,  847, 2250,  512,  512, 3286,  512, 1034,  512,
+      512,  512,  512, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034,  512,  512,  512, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,  512,
+      599, 1039, 1039, 1039, 1039,  599, 1038,  599,  599,  599,
+      599, 1039, 1039,  600,  599,  599, 1046,  599, 1038,  599,
+      599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038,  599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,
+      512, 1984, 1817, 1984, 1984,  512,  512, 2607,  512, 1984,
+
+      512,  512, 1979, 2256, 1984, 2616, 2258, 2972, 1984,  512,
+      512, 1984,  512, 2973, 2973, 2973, 2973, 2607, 2607, 2607,
+     2607, 1984,  512, 1984, 2973, 2973, 2973, 2973, 2973, 2607,
+     2973, 2607, 2607, 2607, 2607, 2607, 2607, 2973,  512,  512,
+     2257,  862, 2608, 5031, 5143, 5143, 5143, 5143, 2607, 2607,
+     2607, 2607, 4708, 1281, 5032, 4709, 5143, 4932, 5143, 2607,
+     2607, 2607, 2607, 2607, 3654, 2607, 5143, 3655, 5143, 5143,
+     5143, 5143, 2607,  701, 2602, 2587, 2602, 2602,  701,  701,
+     2974,  701, 2602,  701,  701, 2598, 2975, 2602, 2976, 3287,
+     2977, 2602,  701,  701, 2602,  701, 2974, 2974, 2974, 2974,
+
+     2974, 2974, 2974, 2974, 2602,  701, 2602, 2974, 2974, 2974,
+     2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974, 2974,
+     2974,  701,  701, 2255, 4168, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2259, 5143, 4169, 5143, 5143, 4856, 2255,
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 5143, 5143, 5143,
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+     2255, 2255, 2255, 2255, 2616, 5043, 2617, 2897, 5143, 5143,
+     5143, 5143, 2618, 2618, 2618, 2618, 5044, 5058, 4337, 4520,
+     5143, 4338, 5143, 2618, 2618, 2618, 2618, 2618, 5059, 2618,
+     5143, 4563, 5143, 5143, 5143, 5143, 2618,  784, 1360, 1360,
+
+     1360, 1360,  784, 1359,  784,  784,  784,  784, 1360, 1360,
+      785,  784,  784, 1367,  784, 1359,  784,  784,  784,  784,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,  784,  784,
+      784, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359,  784, 1504, 2262, 2619,
+     2262, 2262, 1504, 1504, 2982, 1504, 2621, 1504, 1504, 2622,
+     2623, 2621, 2624, 2625, 2983, 2627, 1504, 1504, 2621, 1504,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2621, 1504,
+     2621, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 1504, 1504, 2998, 1478, 3291,
+
+     4155, 5143, 5143, 5143, 5143, 3292, 3292, 3292, 3292, 5062,
+     1994, 4833, 5063, 5143, 4834, 5143, 3292, 3292, 3292, 3292,
+     3292, 3896, 3292, 5143, 3897, 5143, 5143, 5143, 5143, 3292,
+     1504, 2984, 2985, 2984, 2984, 1504, 2986, 1504, 1504, 1504,
+     1504, 2984, 2984, 1505, 1504, 1504, 2987, 1504, 2986, 1504,
+     1504, 1504, 1504, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 1504, 1504, 1504, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 1504,
+      213, 1082, 1082, 1082, 1082,  213,  382,  337,  213,  338,
+      213,  381, 1256,  340,  338,  341, 1257,  343, 1258,  213,
+
+      213,  338,  213, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  338,  213,  338, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  382,  213,
+     2620, 1380, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2626, 5143, 4390, 5143, 5143, 4391, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 5143, 5143, 5143, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 1987, 3295, 3296, 3295, 3295, 1987, 1987, 3297, 1987,
+     3298, 1987, 1987, 3299, 3300, 3298, 3301, 2625, 3302, 3303,
+     1987, 1987, 3298, 1987, 3297, 3297, 3297, 3297, 3297, 3297,
+
+     3297, 3297, 3298, 1987, 3298, 3297, 3297, 3297, 3297, 3297,
+     3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 1987,
+     1987, 1093, 1744, 1713, 1744, 1744, 1093, 1093, 1926, 1093,
+     1927, 1093, 1093, 1989, 3189, 1927, 1930, 3304, 1932, 1991,
+     1093, 1093, 1927, 1093, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1927, 1093, 1927, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1093,
+     1093, 2998, 1904, 2999, 1460, 5143, 5143, 5143, 5143, 3000,
+     3000, 3000, 3000, 5072, 4728, 5074, 5073, 5143, 5075, 5143,
+     3000, 3000, 3000, 3000, 3000, 4729, 3000, 5143, 4899, 5143,
+
+     5143, 5143, 5143, 3000, 1504, 2627, 3001, 2627, 2627, 1504,
+     1504, 3002, 1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004,
+     3005, 3006, 2627, 1504, 1504, 2627, 1504, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 2627, 1504, 2627, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 1504, 1504, 3305, 1082, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3306, 5143, 4030, 5143, 5143, 4031,
+     3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 5143, 5143,
+     5143, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 3305, 3305, 1742, 2997, 3307, 2997, 2997,
+
+     1742, 1742, 3308, 1742, 2997, 1742, 1742, 2992, 3309, 2997,
+     3310, 3311, 3312, 2997, 1742, 1742, 2997, 1742, 3308, 3308,
+     3308, 3308, 3308, 3308, 3308, 3308, 2997, 1742, 2997, 3308,
+     3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308, 3308,
+     3308, 3308, 3308, 1742, 1742, 3315, 4910, 3316, 3660, 5143,
+     5143, 5143, 5143, 3317, 3317, 3317, 3317, 4911, 5088, 4944,
+     4912, 5143, 4945, 5143, 3317, 3317, 3317, 3317, 3317, 5089,
+     3317, 5143, 4698, 5143, 5143, 5143, 5143, 3317,  784, 1994,
+     1994, 1994, 1994,  784,  784, 2628,  784, 2264,  784,  784,
+     1149, 2265, 2264, 2639, 2267, 3007,  961,  784,  784, 2264,
+
+      784, 3008, 3008, 3008, 3008, 2628, 2628, 2628, 2628, 2264,
+      784, 2264, 3008, 3008, 3008, 3008, 3008, 2628, 3008, 2628,
+     2628, 2628, 2628, 2628, 2628, 3008,  784,  784, 2263, 5100,
+     5143, 5143, 5143, 5143, 5143, 5143, 2266, 5143, 2268, 5143,
+     5101, 5143, 5143, 4766, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 5143, 5143, 5143, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2266,
+     5103, 2629,  854, 5143, 5143, 5143, 5143, 2628, 2628, 2628,
+     2628, 5104, 1478, 3174, 4772, 5143, 3175, 5143, 2628, 2628,
+     2628, 2628, 2628, 4079, 2628, 5143, 4080, 5143, 5143, 5143,
+
+     5143, 2628,  959, 3009, 3009, 3009, 3009,  959,  959, 3010,
+      959, 3011,  959,  959, 1583, 3012, 3011, 3013, 3318, 3014,
+     1581,  959,  959, 3011,  959, 3010, 3010, 3010, 3010, 3010,
+     3010, 3010, 3010, 3011,  959, 3011, 3010, 3010, 3010, 3010,
+     3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
+      959,  959, 2639, 4531, 2640,  344, 5143, 5143, 5143, 5143,
+     2641, 2641, 2641, 2641, 4532, 4644, 4384, 4992, 5143, 4385,
+     5143, 2641, 2641, 2641, 2641, 2641, 4645, 2641, 5143, 5007,
+     5143, 5143, 5143, 5143, 2641,  517, 1090, 1281, 1090, 1090,
+      517,  517, 1282,  517, 1090,  517,  517, 1085, 3326, 1090,
+
+     1284, 3327, 1286, 1090,  517,  517, 1090,  517, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1090,  517, 1090, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282,  517,  517, 2665, 3328, 3329, 3328, 3328,
+     2665, 2665, 3330, 2665, 3331, 2665, 2665, 3332, 3333, 3331,
+     3334, 3020, 3335, 3336, 2665, 2665, 3331, 2665, 3330, 3330,
+     3330, 3330, 3330, 3330, 3330, 3330, 3331, 2665, 3331, 3330,
+     3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330,
+     3330, 3330, 3330, 2665, 2665,  641, 1154, 1380, 1154, 1154,
+      641,  641, 1381,  641, 1154,  641,  641, 1382, 3339, 1154,
+
+     1384, 3340, 1386, 1154,  641,  641, 1154,  641, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1154,  641, 1154, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381,  641,  641, 1760, 2668, 3001, 2668, 2668,
+     1760, 1760, 3341, 1760, 3025, 1760, 1760, 3026, 3027, 3025,
+     3028, 3029, 3342, 3031, 1760, 1760, 3025, 1760, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3025, 1760, 3025, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 1760, 1760, 3024, 4654, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3030, 5143, 4655, 5143, 5143,
+
+     5008, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 5143,
+     5143, 5143, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 1760, 3343, 3344, 3343,
+     3343, 1760, 3345, 1760, 1760, 1760, 1760, 3343, 3343, 1761,
+     1760, 1760, 3346, 1760, 3345, 1760, 1760, 1760, 1760, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760, 1760, 1760,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 3345, 3345, 3345, 3345, 1760, 2004, 3347, 3307, 3347,
+     3347, 2004, 2004, 3348, 2004, 3349, 2004, 2004, 3350, 3351,
+     3349, 3352, 3353, 3354, 3355, 2004, 2004, 3349, 2004, 3348,
+
+     3348, 3348, 3348, 3348, 3348, 3348, 3348, 3349, 2004, 3349,
+     3348, 3348, 3348, 3348, 3348, 3348, 3348, 3348, 3348, 3348,
+     3348, 3348, 3348, 3348, 2004, 2004, 3356,  854, 3357, 1478,
+     5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358, 3199,  961,
+     5062, 3200, 5143, 5063, 5143, 3358, 3358, 3358, 3358, 3358,
+     4548, 3358, 5143, 4549, 5143, 5143, 5143, 5143, 3358, 1760,
+     3031, 3359, 3031, 3031, 1760, 1760, 3360, 1760, 3031, 1760,
+     1760, 3026, 3361, 3031, 3362, 3363, 3364, 3031, 1760, 1760,
+     3031, 1760, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3031, 1760, 3031, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 1760, 1760, 1291,
+     2006, 1962, 2006, 2006, 1291, 1291, 2669, 1291, 2289, 1291,
+     1291, 2290, 2289, 2289, 2671, 2292, 3032, 2109, 1291, 1291,
+     2289, 1291, 3033, 3033, 3033, 3033, 2669, 2669, 2669, 2669,
+     2289, 1291, 2289, 3033, 3033, 3033, 3033, 3033, 2669, 3033,
+     2669, 2669, 2669, 2669, 2669, 2669, 3033, 1291, 1291,  452,
+     3034, 2619, 3034, 3034,  452, 1106,  904,  452,  905,  452,
+     1105, 3365,  907,  905,  908, 3366,  910, 3367,  452,  452,
+      905,  452, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+      905,  452,  905, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 1106,  452,  876,
+     1483, 1460, 1483, 1483,  876, 1728,  876,  876,  876,  876,
+     1483, 1483, 2321,  876,  876, 3369,  876, 1728,  876,  876,
+      876,  876, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+      876,  876,  876, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,  876,  617,
+     1304, 1528, 1304, 1304,  617,  617, 1529,  617, 1304,  617,
+      617, 1300, 1530, 1304, 1531, 1776, 1532, 1304,  617,  617,
+     1304,  617, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1304,  617, 1304, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+
+     1529, 1529, 1529, 1529, 1529, 1529, 1529,  617,  617,  452,
+      746,  903,  746,  746,  452,  452,  904,  452,  905,  452,
+      452,  906,  907,  905,  908,  909,  910,  911,  452,  452,
+      905,  452,  904,  904,  904,  904,  904,  904,  904,  904,
+      905,  452,  905,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  452,  452,  213,
+      308,  308,  308,  308,  213,  213,  337,  213,  338,  213,
+      213,  339,  340,  338,  341,  342,  343,  344,  213,  213,
+      338,  213,  337,  337,  337,  337,  337,  337,  337,  337,
+      338,  213,  338,  337,  337,  337,  337,  337,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  213,  213, 1103,
+     3660, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1104,
+     5143, 4924, 5143, 5143, 4925, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 5143, 5143, 5143, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+      452, 1105, 1082, 1105, 1105,  452, 1106,  452,  452,  452,
+      452, 1105, 1105,  453,  452,  452, 1107,  452, 1106,  452,
+      452,  452,  452, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106,  452,  452,  452, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,  452,
+
+     1535, 2326, 2327, 2326, 2326, 1535, 1535, 2328, 1535, 2329,
+     1535, 1535, 2330, 2331, 2329, 2332, 2333, 2334, 2335, 1535,
+     1535, 2329, 1535, 2328, 2328, 2328, 2328, 2328, 2328, 2328,
+     2328, 2329, 1535, 2329, 2328, 2328, 2328, 2328, 2328, 2328,
+     2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 1535, 1535,
+     1118,  862, 1119, 1281, 5143, 5143, 5143, 5143, 1120, 1120,
+     1120, 1120, 4708,  535, 4971, 4709, 5143, 4972, 5143, 1120,
+     1120, 1120, 1120, 1120, 4602, 1120, 5143, 4603, 5143, 5143,
+     5143, 5143, 1120,  452,  911, 1121,  911,  911,  452,  452,
+     1122,  452,  911,  452,  452,  906, 1123,  911, 1124, 1125,
+
+     1126,  911,  452,  452,  911,  452, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122,  911,  452,  911, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122,  452,  452, 1538, 3050, 3374, 3050, 3050, 1538, 1538,
+     3375, 1538, 3050, 1538, 1538, 3046, 3376, 3050, 3377, 3378,
+     3379, 3050, 1538, 1538, 3050, 1538, 3375, 3375, 3375, 3375,
+     3375, 3375, 3375, 3375, 3050, 1538, 3050, 3375, 3375, 3375,
+     3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375,
+     3375, 1538, 1538, 1334, 2348, 2355, 2348, 2348, 1334, 1334,
+     2356, 1334, 2348, 1334, 1334, 2344, 2357, 2348, 2358, 2700,
+
+     2359, 2348, 1334, 1334, 2348, 1334, 2356, 2356, 2356, 2356,
+     2356, 2356, 2356, 2356, 2348, 1334, 2348, 2356, 2356, 2356,
+     2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356,
+     2356, 1334, 1334, 1080, 1732, 1817, 1732, 1732, 1080, 1972,
+     1080, 1080, 1080, 1080, 1732, 1732, 2374, 1080, 1080, 3381,
+     1080, 1972, 1080, 1080, 1080, 1080, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1080, 1080, 1080, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1080,  599,  862,  862,  862,  862,  599,  599,
+     1061,  599,  862,  599,  599,  857, 1062,  862, 1063, 1064,
+
+     1065,  862,  599,  599,  862,  599, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061,  862,  599,  862, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061,  599,  599,  536, 1142, 1353, 1142, 1142,  536,  536,
+     1354,  536, 1142,  536,  536, 1137, 3382, 1142, 1356, 3383,
+     1358, 1142,  536,  536, 1142,  536, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1142,  536, 1142, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354,  536,  536, 2698, 3384, 3374, 3384, 3384, 2698, 2698,
+     3385, 2698, 3386, 2698, 2698, 3387, 3388, 3386, 3389, 3064,
+
+     3390, 3391, 2698, 2698, 3386, 2698, 3385, 3385, 3385, 3385,
+     3385, 3385, 3385, 3385, 3386, 2698, 3386, 3385, 3385, 3385,
+     3385, 3385, 3385, 3385, 3385, 3385, 3385, 3385, 3385, 3385,
+     3385, 2698, 2698,  550,  967, 1155,  967,  967,  550,  550,
+     1156,  550,  967,  550,  550, 1157, 3392,  967, 1159, 3393,
+     1161,  967,  550,  550,  967,  550, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156,  967,  550,  967, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156,  550,  550,  784, 1147, 1147, 1147, 1147,  784, 1359,
+     1148,  784,  961,  784, 1360, 1361, 1150,  961, 1151, 1362,
+
+     1153, 1363,  784,  784,  961,  784, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364,  961,  784,  961, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1359,  784, 1815, 3071, 2753, 3071, 3071, 1815, 1815,
+     3394, 1815, 3071, 1815, 1815, 3395, 3074, 3071, 3075, 3396,
+     3397, 3071, 1815, 1815, 3071, 1815, 3394, 3394, 3394, 3394,
+     3394, 3394, 3394, 3394, 3071, 1815, 3071, 3394, 3394, 3394,
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     3394, 1815, 1815, 3070, 2897, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3077, 5143, 4724, 5143, 5143, 4725, 3070,
+
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 5143, 5143, 5143,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 1815, 3072, 3082, 3072, 3072, 1815,
+     3069, 1815, 1815, 1815, 1815, 3072, 3072, 1816, 1815, 1815,
+     3398, 1815, 3069, 1815, 1815, 1815, 1815, 3069, 3069, 3069,
+     3069, 3069, 3069, 3069, 3069, 1815, 1815, 1815, 3069, 3069,
+     3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069,
+     3069, 3069, 3069, 1815, 2082, 3399, 3400, 3399, 3399, 2082,
+     2082, 3401, 2082, 3399, 2082, 2082, 3402, 3403, 3399, 3404,
+     3405, 3406, 3399, 2082, 2082, 3399, 2082, 3401, 3401, 3401,
+
+     3401, 3401, 3401, 3401, 3401, 3399, 2082, 3399, 3401, 3401,
+     3401, 3401, 3401, 3401, 3401, 3401, 3401, 3401, 3401, 3401,
+     3401, 3401, 2082, 2082, 3409,  345, 3410, 1994, 5143, 5143,
+     5143, 5143, 3411, 3411, 3411, 3411, 4146,  862, 3942, 4147,
+     5143, 3943, 5143, 3411, 3411, 3411, 3411, 3411, 3275, 3411,
+     5143, 3276, 5143, 5143, 5143, 5143, 3411, 1291, 2109, 2096,
+     2109, 2109, 1291, 1291, 2739, 1291, 2109, 1291, 1291, 2290,
+     2109, 2109, 2743, 2429, 3080, 2109, 1291, 1291, 2109, 1291,
+     3081, 3081, 3081, 3081, 2739, 2739, 2739, 2739, 2109, 1291,
+     2109, 3081, 3081, 3081, 3081, 3081, 2739, 3081, 2739, 2739,
+
+     2739, 2739, 2739, 2739, 3081, 1291, 1291, 1818, 2764, 1147,
+     2764, 2764, 1818, 1818, 3412, 1818, 2764, 1818, 1818, 3110,
+     3087, 2764, 3088, 3111, 3413, 2764, 1818, 1818, 2764, 1818,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 2764, 1818,
+     2764, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 1818, 1818, 1818, 3085, 3414,
+     3085, 3085, 1818, 3083, 1818, 1818, 1818, 1818, 3085, 3085,
+     1819, 1818, 1818, 3415, 1818, 3083, 1818, 1818, 1818, 1818,
+     3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 1818, 1818,
+     1818, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083,
+
+     3083, 3083, 3083, 3083, 3083, 3083, 1818, 2088, 3416, 2083,
+     3416, 3416, 2088, 2088, 3417, 2088, 3416, 2088, 2088, 3418,
+     3419, 3416, 3420, 3421, 3422, 3416, 2088, 2088, 3416, 2088,
+     3417, 3417, 3417, 3417, 3417, 3417, 3417, 3417, 3416, 2088,
+     3416, 3417, 3417, 3417, 3417, 3417, 3417, 3417, 3417, 3417,
+     3417, 3417, 3417, 3417, 3417, 2088, 2088, 3084, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3090, 5143, 5143,
+     5143, 5143, 5143, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 5143, 5143, 5143, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3425, 5143,
+
+     3426, 5143, 5143, 5143, 5143, 5143, 3427, 3427, 3427, 3427,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3427, 3427, 3427,
+     3427, 3427, 5143, 3427, 5143, 5143, 5143, 5143, 5143, 5143,
+     3427, 1588, 2430, 2768, 2430, 2430, 1588, 1588, 3096, 1588,
+     2430, 1588, 1588, 2769, 2758, 2430, 2759, 2770, 3097, 2430,
+     1588, 1588, 2430, 1588, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 2430, 1588, 2430, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 1588,
+     1588, 3107, 5143, 3431, 5143, 5143, 5143, 5143, 5143, 3432,
+     3432, 3432, 3432, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3432, 3432, 3432, 3432, 3432, 5143, 3432, 5143, 5143, 5143,
+     5143, 5143, 5143, 3432, 2755, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 2761, 5143, 5143, 5143, 5143, 5143,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 5143, 5143,
+     5143, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755,  784,  961,  961,  961,  961,
+      784,  784, 1148,  784,  961,  784,  784, 1149, 1150,  961,
+     1151, 1152, 1153,  961,  784,  784,  961,  784, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148,  961,  784,  961, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+
+     1148, 1148, 1148,  784,  784, 1588, 2756, 1147, 2756, 2756,
+     1588, 2754, 1588, 1588, 1588, 1588, 2756, 2756, 1589, 1588,
+     1588, 3098, 1588, 2754, 1588, 1588, 1588, 1588, 2754, 2754,
+     2754, 2754, 2754, 2754, 2754, 2754, 1588, 1588, 1588, 2754,
+     2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 2754, 2754, 2754, 1588, 2094, 3435, 3436, 3435, 3435,
+     2094, 2094, 3437, 2094, 3435, 2094, 2094, 3438, 3439, 3435,
+     3440, 2770, 3441, 3435, 2094, 2094, 3435, 2094, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3435, 2094, 3435, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 2094, 2094,  257, 1825, 2096, 1825, 1825,
+      257,  952,  796,  257,  648,  257,  951, 1963, 1624,  648,
+      797, 3442,  799, 1965,  257,  257,  648,  257, 2098, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098,  648,  257,  648, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2098, 2098, 2098,  952,  257, 3107, 5143, 3108, 5143, 5143,
+     5143, 5143, 5143, 3109, 3109, 3109, 3109, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3109, 3109, 3109, 3109, 3109, 5143,
+     3109, 5143, 5143, 5143, 5143, 5143, 5143, 3109,  255, 1380,
+     1380, 1380, 1380,  255,  469,  403,  255,  345,  255,  468,
+
+     1590,  405,  345,  406, 1591,  408, 1592,  255,  255,  345,
+      255, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,  345,
+      255,  345, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593,  469,  255, 1841, 2767,
+     3112, 2767, 2767, 1841, 1841, 3445, 1841, 2767, 1841, 1841,
+     3114, 3115, 2767, 3116, 3117, 3446, 2767, 1841, 1841, 2767,
+     1841, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 2767,
+     1841, 2767, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 3445, 3445, 1841, 1841, 1841, 3447,
+     3448, 3447, 3447, 1841, 3449, 1841, 1841, 1841, 1841, 3447,
+
+     3447, 1842, 1841, 1841, 3450, 1841, 3449, 1841, 1841, 1841,
+     1841, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 1841,
+     1841, 1841, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449,
+     3449, 3449, 3449, 3449, 3449, 3449, 3449, 1841, 2107, 3451,
+     3452, 3451, 3451, 2107, 2107, 3453, 2107, 3451, 2107, 2107,
+     3454, 3455, 3451, 3456, 3457, 3458, 3451, 2107, 2107, 3451,
+     2107, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3451,
+     2107, 3451, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3453,
+     3453, 3453, 3453, 3453, 3453, 3453, 2107, 2107, 3113, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3118, 5143,
+
+     5143, 5143, 5143, 5143, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 5143, 5143, 5143, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3459,
+     5143, 3460, 5143, 5143, 5143, 5143, 5143, 3461, 3461, 3461,
+     3461, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3461, 3461,
+     3461, 3461, 3461, 5143, 3461, 5143, 5143, 5143, 5143, 5143,
+     5143, 3461, 1080, 1732, 1817, 1732, 1732, 1080, 1972, 1080,
+     1080, 1080, 1080, 1732, 1732, 2439, 1080, 1080, 3463, 1080,
+     1972, 1080, 1080, 1080, 1080, 1972, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1080, 1080, 1080, 1972, 1972, 1972, 1972,
+
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+     1972, 1080,  818, 3130, 3472, 3130, 3130,  818,  818, 1661,
+      818,  818,  818,  818,  818,  819,  818,  818, 3473,  818,
+      818,  818,  818,  818,  818, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661,  818,  818,  818, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     3474,  818,  494, 3131, 2806, 3131, 3131,  494,  494,  998,
+      494,  494,  494,  494,  494,  495,  494,  494, 3475,  494,
+      494,  494,  494,  494,  494,  998,  998,  998,  998,  998,
+      998,  998,  998,  494,  494,  494,  998,  998,  998,  998,
+
+      998,  998,  998,  998,  998,  998,  998,  998,  998,  998,
+     3476,  494, 1196, 1673, 1673, 1673, 1673, 1196, 1196, 1890,
+     1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1892, 1196,
+     1891, 1196, 1196, 1196, 1196, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1196, 1196, 1196, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1893, 1196, 1432, 1432, 1432, 1432, 5143, 5143, 5143, 5143,
+     5143, 5143,  319,  319, 5143, 5143, 5143, 1672, 5143,  319,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,  323,
+     1909, 3141, 3149, 3141, 3141, 1909, 1909, 3484, 1909, 1909,
+     1909, 3141, 3141, 1909, 1909, 1909, 3485, 3486, 3141, 1909,
+     1909, 1909, 1909, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 1909, 1909, 1909, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3143, 1909,
+     3487, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     1909, 5143, 5143, 5143, 5143, 5143, 3487, 3487, 3487, 3487,
+     3487, 3487, 3487, 3487, 5143, 5143, 5143, 3487, 3487, 3487,
+     3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487,
+
+     3487, 1196, 1891, 1891, 1891, 1891, 1196, 1196, 2158, 1196,
+     1196, 1196, 1891, 1891, 1197, 1196, 1196, 1895, 1196, 1891,
+     1196, 1196, 1196, 1196, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 1196, 1196, 1196, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1893,
+     1196, 1432, 1432, 1432, 1432, 5143, 5143, 5143, 5143, 5143,
+     5143,  319,  319, 5143, 5143, 5143, 1672, 5143,  319, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,  323,  426,
+
+     1429, 1667, 1429, 1429,  426,  426, 1907,  426,  426,  426,
+     1429, 1429,  426,  426,  426, 1669, 1908, 1429,  426,  426,
+      426,  426, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+      426,  426,  426, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907, 1907, 1670,  426, 2163,
+     3152, 3497, 3152, 3152, 2163, 2163, 3498, 2163, 2163, 2163,
+     3499, 3499, 2164, 2163, 2163, 3500, 2163, 3499, 2163, 2163,
+     2163, 2163, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     2163, 2163, 2163, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3498, 3501, 2163, 1680,
+
+     2493, 2486, 2493, 2493, 1680, 1680, 3155, 1680, 1680, 1680,
+     2493, 2493, 1681, 1680, 1680, 2830, 3156, 2493, 1680, 1680,
+     1680, 1680, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     1680, 1680, 1680, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 2831, 1680, 1194,
+     1883, 2152, 1883, 1883, 1194, 1194, 3503, 1194, 1194, 1194,
+     1883, 1883, 1195, 1194, 1194, 2154, 3504, 1883, 1194, 1194,
+     1194, 1194, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     1194, 1194, 1194, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 2155, 1194,  324,
+
+     1904, 1904, 1904, 1904,  324,  324, 2168,  324,  324,  324,
+      681,  681,  325,  324,  324, 2169,  324,  681,  324,  324,
+      324,  324, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+      324,  324,  324, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168,  685,  324, 3508,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3509,
+     5143, 5143, 5143, 5143, 5143, 3508, 3508, 3508, 3508, 3508,
+     3508, 3508, 3508, 5143, 5143, 5143, 3508, 3508, 3508, 3508,
+     3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508,
+     2163, 3169, 3512, 3169, 3169, 2163, 2163, 3513, 2163, 2163,
+
+     2163, 2163, 2163, 2164, 2163, 2163, 3514, 2163, 2163, 2163,
+     2163, 2163, 2163, 3513, 3513, 3513, 3513, 3513, 3513, 3513,
+     3513, 2163, 2163, 2163, 3513, 3513, 3513, 3513, 3513, 3513,
+     3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 2163, 2163,
+     3515, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     3516, 5143, 5143, 5143, 5143, 5143, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 5143, 5143, 5143, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3170, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3171, 5143, 5143, 5143, 5143, 5143, 3170, 3170, 3170,
+
+     3170, 3170, 3170, 3170, 3170, 5143, 5143, 5143, 3170, 3170,
+     3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170,
+     3170, 3170, 1458, 2850, 2203, 2850, 2850, 1458, 1458, 2851,
+     1458, 2512, 1458, 1458, 2852, 2515, 2512, 2869, 2853, 3176,
+     2855, 1458, 1458, 2512, 1458, 3177, 3177, 3177, 3177, 2851,
+     2851, 2851, 2851, 2512, 1458, 2512, 3177, 3177, 3177, 3177,
+     3177, 2851, 3177, 2851, 2851, 2851, 2851, 2851, 2851, 3177,
+     1458, 1458, 2511, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2516, 5143, 2518, 5143, 5143, 5143, 5143, 5143, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 5143, 5143, 5143, 2511,
+
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511,  599,  854,  854,  854,  854,  599, 1038,
+      855,  599,  856,  599, 1039, 1040,  858,  856,  859, 1041,
+      861, 1042,  599,  599,  856,  599, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043,  856,  599,  856, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1038,  599, 2516, 5143, 2854, 5143, 5143, 5143, 5143,
+     5143, 2851, 2851, 2851, 2851, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 2851, 2851, 2851, 2851, 2851, 5143, 2851, 5143,
+     5143, 5143, 5143, 5143, 5143, 2851, 1458, 2513, 2532, 2513,
+
+     2513, 1458, 2510, 1458, 1458, 1458, 1458, 2513, 2513, 1459,
+     1458, 1458, 2856, 1458, 2510, 1458, 1458, 1458, 1458, 2510,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 1458, 1458, 1458,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510,
+     2510, 2510, 2510, 2510, 2510, 1458, 1921, 3180, 3181, 3180,
+     3180, 1921, 1921, 3182, 1921, 3183, 1921, 1921, 3184, 3185,
+     3183, 3186, 3528, 3187, 3188, 1921, 1921, 3183, 1921, 3182,
+     3182, 3182, 3182, 3182, 3182, 3182, 3182, 3183, 1921, 3183,
+     3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+     3182, 3182, 3182, 3182, 1921, 1921, 2869, 5143, 2870, 5143,
+
+     5143, 5143, 5143, 5143, 2871, 2871, 2871, 2871, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 2871, 2871, 2871, 2871, 2871,
+     5143, 2871, 5143, 5143, 5143, 5143, 5143, 5143, 2871, 1458,
+     2855, 2573, 2855, 2855, 1458, 1458, 2872, 1458, 2855, 1458,
+     1458, 2852, 2873, 2855, 2874, 2875, 2876, 2855, 1458, 1458,
+     2855, 1458, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2855, 1458, 2855, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 1458, 1458, 1504,
+     2262, 2619, 2262, 2262, 1504, 1504, 2620, 1504, 2621, 1504,
+     1504, 2622, 2623, 2621, 2624, 2625, 2626, 2627, 1504, 1504,
+
+     2621, 1504, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2621, 1504, 2621, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 1504, 1504, 3191,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3192,
+     5143, 5143, 5143, 5143, 5143, 3191, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191, 5143, 5143, 5143, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+     3201, 5143, 3529, 5143, 5143, 5143, 5143, 5143, 3530, 3530,
+     3530, 3530, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3530,
+     3530, 3530, 3530, 3530, 5143, 3530, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 3530, 1921, 3188, 3531, 3188, 3188, 1921, 1921,
+     3532, 1921, 3188, 1921, 1921, 3184, 3533, 3188, 3534, 2875,
+     3535, 3188, 1921, 1921, 3188, 1921, 3532, 3532, 3532, 3532,
+     3532, 3532, 3532, 3532, 3188, 1921, 3188, 3532, 3532, 3532,
+     3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532,
+     3532, 1921, 1921, 1093, 1700, 1924, 1700, 1700, 1093, 1925,
+     1926, 1093, 1927, 1093, 1928, 1929, 3536, 1927, 1930, 3537,
+     1932, 1933, 1093, 1093, 1927, 1093, 1934, 1934, 1934, 1934,
+     1934, 1934, 1934, 1934, 1927, 1093, 1927, 1934, 1934, 1934,
+     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
+
+     1934, 1925, 1093, 3201, 5143, 3202, 5143, 5143, 5143, 5143,
+     5143, 3203, 3203, 3203, 3203, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3203, 3203, 3203, 3203, 3203, 5143, 3203, 5143,
+     5143, 5143, 5143, 5143, 5143, 3203, 1461, 2238,  854, 2238,
+     2238, 1461, 1461, 2879, 1461, 2535, 1461, 1461, 2590, 2538,
+     2535, 2894, 2591, 3204, 2592, 1461, 1461, 2535, 1461, 3205,
+     3205, 3205, 3205, 2879, 2879, 2879, 2879, 2535, 1461, 2535,
+     3205, 3205, 3205, 3205, 3205, 2879, 3205, 2879, 2879, 2879,
+     2879, 2879, 2879, 3205, 1461, 1461, 2534, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 2539, 5143, 2541, 5143, 5143, 5143,
+
+     5143, 5143, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     5143, 5143, 5143, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2539, 5143, 2880,
+     5143, 5143, 5143, 5143, 5143, 2879, 2879, 2879, 2879, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 2879, 2879, 2879, 2879,
+     2879, 5143, 2879, 5143, 5143, 5143, 5143, 5143, 5143, 2879,
+     1461, 2536, 2881, 2536, 2536, 1461, 2533, 1461, 1461, 1461,
+     1461, 2536, 2536, 1462, 1461, 1461, 2882, 1461, 2533, 1461,
+     1461, 1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533,
+     2533, 1461, 1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533,
+
+     2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461,
+     1937, 3208, 1922, 3208, 3208, 1937, 1937, 3209, 1937, 3210,
+     1937, 1937, 3211, 3212, 3210, 3213, 3543, 3214, 3215, 1937,
+     1937, 3210, 1937, 3209, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3210, 1937, 3210, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 1937, 1937,
+     2894, 5143, 2895, 5143, 5143, 5143, 5143, 5143, 2896, 2896,
+     2896, 2896, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2896,
+     2896, 2896, 2896, 2896, 5143, 2896, 5143, 5143, 5143, 5143,
+     5143, 5143, 2896, 1461, 2592, 2897, 2592, 2592, 1461, 1461,
+
+     2898, 1461, 2592, 1461, 1461, 2590, 2899, 2592, 2900, 2901,
+     2902, 2592, 1461, 1461, 2592, 1461, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2592, 1461, 2592, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 1461, 1461,  599,  862,  862,  862,  862,  599,  599,
+     1236,  599,  862,  599,  599,  857, 1062,  862, 1063, 1064,
+     1237,  862,  599,  599,  862,  599, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236,  862,  599,  862, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236,  599,  599, 3219, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 3220, 5143, 5143, 5143, 5143, 5143, 3219,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 5143, 5143, 5143,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219,
+     3219, 3219, 3219, 3219, 3229, 5143, 3546, 5143, 5143, 5143,
+     5143, 5143, 3547, 3547, 3547, 3547, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3547, 3547, 3547, 3547, 3547, 5143, 3547,
+     5143, 5143, 5143, 5143, 5143, 5143, 3547,  599, 2897, 2897,
+     2897, 2897,  599, 1038, 1061,  599,  862,  599, 1039, 1040,
+     1062,  862, 1063, 3217, 1065, 1042,  599,  599,  862,  599,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,  862,  599,
+
+      862, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 1038,  599, 1937, 3215, 3548,
+     3215, 3215, 1937, 1937, 3549, 1937, 3215, 1937, 1937, 3211,
+     3550, 3215, 3551, 2901, 3552, 3215, 1937, 1937, 3215, 1937,
+     3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3215, 1937,
+     3215, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549,
+     3549, 3549, 3549, 3549, 3549, 1937, 1937,  250, 1708, 1940,
+     1708, 1708,  250,  705,  737,  250,  738,  250,  598, 1941,
+     1754,  738,  740, 3553,  742, 1943,  250,  250,  738,  250,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,  738,  250,
+
+      738, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944,  705,  250, 3229, 5143, 3230,
+     5143, 5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231,
+     3231, 5143, 3231, 5143, 5143, 5143, 5143, 5143, 5143, 3231,
+      876, 3232, 3560, 3232, 3232,  876, 1728, 1766,  876, 1767,
+      876, 1483, 3561, 1769, 1767, 1770, 3562, 1772, 3563,  876,
+      876, 1767,  876, 3564, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 1767,  876, 1767, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 1728,  876,
+
+     1234, 1955, 2203, 1955, 1955, 1234, 2204, 2205, 1234, 2206,
+     1234, 2207, 2208, 3565, 2206, 2210, 3566, 2212, 2213, 1234,
+     1234, 2206, 1234, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+     2214, 2206, 1234, 2206, 2214, 2214, 2214, 2214, 2214, 2214,
+     2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2204, 1234,
+     1234, 2297, 2563, 2297, 2297, 1234, 1234, 2920, 1234, 2297,
+     1234, 1234, 2295, 2565, 2297, 2930, 2567, 3234, 2297, 1234,
+     1234, 2297, 1234, 3235, 3235, 3235, 3235, 2920, 2920, 2920,
+     2920, 2297, 1234, 2297, 3235, 3235, 3235, 3235, 3235, 2920,
+     3235, 2920, 2920, 2920, 2920, 2920, 2920, 3235, 1234, 1234,
+
+      599,  712,  712,  712,  712,  599,  599,  855,  599,  856,
+      599,  599,  857,  858,  856,  859,  860,  861,  862,  599,
+      599,  856,  599,  855,  855,  855,  855,  855,  855,  855,
+      855,  856,  599,  856,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  599,  599,
+     2566, 5143, 2921, 5143, 5143, 5143, 5143, 5143, 2920, 2920,
+     2920, 2920, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2920,
+     2920, 2920, 2920, 2920, 5143, 2920, 5143, 5143, 5143, 5143,
+     5143, 5143, 2920, 1711, 2918, 3236, 2918, 2918, 1711, 1711,
+     3237, 1711, 2918, 1711, 1711, 2914, 3238, 2918, 3239, 3567,
+
+     3240, 2918, 1711, 1711, 2918, 1711, 3237, 3237, 3237, 3237,
+     3237, 3237, 3237, 3237, 2918, 1711, 2918, 3237, 3237, 3237,
+     3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237,
+     3237, 1711, 1711, 2564, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2568, 5143, 5143, 5143, 5143, 5143, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 5143, 5143, 5143,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2930, 5143, 2931, 5143, 5143, 5143,
+     5143, 5143, 2932, 2932, 2932, 2932, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2932, 2932, 2932, 2932, 2932, 5143, 2932,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 2932,  946, 3244, 3568,
+     3244, 3244,  946, 2036, 1778,  946, 1779,  946, 2035, 3569,
+     1781, 1779, 1782, 3570, 1784, 3571,  946,  946, 1779,  946,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 1779,  946,
+     1779, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 2036,  946,  710, 1232, 1232,
+     1232, 1232,  710,  710, 1471,  710, 1232,  710,  710, 1228,
+     1472, 1232, 1473, 3573, 1474, 1232,  710,  710, 1232,  710,
+     1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1232,  710,
+     1232, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+
+     1471, 1471, 1471, 1471, 1471,  710,  710, 1061, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1065, 5143, 5143,
+     5143, 5143, 5143, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 5143, 5143, 5143, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  213, 1082,
+     1082, 1082, 1082,  213,  382,  337,  213,  338,  213,  381,
+     1256,  760,  338,  341, 3574,  343, 1258,  213,  213,  338,
+      213, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  338,
+      213,  338, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259,  382,  213, 1245, 5143,
+
+     1246, 5143, 5143, 5143, 5143, 5143, 1247, 1247, 1247, 1247,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1247, 1247, 1247,
+     1247, 1247, 5143, 1247, 5143, 5143, 5143, 5143, 5143, 5143,
+     1247, 2228, 3253, 3575, 3253, 3253, 2228, 2228, 3576, 2228,
+     3253, 2228, 2228, 3577, 3578, 3253, 3579, 3580, 3581, 3253,
+     2228, 2228, 3253, 2228, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3253, 2228, 3253, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 2228,
+     2228, 1479, 2362, 2563, 2362, 2362, 1479, 1479, 2939, 1479,
+     2576, 1479, 1479, 2701, 2579, 2576, 2951, 2702, 3254, 2703,
+
+     1479, 1479, 2576, 1479, 3255, 3255, 3255, 3255, 2939, 2939,
+     2939, 2939, 2576, 1479, 2576, 3255, 3255, 3255, 3255, 3255,
+     2939, 3255, 2939, 2939, 2939, 2939, 2939, 2939, 3255, 1479,
+     1479, 2575, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2580,
+     5143, 2582, 5143, 5143, 5143, 5143, 5143, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 5143, 5143, 5143, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2580, 5143, 2940, 5143, 5143, 5143, 5143, 5143,
+     2939, 2939, 2939, 2939, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2939, 2939, 2939, 2939, 2939, 5143, 2939, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 2939, 1479, 2577, 2897, 2577, 2577,
+     1479, 2574, 1479, 1479, 1479, 1479, 2577, 2577, 1480, 1479,
+     1479, 2941, 1479, 2574, 1479, 1479, 1479, 1479, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 1479, 1479, 1479, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 1479, 1960, 3258, 3236, 3258, 3258,
+     1960, 1960, 3259, 1960, 3260, 1960, 1960, 3261, 3262, 3260,
+     3263, 3583, 3264, 3265, 1960, 1960, 3260, 1960, 3259, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3260, 1960, 3260, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259,
+
+     3259, 3259, 3259, 1960, 1960, 2951, 5143, 2952, 5143, 5143,
+     5143, 5143, 5143, 2953, 2953, 2953, 2953, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 2953, 2953, 2953, 2953, 2953, 5143,
+     2953, 5143, 5143, 5143, 5143, 5143, 5143, 2953, 1479, 2703,
+     2954, 2703, 2703, 1479, 1479, 2955, 1479, 2703, 1479, 1479,
+     2701, 2956, 2703, 2957, 2958, 2959, 2703, 1479, 1479, 2703,
+     1479, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2703,
+     1479, 2703, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 1479, 1479, 3267, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3268, 5143,
+
+     5143, 5143, 5143, 5143, 3267, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267, 5143, 5143, 5143, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3277,
+     5143, 3584, 5143, 5143, 5143, 5143, 5143, 3585, 3585, 3585,
+     3585, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3585, 3585,
+     3585, 3585, 3585, 5143, 3585, 5143, 5143, 5143, 5143, 5143,
+     5143, 3585, 1960, 3265, 3586, 3265, 3265, 1960, 1960, 3587,
+     1960, 3265, 1960, 1960, 3261, 3588, 3265, 3589, 2958, 3590,
+     3265, 1960, 1960, 3265, 1960, 3587, 3587, 3587, 3587, 3587,
+     3587, 3587, 3587, 3265, 1960, 3265, 3587, 3587, 3587, 3587,
+
+     3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587,
+     1960, 1960,  257, 1725, 1962, 1725, 1725,  257,  952,  778,
+      257,  779,  257,  951, 1963, 1810,  779,  781, 3591,  783,
+     1965,  257,  257,  779,  257, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966,  779,  257,  779, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+      952,  257, 3277, 5143, 3278, 5143, 5143, 5143, 5143, 5143,
+     3279, 3279, 3279, 3279, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3279, 3279, 3279, 3279, 3279, 5143, 3279, 5143, 5143,
+     5143, 5143, 5143, 5143, 3279,  248, 1817, 1817, 1817, 1817,
+
+      248,  377,  729,  248,  610,  248,  336, 1701,  730,  610,
+      731, 2086,  733, 1703,  248,  248,  610,  248, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087,  610,  248,  610, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087,  377,  248,  517, 3285, 2985, 3285, 3285,
+      517, 1264, 1083,  517, 1084,  517, 1262, 3597, 1086, 1084,
+     1087, 3598, 1089, 3599,  517,  517, 1084,  517, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 1084,  517, 1084, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 1264,  517,  512,  847, 1033,  847,  847,
+
+      512, 1034,  512,  512,  512,  512,  847,  847, 2614,  512,
+      512, 3601,  512, 1034,  512,  512,  512,  512, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034,  512,  512,  512, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034,  512,  784, 1360, 1360, 1360, 1360,
+      784, 1359,  784,  784,  784,  784, 1360, 1360,  785,  784,
+      784, 1367,  784, 1359,  784,  784,  784,  784, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359,  784,  784,  784, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359,  784, 1504, 2262, 2619, 2262, 2262,
+
+     1504, 1504, 2982, 1504, 2621, 1504, 1504, 2622, 2623, 2621,
+     2998, 2625, 3291, 2627, 1504, 1504, 2621, 1504, 3292, 3292,
+     3292, 3292, 2982, 2982, 2982, 2982, 2621, 1504, 2621, 3292,
+     3292, 3292, 3292, 3292, 2982, 3292, 2982, 2982, 2982, 2982,
+     2982, 2982, 3292, 1504, 1504, 2620, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 2624, 5143, 2626, 5143, 5143, 5143, 5143,
+     5143, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 5143,
+     5143, 5143, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2624, 5143, 2983, 5143,
+     5143, 5143, 5143, 5143, 2982, 2982, 2982, 2982, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 2982, 2982, 2982, 2982, 2982,
+     5143, 2982, 5143, 5143, 5143, 5143, 5143, 5143, 2982, 1504,
+     2984, 2985, 2984, 2984, 1504, 2986, 1504, 1504, 1504, 1504,
+     2984, 2984, 1505, 1504, 1504, 2987, 1504, 2986, 1504, 1504,
+     1504, 1504, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     1504, 1504, 1504, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 1504, 1987,
+     3295, 3296, 3295, 3295, 1987, 1987, 3297, 1987, 3298, 1987,
+     1987, 3299, 3300, 3298, 3301, 3606, 3302, 3303, 1987, 1987,
+     3298, 1987, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297,
+
+     3298, 1987, 3298, 3297, 3297, 3297, 3297, 3297, 3297, 3297,
+     3297, 3297, 3297, 3297, 3297, 3297, 3297, 1987, 1987, 2998,
+     5143, 2999, 5143, 5143, 5143, 5143, 5143, 3000, 3000, 3000,
+     3000, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3000, 3000,
+     3000, 3000, 3000, 5143, 3000, 5143, 5143, 5143, 5143, 5143,
+     5143, 3000, 1504, 2627, 3001, 2627, 2627, 1504, 1504, 3002,
+     1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004, 3005, 3006,
+     2627, 1504, 1504, 2627, 1504, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 2627, 1504, 2627, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+
+     1504, 1504, 3305, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3306, 5143, 5143, 5143, 5143, 5143, 3305, 3305,
+     3305, 3305, 3305, 3305, 3305, 3305, 5143, 5143, 5143, 3305,
+     3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 3315, 5143, 3607, 5143, 5143, 5143, 5143,
+     5143, 3608, 3608, 3608, 3608, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3608, 3608, 3608, 3608, 3608, 5143, 3608, 5143,
+     5143, 5143, 5143, 5143, 5143, 3608, 1987, 3303, 3609, 3303,
+     3303, 1987, 1987, 3610, 1987, 3303, 1987, 1987, 3299, 3611,
+     3303, 3612, 3005, 3613, 3303, 1987, 1987, 3303, 1987, 3610,
+
+     3610, 3610, 3610, 3610, 3610, 3610, 3610, 3303, 1987, 3303,
+     3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
+     3610, 3610, 3610, 3610, 1987, 1987, 1093, 1744, 1713, 1744,
+     1744, 1093, 1093, 1926, 1093, 1927, 1093, 1093, 1989, 3536,
+     1927, 1930, 3614, 1932, 1991, 1093, 1093, 1927, 1093, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1927, 1093, 1927,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1093, 1093, 3315, 5143, 3316, 5143,
+     5143, 5143, 5143, 5143, 3317, 3317, 3317, 3317, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3317, 3317, 3317, 3317, 3317,
+
+     5143, 3317, 5143, 5143, 5143, 5143, 5143, 5143, 3317,  784,
+     1147, 1147, 1147, 1147,  784, 1359, 1148,  784,  961,  784,
+     1360, 1361, 3618,  961, 1151, 3619, 1153, 1363,  784,  784,
+      961,  784, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+      961,  784,  961, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1359,  784,  215,
+     3325, 1962, 3325, 3325,  215,  750,  756,  215,  626,  215,
+      749, 1714,  626,  626,  757, 3620,  759, 1716,  215,  215,
+      626,  215, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+      626,  215,  626, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+
+     3621, 3621, 3621, 3621, 3621, 3621, 3621,  750,  215,  734,
+     1501, 1749, 1501, 1501,  734,  734, 1750,  734, 1501,  734,
+      734, 1497, 1751, 1501, 1752, 1995, 1753, 1501,  734,  734,
+     1501,  734, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+     1501,  734, 1501, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+     1750, 1750, 1750, 1750, 1750, 1750, 1750,  734,  734,  517,
+      890, 1082,  890,  890,  517,  517, 1083,  517, 1084,  517,
+      517, 1085, 1086, 1084, 1087, 1088, 1089, 1090,  517,  517,
+     1084,  517, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1084,  517, 1084, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+
+     1083, 1083, 1083, 1083, 1083, 1083, 1083,  517,  517, 1260,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1261,
+     5143, 5143, 5143, 5143, 5143, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 5143, 5143, 5143, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+      517, 1262, 1263, 1262, 1262,  517, 1264,  517,  517,  517,
+      517, 1262, 1262,  518,  517,  517, 1265,  517, 1264,  517,
+      517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264,  517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,  517,
+
+     1756, 2642, 2643, 2642, 2642, 1756, 1756, 2644, 1756, 2645,
+     1756, 1756, 2646, 2647, 2645, 2648, 2649, 2650, 2651, 1756,
+     1756, 2645, 1756, 2644, 2644, 2644, 2644, 2644, 2644, 2644,
+     2644, 2645, 1756, 2645, 2644, 2644, 2644, 2644, 2644, 2644,
+     2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 1756, 1756,
+     1278, 5143, 1279, 5143, 5143, 5143, 5143, 5143, 1280, 1280,
+     1280, 1280, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1280,
+     1280, 1280, 1280, 1280, 5143, 1280, 5143, 5143, 5143, 5143,
+     5143, 5143, 1280,  517, 1090, 1281, 1090, 1090,  517,  517,
+     1282,  517, 1090,  517,  517, 1085, 1283, 1090, 1284, 1285,
+
+     1286, 1090,  517,  517, 1090,  517, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1090,  517, 1090, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282,  517,  517, 2665, 3336, 3624, 3336, 3336, 2665, 2665,
+     3625, 2665, 3336, 2665, 2665, 3332, 3626, 3336, 3627, 3628,
+     3629, 3336, 2665, 2665, 3336, 2665, 3625, 3625, 3625, 3625,
+     3625, 3625, 3625, 3625, 3336, 2665, 3336, 3625, 3625, 3625,
+     3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625,
+     3625, 2665, 2665, 1760, 2668, 3001, 2668, 2668, 1760, 1760,
+     3341, 1760, 3025, 1760, 1760, 3026, 3027, 3025, 3028, 3029,
+
+     3342, 3031, 1760, 1760, 3025, 1760, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3025, 1760, 3025, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 1760, 1760, 3356, 5143, 3632, 5143, 5143, 5143, 5143,
+     5143, 3633, 3633, 3633, 3633, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3633, 3633, 3633, 3633, 3633, 5143, 3633, 5143,
+     5143, 5143, 5143, 5143, 5143, 3633, 1760, 3343, 3344, 3343,
+     3343, 1760, 3345, 1760, 1760, 1760, 1760, 3343, 3343, 1761,
+     1760, 1760, 3346, 1760, 3345, 1760, 1760, 1760, 1760, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760, 1760, 1760,
+
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 3345, 3345, 3345, 3345, 1760,  213, 1281, 1281, 1281,
+     1281,  213,  382,  398,  213,  344,  213,  381, 1256,  399,
+      344,  400, 1506,  402, 1258,  213,  213,  344,  213, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507,  344,  213,  344,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507,  382,  213, 3024, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3030, 5143, 5143, 5143,
+     5143, 5143, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     5143, 5143, 5143, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 2286, 3636, 3609,
+     3636, 3636, 2286, 2286, 3637, 2286, 3638, 2286, 2286, 3639,
+     3640, 3638, 3641, 3029, 3642, 3643, 2286, 2286, 3638, 2286,
+     3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3638, 2286,
+     3638, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637,
+     3637, 3637, 3637, 3637, 3637, 2286, 2286, 1291, 2006, 1962,
+     2006, 2006, 1291, 1291, 2288, 1291, 2289, 1291, 1291, 2290,
+     3644, 2289, 2291, 3645, 2293, 2109, 1291, 1291, 2289, 1291,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2289, 1291,
+     2289, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+
+     2288, 2288, 2288, 2288, 2288, 1291, 1291, 3356, 5143, 3357,
+     5143, 5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358,
+     3358, 5143, 3358, 5143, 5143, 5143, 5143, 5143, 5143, 3358,
+     1760, 3031, 3359, 3031, 3031, 1760, 1760, 3360, 1760, 3031,
+     1760, 1760, 3026, 3361, 3031, 3362, 3363, 3364, 3031, 1760,
+     1760, 3031, 1760, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3031, 1760, 3031, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 1760, 1760,
+     3646, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3647, 5143, 5143, 5143, 5143, 5143, 3646, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 5143, 5143, 5143, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646,
+     3646, 2004, 3355, 3648, 3355, 3355, 2004, 2004, 3649, 2004,
+     3355, 2004, 2004, 3350, 3650, 3355, 3651, 3652, 3653, 3355,
+     2004, 2004, 3355, 2004, 3649, 3649, 3649, 3649, 3649, 3649,
+     3649, 3649, 3355, 2004, 3355, 3649, 3649, 3649, 3649, 3649,
+     3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649, 2004,
+     2004, 3656, 5143, 3657, 5143, 5143, 5143, 5143, 5143, 3658,
+     3658, 3658, 3658, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3658, 3658, 3658, 3658, 3658, 5143, 3658, 5143, 5143, 5143,
+     5143, 5143, 5143, 3658,  452, 1105, 1082, 1105, 1105,  452,
+     1106,  452,  452,  452,  452, 1105, 1105,  453,  452,  452,
+     1107,  452, 1106,  452,  452,  452,  452, 1106, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106,  452,  452,  452, 1106, 1106,
+     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+     1106, 1106, 1106,  452,  452,  911, 1121,  911,  911,  452,
+      452, 1122,  452,  911,  452,  452,  906, 1123,  911, 1124,
+     1125, 1126,  911,  452,  452,  911,  452, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122,  911,  452,  911, 1122, 1122,
+
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122,  452,  452,  452,  746,  903,  746,  746,  452,
+      452, 1103,  452,  905,  452,  452,  906,  907,  905,  908,
+      909, 1104,  911,  452,  452,  905,  452, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103,  905,  452,  905, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103,  452,  452, 3018, 3372, 3660, 3372, 3372, 3018,
+     3661, 3018, 3018, 3018, 3018, 3372, 3372, 3019, 3018, 3018,
+     3662, 3018, 3661, 3018, 3018, 3018, 3018, 3661, 3661, 3661,
+     3661, 3661, 3661, 3661, 3661, 3018, 3018, 3018, 3661, 3661,
+
+     3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661,
+     3661, 3661, 3661, 3018, 3018, 3373, 3663, 3373, 3373, 3018,
+     3018, 3664, 3018, 3373, 3018, 3018, 3665, 3666, 3373, 3667,
+     3668, 3669, 3373, 3018, 3018, 3373, 3018, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3373, 3018, 3373, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3018, 3018,  213,  308,  308,  308,  308,  213,
+      213,  337,  213,  338,  213,  213,  339,  340,  338,  341,
+      342,  343,  344,  213,  213,  338,  213,  337,  337,  337,
+      337,  337,  337,  337,  337,  338,  213,  338,  337,  337,
+
+      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  213,  213, 1307, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 1308, 5143, 5143, 5143, 5143, 5143,
+     1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 5143, 5143,
+     5143, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 1307, 1307, 1307, 1535, 2335, 2719, 2335, 2335,
+     1535, 1535, 3670, 1535, 2335, 1535, 1535, 2330, 3671, 2335,
+     3672, 3673, 3674, 2335, 1535, 1535, 2335, 1535, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 2335, 1535, 2335, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+
+     3670, 3670, 3670, 1535, 1535, 1317, 5143, 1318, 5143, 5143,
+     5143, 5143, 5143, 1319, 1319, 1319, 1319, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 1319, 1319, 1319, 1319, 1319, 5143,
+     1319, 5143, 5143, 5143, 5143, 5143, 5143, 1319,  536, 3380,
+     3001, 3380, 3380,  536, 1339, 1135,  536, 1136,  536, 1338,
+     3677, 1138, 1136, 1139, 3678, 1141, 3679,  536,  536, 1136,
+      536, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 1136,
+      536, 1136, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 1339,  536,  776, 1559,
+     1805, 1559, 1559,  776,  776, 1806,  776, 1559,  776,  776,
+
+     1555, 1807, 1559, 1808, 2075, 1809, 1559,  776,  776, 1559,
+      776, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1559,
+      776, 1559, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+     1806, 1806, 1806, 1806, 1806, 1806,  776,  776,  536,  948,
+     1121,  948,  948,  536,  536, 1135,  536, 1136,  536,  536,
+     1137, 1138, 1136, 1139, 1140, 1141, 1142,  536,  536, 1136,
+      536, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1136,
+      536, 1136, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135,  536,  536, 1336, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1337, 5143,
+
+     5143, 5143, 5143, 5143, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 5143, 5143, 5143, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,  536,
+     1338, 1281, 1338, 1338,  536, 1339,  536,  536,  536,  536,
+     1338, 1338,  537,  536,  536, 1340,  536, 1339,  536,  536,
+      536,  536, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+      536,  536,  536, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,  536, 1812,
+     2718, 2719, 2718, 2718, 1812, 1812, 2720, 1812, 2721, 1812,
+     1812, 2722, 2723, 2721, 2724, 2725, 2726, 2727, 1812, 1812,
+
+     2721, 1812, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
+     2721, 1812, 2721, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
+     2720, 2720, 2720, 2720, 2720, 2720, 2720, 1812, 1812, 1350,
+     5143, 1351, 5143, 5143, 5143, 5143, 5143, 1352, 1352, 1352,
+     1352, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1352, 1352,
+     1352, 1352, 1352, 5143, 1352, 5143, 5143, 5143, 5143, 5143,
+     5143, 1352,  536, 1142, 1353, 1142, 1142,  536,  536, 1354,
+      536, 1142,  536,  536, 1137, 1355, 1142, 1356, 1357, 1358,
+     1142,  536,  536, 1142,  536, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1142,  536, 1142, 1354, 1354, 1354, 1354,
+
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+      536,  536, 2698, 3391, 3681, 3391, 3391, 2698, 2698, 3682,
+     2698, 3391, 2698, 2698, 3387, 3683, 3391, 3684, 3685, 3686,
+     3391, 2698, 2698, 3391, 2698, 3682, 3682, 3682, 3682, 3682,
+     3682, 3682, 3682, 3391, 2698, 3391, 3682, 3682, 3682, 3682,
+     3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682,
+     2698, 2698, 1815, 3071, 2753, 3071, 3071, 1815, 1815, 3394,
+     1815, 3071, 1815, 1815, 3395, 3074, 3071, 3075, 3396, 3397,
+     3071, 1815, 1815, 3071, 1815, 3394, 3394, 3394, 3394, 3394,
+     3394, 3394, 3394, 3071, 1815, 3071, 3394, 3394, 3394, 3394,
+
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     1815, 1815, 1815, 3072, 3082, 3072, 3072, 1815, 3069, 1815,
+     1815, 1815, 1815, 3072, 3072, 1816, 1815, 1815, 3398, 1815,
+     3069, 1815, 1815, 1815, 1815, 3069, 3069, 3069, 3069, 3069,
+     3069, 3069, 3069, 1815, 1815, 1815, 3069, 3069, 3069, 3069,
+     3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069,
+     3069, 1815, 3409, 5143, 3689, 5143, 5143, 5143, 5143, 5143,
+     3690, 3690, 3690, 3690, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3690, 3690, 3690, 3690, 3690, 5143, 3690, 5143, 5143,
+     5143, 5143, 5143, 5143, 3690, 3070, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 3077, 5143, 5143, 5143, 5143,
+     5143, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 5143,
+     5143, 5143, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070,  784, 1147, 1147, 1147,
+     1147,  784, 1359, 1148,  784,  961,  784, 1360, 1361, 1150,
+      961, 1151, 1362, 1153, 1363,  784,  784,  961,  784, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364,  961,  784,  961,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1359,  784, 2393, 3693, 3694, 3693,
+     3693, 2393, 2393, 3695, 2393, 3693, 2393, 2393, 3696, 3697,
+
+     3693, 3698, 3396, 3699, 3693, 2393, 2393, 3693, 2393, 3695,
+     3695, 3695, 3695, 3695, 3695, 3695, 3695, 3693, 2393, 3693,
+     3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695,
+     3695, 3695, 3695, 3695, 2393, 2393, 1291, 2085, 2396, 2085,
+     2085, 1291, 2397, 2398, 1291, 2109, 1291, 2237, 2399, 3700,
+     2109, 2400, 3701, 2402, 2403, 1291, 1291, 2109, 1291, 2404,
+     2404, 2404, 2404, 2404, 2404, 2404, 2404, 2109, 1291, 2109,
+     2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404,
+     2404, 2404, 2404, 2404, 2397, 1291, 3409, 5143, 3410, 5143,
+     5143, 5143, 5143, 5143, 3411, 3411, 3411, 3411, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 3411, 3411, 3411, 3411, 3411,
+     5143, 3411, 5143, 5143, 5143, 5143, 5143, 5143, 3411, 1818,
+     2764, 1147, 2764, 2764, 1818, 1818, 3412, 1818, 2764, 1818,
+     1818, 3110, 3087, 2764, 3088, 3111, 3413, 2764, 1818, 1818,
+     2764, 1818, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     2764, 1818, 2764, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 1818, 1818, 3425,
+     5143, 3702, 5143, 5143, 5143, 5143, 5143, 3703, 3703, 3703,
+     3703, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3703, 3703,
+     3703, 3703, 3703, 5143, 3703, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 3703,  784, 1360, 1360, 1360, 1360,  784, 1359,  784,
+      784,  784,  784, 1360, 1360,  785,  784,  784, 1367,  784,
+     1359,  784,  784,  784,  784, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359,  784,  784,  784, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359,  784, 3084, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3090, 5143, 5143, 5143, 5143, 5143, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 5143, 5143, 5143, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 1818, 3085, 3414, 3085, 3085, 1818, 3083,
+
+     1818, 1818, 1818, 1818, 3085, 3085, 1819, 1818, 1818, 3415,
+     1818, 3083, 1818, 1818, 1818, 1818, 3083, 3083, 3083, 3083,
+     3083, 3083, 3083, 3083, 1818, 1818, 1818, 3083, 3083, 3083,
+     3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083,
+     3083, 3083, 1818, 2407, 3706, 2394, 3706, 3706, 2407, 2407,
+     3707, 2407, 3706, 2407, 2407, 3708, 3709, 3706, 3710, 3111,
+     3711, 3706, 2407, 2407, 3706, 2407, 3707, 3707, 3707, 3707,
+     3707, 3707, 3707, 3707, 3706, 2407, 3706, 3707, 3707, 3707,
+     3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707,
+     3707, 2407, 2407,  250, 2091, 2410, 2091, 2091,  250,  705,
+
+      899,  250,  743,  250,  598, 1941, 1839,  743,  900, 3712,
+      902, 1943,  250,  250,  743,  250, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412,  743,  250,  743, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+     2412,  705,  250, 3425, 5143, 3426, 5143, 5143, 5143, 5143,
+     5143, 3427, 3427, 3427, 3427, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3427, 3427, 3427, 3427, 3427, 5143, 3427, 5143,
+     5143, 5143, 5143, 5143, 5143, 3427,  784,  961,  961,  961,
+      961,  784,  784, 1148,  784,  961,  784,  784, 1149, 1150,
+      961, 1151, 1152, 1153,  961,  784,  784,  961,  784, 1148,
+
+     1148, 1148, 1148, 1148, 1148, 1148, 1148,  961,  784,  961,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148,  784,  784, 1588, 2430, 2768, 2430,
+     2430, 1588, 1588, 3096, 1588, 2430, 1588, 1588, 2769, 2758,
+     2430, 3107, 2770, 3431, 2430, 1588, 1588, 2430, 1588, 3432,
+     3432, 3432, 3432, 3096, 3096, 3096, 3096, 2430, 1588, 2430,
+     3432, 3432, 3432, 3432, 3432, 3096, 3432, 3096, 3096, 3096,
+     3096, 3096, 3096, 3432, 1588, 1588, 2755, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 2759, 5143, 2761, 5143, 5143, 5143,
+     5143, 5143, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+
+     5143, 5143, 5143, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2759, 5143, 3097,
+     5143, 5143, 5143, 5143, 5143, 3096, 3096, 3096, 3096, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3096, 3096, 3096, 3096,
+     3096, 5143, 3096, 5143, 5143, 5143, 5143, 5143, 5143, 3096,
+     1588, 2756, 1147, 2756, 2756, 1588, 2754, 1588, 1588, 1588,
+     1588, 2756, 2756, 1589, 1588, 1588, 3098, 1588, 2754, 1588,
+     1588, 1588, 1588, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 1588, 1588, 1588, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 1588,
+
+     2094, 3435, 3436, 3435, 3435, 2094, 2094, 3437, 2094, 3435,
+     2094, 2094, 3438, 3439, 3435, 3440, 3714, 3441, 3435, 2094,
+     2094, 3435, 2094, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3435, 2094, 3435, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 2094, 2094,
+     3107, 5143, 3108, 5143, 5143, 5143, 5143, 5143, 3109, 3109,
+     3109, 3109, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3109,
+     3109, 3109, 3109, 3109, 5143, 3109, 5143, 5143, 5143, 5143,
+     5143, 5143, 3109, 1841, 2767, 3112, 2767, 2767, 1841, 1841,
+     3445, 1841, 2767, 1841, 1841, 3114, 3115, 2767, 3116, 3117,
+
+     3446, 2767, 1841, 1841, 2767, 1841, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 2767, 1841, 2767, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 1841, 1841, 3459, 5143, 3716, 5143, 5143, 5143, 5143,
+     5143, 3717, 3717, 3717, 3717, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3717, 3717, 3717, 3717, 3717, 5143, 3717, 5143,
+     5143, 5143, 5143, 5143, 5143, 3717, 1841, 3447, 3448, 3447,
+     3447, 1841, 3449, 1841, 1841, 1841, 1841, 3447, 3447, 1842,
+     1841, 1841, 3450, 1841, 3449, 1841, 1841, 1841, 1841, 3449,
+     3449, 3449, 3449, 3449, 3449, 3449, 3449, 1841, 1841, 1841,
+
+     3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449,
+     3449, 3449, 3449, 3449, 3449, 1841,  255, 1380, 1380, 1380,
+     1380,  255,  469,  403,  255,  345,  255,  468, 1590,  405,
+      345,  406, 1591,  408, 1592,  255,  255,  345,  255, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593,  345,  255,  345,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593,  469,  255, 3113, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3118, 5143, 5143, 5143,
+     5143, 5143, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     5143, 5143, 5143, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 2427, 3720, 3721,
+     3720, 3720, 2427, 2427, 3722, 2427, 3720, 2427, 2427, 3723,
+     3724, 3720, 3725, 3117, 3726, 3720, 2427, 2427, 3720, 2427,
+     3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3720, 2427,
+     3720, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722,
+     3722, 3722, 3722, 3722, 3722, 2427, 2427, 1291, 2109, 2096,
+     2109, 2109, 1291, 1291, 2398, 1291, 2109, 1291, 1291, 2290,
+     3700, 2109, 2400, 3727, 2402, 2109, 1291, 1291, 2109, 1291,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2109, 1291,
+     2109, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+
+     2398, 2398, 2398, 2398, 2398, 1291, 1291, 3459, 5143, 3460,
+     5143, 5143, 5143, 5143, 5143, 3461, 3461, 3461, 3461, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3461, 3461, 3461, 3461,
+     3461, 5143, 3461, 5143, 5143, 5143, 5143, 5143, 5143, 3461,
+      550, 3462, 3112, 3462, 3462,  550, 1390, 1156,  550,  967,
+      550, 1389, 3728, 1158,  967, 1159, 3729, 1161, 3730,  550,
+      550,  967,  550, 3731, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731,  967,  550,  967, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 1390,  550,
+      561,  812,  812,  812,  812,  561,  561,  813,  561,  561,
+
+      561,  561,  561,  562,  561,  561,  984,  561,  561,  561,
+      561,  561,  561,  813,  813,  813,  813,  813,  813,  813,
+      813,  561,  561,  561,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  985,  561,
+     2130, 3467, 3732, 3467, 3467, 2130, 2130, 3733, 2130, 2130,
+     2130, 2130, 2130, 2131, 2130, 2130, 3734, 2130, 2130, 2130,
+     2130, 2130, 2130, 3733, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 2130, 2130, 2130, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3735, 2130,
+      260, 1408, 1408, 1408, 1408,  260,  260,  565,  260,  260,
+
+      260,  260,  260,  261,  260,  260, 1632,  260,  260,  260,
+      260,  260,  260,  565,  565,  565,  565,  565,  565,  565,
+      565,  260,  260,  260,  565,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565, 1633,  260,
+      559, 3471, 3468, 3471, 3471,  559,  559, 1871,  559,  559,
+      559,  559,  559,  560,  559,  559, 3738,  559,  559,  559,
+      559,  559,  559, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871,  559,  559,  559, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 3739,  559,
+     2484, 3483, 3752, 3483, 3483, 2484, 2484, 3753, 2484, 2484,
+
+     2484, 3754, 3754, 2485, 2484, 2484, 3755, 2484, 3754, 2484,
+     2484, 2484, 2484, 3753, 3753, 3753, 3753, 3753, 3753, 3753,
+     3753, 2484, 2484, 2484, 3753, 3753, 3753, 3753, 3753, 3753,
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3756, 2484,
+     1909, 3141, 3149, 3141, 3141, 1909, 1909, 3484, 1909, 1909,
+     1909, 3141, 3141, 1909, 1909, 1909, 3485, 3486, 3141, 1909,
+     1909, 1909, 1909, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 1909, 1909, 1909, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3143, 1909,
+     3759, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3760, 5143, 5143, 5143, 5143, 5143, 3759, 3759, 3759, 3759,
+     3759, 3759, 3759, 3759, 5143, 5143, 5143, 3759, 3759, 3759,
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3759, 2487, 3494, 3764, 3494, 3494, 2487, 2487, 3765, 2487,
+     2487, 2487, 3766, 3766, 2488, 2487, 2487, 3767, 2487, 3766,
+     2487, 2487, 2487, 2487, 3765, 3765, 3765, 3765, 3765, 3765,
+     3765, 3765, 2487, 2487, 2487, 3765, 3765, 3765, 3765, 3765,
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3768,
+     2487, 1196, 1673, 1673, 1673, 1673, 1196, 1196, 1890, 1196,
+     1196, 1196, 1891, 1891, 1197, 1196, 1196, 1892, 1196, 1891,
+
+     1196, 1196, 1196, 1196, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1196, 1196, 1196, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1893,
+     1196, 2163, 3499, 1673, 3499, 3499, 2163, 2163, 3769, 2163,
+     2163, 2163, 3499, 3499, 2164, 2163, 2163, 3770, 3771, 3499,
+     2163, 2163, 2163, 2163, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 2163, 2163, 2163, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3501,
+     2163, 3772, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2163, 5143, 5143, 5143, 5143, 5143, 3772, 3772, 3772,
+
+     3772, 3772, 3772, 3772, 3772, 5143, 5143, 5143, 3772, 3772,
+     3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772,
+     3772, 3772, 2487, 3502, 1673, 3502, 3502, 2487, 2487, 3775,
+     2487, 2487, 2487, 2487, 2487, 2488, 2487, 2487, 3776, 2487,
+     2487, 2487, 2487, 2487, 2487, 3775, 3775, 3775, 3775, 3775,
+     3775, 3775, 3775, 2487, 2487, 2487, 3775, 3775, 3775, 3775,
+     3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775,
+     2487, 2487, 1194, 1883, 2152, 1883, 1883, 1194, 1194, 3777,
+     1194, 1194, 1194, 1883, 1883, 1195, 1194, 1194, 2154, 3778,
+     1883, 1194, 1194, 1194, 1194, 3777, 3777, 3777, 3777, 3777,
+
+     3777, 3777, 3777, 1194, 1194, 1194, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     2155, 1194, 3503, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3504, 5143, 5143, 5143, 5143, 5143, 3503, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 5143, 5143, 5143, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3503, 2501, 3507, 3782, 3507, 3507, 2501, 2501,
+     3783, 2501, 2501, 2501, 2501, 2501, 2502, 2501, 2501, 3784,
+     2501, 2501, 2501, 2501, 2501, 2501, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3783, 2501, 2501, 2501, 3783, 3783, 3783,
+
+     3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 2501, 2501, 3508, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3509, 5143, 5143, 5143, 5143, 5143, 3508,
+     3508, 3508, 3508, 3508, 3508, 3508, 3508, 5143, 5143, 5143,
+     3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508,
+     3508, 3508, 3508, 3508, 1196, 1435, 1435, 1435, 1435, 1196,
+     1196, 1674, 1196, 1196, 1196, 1196, 1196, 1197, 1196, 1196,
+     1675, 1196, 1196, 1196, 1196, 1196, 1196, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1196, 1196, 1196, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+
+     1674, 1674, 1196, 1196, 3785, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3786, 5143, 5143, 5143, 5143, 5143,
+     3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 5143, 5143,
+     5143, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785,
+     3785, 3785, 3785, 3785, 3785, 1680, 2493, 2486, 2493, 2493,
+     1680, 1680, 3515, 1680, 1680, 1680, 2493, 2493, 1681, 1680,
+     1680, 2830, 3516, 2493, 1680, 1680, 1680, 1680, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 1680, 1680, 1680, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 2831, 1680,  599,  854,  854,  854,  854,
+
+      599, 1038,  855,  599,  856,  599, 1039, 1040,  858,  856,
+      859, 1041,  861, 1042,  599,  599,  856,  599, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043,  856,  599,  856, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1038,  599, 1504, 3523, 3792, 3523, 3523,
+     1504, 2986, 2620, 1504, 2621, 1504, 2984, 3793, 2623, 2621,
+     2624, 3794, 2626, 3795, 1504, 1504, 2621, 1504, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 2621, 1504, 2621, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 2986, 1504, 1726, 3527, 3797, 3527, 3527,
+
+     1726, 2961, 3798, 1726, 3799, 1726, 2585, 3800, 3801, 3799,
+     3802, 3803, 3804, 3805, 1726, 1726, 3799, 1726, 3806, 3806,
+     3806, 3806, 3806, 3806, 3806, 3806, 3799, 1726, 3799, 3806,
+     3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806, 3806,
+     3806, 3806, 3806, 2961, 1726, 1458, 2183, 2509, 2183, 2183,
+     1458, 2510, 2511, 1458, 2512, 1458, 2513, 2514, 3807, 2512,
+     2516, 3808, 2518, 2519, 1458, 1458, 2512, 1458, 2520, 2520,
+     2520, 2520, 2520, 2520, 2520, 2520, 2512, 1458, 2512, 2520,
+     2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+     2520, 2520, 2520, 2510, 1458, 1458, 2855, 2573, 2855, 2855,
+
+     1458, 1458, 3191, 1458, 2855, 1458, 1458, 2852, 2873, 2855,
+     3201, 2875, 3529, 2855, 1458, 1458, 2855, 1458, 3530, 3530,
+     3530, 3530, 3191, 3191, 3191, 3191, 2855, 1458, 2855, 3530,
+     3530, 3530, 3530, 3530, 3191, 3530, 3191, 3191, 3191, 3191,
+     3191, 3191, 3530, 1458, 1458, 2874, 5143, 3192, 5143, 5143,
+     5143, 5143, 5143, 3191, 3191, 3191, 3191, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3191, 3191, 3191, 3191, 3191, 5143,
+     3191, 5143, 5143, 5143, 5143, 5143, 5143, 3191, 1921, 3188,
+     3531, 3188, 3188, 1921, 1921, 3532, 1921, 3188, 1921, 1921,
+     3184, 3533, 3188, 3534, 3809, 3535, 3188, 1921, 1921, 3188,
+
+     1921, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3188,
+     1921, 3188, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532,
+     3532, 3532, 3532, 3532, 3532, 3532, 1921, 1921, 2872, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2876, 5143,
+     5143, 5143, 5143, 5143, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 5143, 5143, 5143, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 3201,
+     5143, 3202, 5143, 5143, 5143, 5143, 5143, 3203, 3203, 3203,
+     3203, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3203, 3203,
+     3203, 3203, 3203, 5143, 3203, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 3203, 2228, 3617, 3568, 3617, 3617, 2228, 2228, 3810,
+     2228, 3811, 2228, 2228, 3577, 3812, 3811, 3813, 3814, 3815,
+     3253, 2228, 2228, 3811, 2228, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3811, 2228, 3811, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     2228, 2228, 2228, 3541, 3816, 3541, 3541, 2228, 3817, 3810,
+     2228, 3811, 2228, 3818, 3819, 3812, 3811, 3813, 3820, 3815,
+     3821, 2228, 2228, 3811, 2228, 3822, 3822, 3822, 3822, 3822,
+     3822, 3822, 3822, 3811, 2228, 3811, 3822, 3822, 3822, 3822,
+     3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
+
+     3817, 2228,  512, 3542, 2960, 3542, 3542,  512, 1034, 1977,
+      512, 1978,  512,  847, 3823, 1980, 1978, 1981, 3824, 1983,
+     3825,  512,  512, 1978,  512, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 1978,  512, 1978, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     1034,  512, 1461, 2198, 2532, 2198, 2198, 1461, 2533, 2534,
+     1461, 2535, 1461, 2536, 2537, 3827, 2535, 2539, 3828, 2541,
+     2542, 1461, 1461, 2535, 1461, 2543, 2543, 2543, 2543, 2543,
+     2543, 2543, 2543, 2535, 1461, 2535, 2543, 2543, 2543, 2543,
+     2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+
+     2533, 1461, 1461, 2592, 2897, 2592, 2592, 1461, 1461, 3219,
+     1461, 2592, 1461, 1461, 2590, 2899, 2592, 3229, 2901, 3546,
+     2592, 1461, 1461, 2592, 1461, 3547, 3547, 3547, 3547, 3219,
+     3219, 3219, 3219, 2592, 1461, 2592, 3547, 3547, 3547, 3547,
+     3547, 3219, 3547, 3219, 3219, 3219, 3219, 3219, 3219, 3547,
+     1461, 1461,  599, 2897, 2897, 2897, 2897,  599, 1038, 1061,
+      599,  862,  599, 1039, 1040, 1062,  862, 1063, 3217, 1065,
+     1042,  599,  599,  862,  599, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218,  862,  599,  862, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+
+     1038,  599, 2900, 5143, 3220, 5143, 5143, 5143, 5143, 5143,
+     3219, 3219, 3219, 3219, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3219, 3219, 3219, 3219, 3219, 5143, 3219, 5143, 5143,
+     5143, 5143, 5143, 5143, 3219, 1937, 3215, 3548, 3215, 3215,
+     1937, 1937, 3549, 1937, 3215, 1937, 1937, 3211, 3550, 3215,
+     3551, 3829, 3552, 3215, 1937, 1937, 3215, 1937, 3549, 3549,
+     3549, 3549, 3549, 3549, 3549, 3549, 3215, 1937, 3215, 3549,
+     3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549,
+     3549, 3549, 3549, 1937, 1937, 2898, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 2902, 5143, 5143, 5143, 5143,
+
+     5143, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 5143,
+     5143, 5143, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 3229, 5143, 3230, 5143,
+     5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231, 3231,
+     5143, 3231, 5143, 5143, 5143, 5143, 5143, 5143, 3231,  599,
+     1039, 1039, 1039, 1039,  599, 1038,  599,  599,  599,  599,
+     1039, 1039,  600,  599,  599, 1046,  599, 1038,  599,  599,
+      599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+      599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,  641,
+     3557, 3832, 3557, 3557,  641, 1598, 1996,  641, 1997,  641,
+     1596, 3833, 1998, 1997, 1999, 3834, 2001, 3835,  641,  641,
+     1997,  641, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     1997,  641, 1997, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 1598,  641,  248,
+     1460, 1460, 1460, 1460,  248,  377,  603,  248,  604,  248,
+      336, 1701,  606,  604,  607, 1702,  609, 1703,  248,  248,
+      604,  248, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+      604,  248,  604, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+
+     1704, 1704, 1704, 1704, 1704, 1704, 1704,  377,  248,  876,
+     1483, 1460, 1483, 1483,  876, 1728,  876,  876,  876,  876,
+     1483, 1483,  877,  876,  876, 1729,  876, 1728,  876,  876,
+      876,  876, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+      876,  876,  876, 1728, 1728, 1728, 1728, 1728, 1728, 1728,
+     1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728,  876,  876,
+     1773, 2025, 1773, 1773,  876,  876, 2026,  876, 1773,  876,
+      876, 1768, 2027, 1773, 2028, 2029, 2030, 1773,  876,  876,
+     1773,  876, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     1773,  876, 1773, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+
+     2026, 2026, 2026, 2026, 2026, 2026, 2026,  876,  876,  876,
+     1524, 1765, 1524, 1524,  876,  876, 2008,  876, 1767,  876,
+      876, 1768, 1769, 1767, 1770, 1771, 2009, 1773,  876,  876,
+     1767,  876, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     1767,  876, 1767, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008,  876,  876, 1762,
+     3842, 3843, 3842, 3842, 1762, 1762, 3844, 1762, 3845, 1762,
+     1762, 3846, 3847, 3845, 3848, 3849, 3850, 3851, 1762, 1762,
+     3845, 1762, 3844, 3844, 3844, 3844, 3844, 3844, 3844, 3844,
+     3845, 1762, 3845, 3844, 3844, 3844, 3844, 3844, 3844, 3844,
+
+     3844, 3844, 3844, 3844, 3844, 3844, 3844, 1762, 1762, 1234,
+     1955, 2203, 1955, 1955, 1234, 2204, 2205, 1234, 2206, 1234,
+     2207, 2208, 3852, 2206, 2210, 3853, 2212, 2213, 1234, 1234,
+     2206, 1234, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+     2206, 1234, 2206, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+     2214, 2214, 2214, 2214, 2214, 2214, 2214, 2204, 1234,  255,
+     1478, 1478, 1478, 1478,  255,  469,  628,  255,  629,  255,
+      468, 1590,  630,  629,  631, 1721,  633, 1592,  255,  255,
+      629,  255, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+      629,  255,  629, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+
+     1722, 1722, 1722, 1722, 1722, 1722, 1722,  469,  255,  946,
+     2035, 1478, 2035, 2035,  946, 2036,  946,  946,  946,  946,
+     2035, 2035,  947,  946,  946, 2037,  946, 2036,  946,  946,
+      946,  946, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+      946,  946,  946, 2036, 2036, 2036, 2036, 2036, 2036, 2036,
+     2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036,  946,  946,
+     1547, 1792, 1547, 1547,  946,  946, 1793,  946, 1547,  946,
+      946, 1780, 1794, 1547, 1795, 1796, 1797, 1547,  946,  946,
+     1547,  946, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1547,  946, 1547, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+
+     1793, 1793, 1793, 1793, 1793, 1793, 1793,  946,  946,  946,
+     1537, 1777, 1537, 1537,  946,  946, 2033,  946, 1779,  946,
+      946, 1780, 1781, 1779, 1782, 1783, 2034, 1547,  946,  946,
+     1779,  946, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     1779,  946, 1779, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033,  946,  946,  599,
+      712,  712,  712,  712,  599,  599,  855,  599,  856,  599,
+      599,  857, 1956,  856,  859, 3854,  861,  862,  599,  599,
+      856,  599,  855,  855,  855,  855,  855,  855,  855,  855,
+      856,  599,  856,  855,  855,  855,  855,  855,  855,  855,
+
+      855,  855,  855,  855,  855,  855,  855,  599,  599, 2228,
+     3253, 3575, 3253, 3253, 2228, 2228, 3857, 2228, 3253, 2228,
+     2228, 3577, 3578, 3253, 3579, 3580, 3858, 3253, 2228, 2228,
+     3253, 2228, 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3253, 2228, 3253, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3857, 3857, 3857, 3857, 3857, 3857, 3857, 2228, 2228, 2228,
+     3818, 3832, 3818, 3818, 2228, 3817, 2228, 2228, 2228, 2228,
+     3818, 3818, 2229, 2228, 2228, 3859, 2228, 3817, 2228, 2228,
+     2228, 2228, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817,
+     2228, 2228, 2228, 3817, 3817, 3817, 3817, 3817, 3817, 3817,
+
+     3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 2228, 2571,
+     3860, 3861, 3860, 3860, 2571, 2571, 3862, 2571, 3860, 2571,
+     2571, 3863, 3864, 3860, 3865, 3866, 3867, 3860, 2571, 2571,
+     3860, 2571, 3862, 3862, 3862, 3862, 3862, 3862, 3862, 3862,
+     3860, 2571, 3860, 3862, 3862, 3862, 3862, 3862, 3862, 3862,
+     3862, 3862, 3862, 3862, 3862, 3862, 3862, 2571, 2571, 3576,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3581,
+     5143, 5143, 5143, 5143, 5143, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 5143, 5143, 5143, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+
+     3868, 5143, 3869, 5143, 5143, 5143, 5143, 5143, 3870, 3870,
+     3870, 3870, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3870,
+     3870, 3870, 3870, 3870, 5143, 3870, 5143, 5143, 5143, 5143,
+     5143, 5143, 3870, 1080, 3582, 3871, 3582, 3582, 1080, 1972,
+     2066, 1080, 2067, 1080, 1732, 3872, 2069, 2067, 2070, 3873,
+     2072, 3874, 1080, 1080, 2067, 1080, 3875, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 2067, 1080, 2067, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+     3875, 1972, 1080, 1479, 2230, 2573, 2230, 2230, 1479, 2574,
+     2575, 1479, 2576, 1479, 2577, 2578, 3876, 2576, 2580, 3877,
+
+     2582, 2583, 1479, 1479, 2576, 1479, 2584, 2584, 2584, 2584,
+     2584, 2584, 2584, 2584, 2576, 1479, 2576, 2584, 2584, 2584,
+     2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584,
+     2584, 2574, 1479, 1479, 2703, 2954, 2703, 2703, 1479, 1479,
+     3267, 1479, 2703, 1479, 1479, 2701, 2956, 2703, 3277, 2958,
+     3584, 2703, 1479, 1479, 2703, 1479, 3585, 3585, 3585, 3585,
+     3267, 3267, 3267, 3267, 2703, 1479, 2703, 3585, 3585, 3585,
+     3585, 3585, 3267, 3585, 3267, 3267, 3267, 3267, 3267, 3267,
+     3585, 1479, 1479,  599,  862,  862,  862,  862,  599,  599,
+     1061,  599,  862,  599,  599,  857, 1062,  862, 1063, 1064,
+
+     1065,  862,  599,  599,  862,  599, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061,  862,  599,  862, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061,  599,  599, 2957, 5143, 3268, 5143, 5143, 5143, 5143,
+     5143, 3267, 3267, 3267, 3267, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3267, 3267, 3267, 3267, 3267, 5143, 3267, 5143,
+     5143, 5143, 5143, 5143, 5143, 3267, 1960, 3265, 3586, 3265,
+     3265, 1960, 1960, 3587, 1960, 3265, 1960, 1960, 3261, 3588,
+     3265, 3589, 3878, 3590, 3265, 1960, 1960, 3265, 1960, 3587,
+     3587, 3587, 3587, 3587, 3587, 3587, 3587, 3265, 1960, 3265,
+
+     3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587,
+     3587, 3587, 3587, 3587, 1960, 1960, 2955, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 2959, 5143, 5143, 5143,
+     5143, 5143, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     5143, 5143, 5143, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 3277, 5143, 3278,
+     5143, 5143, 5143, 5143, 5143, 3279, 3279, 3279, 3279, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3279, 3279, 3279, 3279,
+     3279, 5143, 3279, 5143, 5143, 5143, 5143, 5143, 5143, 3279,
+      550, 3594, 3575, 3594, 3594,  550, 1390, 2076,  550, 2077,
+
+      550, 1389, 3728, 2078, 2077, 2079, 3879, 2081, 3730,  550,
+      550, 2077,  550, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 2077,  550, 2077, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 1390,  550,
+      517, 1262, 1263, 1262, 1262,  517, 1264,  517,  517,  517,
+      517, 1262, 1262,  518,  517,  517, 1265,  517, 1264,  517,
+      517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264,  517,  517,  517, 1264, 1264, 1264, 1264, 1264, 1264,
+     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,  517,
+      517, 1090, 1281, 1090, 1090,  517,  517, 1282,  517, 1090,
+
+      517,  517, 1085, 1283, 1090, 1284, 1285, 1286, 1090,  517,
+      517, 1090,  517, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1090,  517, 1090, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,  517,  517,
+      517,  890, 1082,  890,  890,  517,  517, 1260,  517, 1084,
+      517,  517, 1085, 1086, 1084, 1087, 1088, 1261, 1090,  517,
+      517, 1084,  517, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1084,  517, 1084, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,  517,  517,
+      599,  854,  854,  854,  854,  599, 1038,  855,  599,  856,
+
+      599, 1039, 1040,  858,  856,  859, 1041,  861, 1042,  599,
+      599,  856,  599, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043,  856,  599,  856, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1038,  599,
+     1726, 3605, 3560, 3605, 3605, 1726, 1726, 3798, 1726, 3799,
+     1726, 1726, 3883, 3801, 3799, 3802, 3884, 3804, 3885, 1726,
+     1726, 3799, 1726, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3799, 1726, 3799, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 1726, 1726,
+     1504, 2262, 2619, 2262, 2262, 1504, 1504, 2620, 1504, 2621,
+
+     1504, 1504, 2622, 3886, 2621, 2624, 3887, 2626, 2627, 1504,
+     1504, 2621, 1504, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2621, 1504, 2621, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 1504, 1504,
+     1504, 2627, 3001, 2627, 2627, 1504, 1504, 3305, 1504, 2627,
+     1504, 1504, 2622, 3003, 2627, 3315, 3005, 3607, 2627, 1504,
+     1504, 2627, 1504, 3608, 3608, 3608, 3608, 3305, 3305, 3305,
+     3305, 2627, 1504, 2627, 3608, 3608, 3608, 3608, 3608, 3305,
+     3608, 3305, 3305, 3305, 3305, 3305, 3305, 3608, 1504, 1504,
+      213, 1082, 1082, 1082, 1082,  213,  382,  337,  213,  338,
+
+      213,  381, 1256,  340,  338,  341, 1257,  343, 1258,  213,
+      213,  338,  213, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  338,  213,  338, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  382,  213,
+     3004, 5143, 3306, 5143, 5143, 5143, 5143, 5143, 3305, 3305,
+     3305, 3305, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3305,
+     3305, 3305, 3305, 3305, 5143, 3305, 5143, 5143, 5143, 5143,
+     5143, 5143, 3305, 1987, 3303, 3609, 3303, 3303, 1987, 1987,
+     3610, 1987, 3303, 1987, 1987, 3299, 3611, 3303, 3612, 3888,
+     3613, 3303, 1987, 1987, 3303, 1987, 3610, 3610, 3610, 3610,
+
+     3610, 3610, 3610, 3610, 3303, 1987, 3303, 3610, 3610, 3610,
+     3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
+     3610, 1987, 1987, 3002, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3006, 5143, 5143, 5143, 5143, 5143, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 5143, 5143, 5143,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3315, 5143, 3316, 5143, 5143, 5143,
+     5143, 5143, 3317, 3317, 3317, 3317, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3317, 3317, 3317, 3317, 3317, 5143, 3317,
+     5143, 5143, 5143, 5143, 5143, 5143, 3317, 2228, 3617, 3568,
+
+     3617, 3617, 2228, 2228, 3810, 2228, 3811, 2228, 2228, 3577,
+     3812, 3811, 3813, 3814, 3815, 3253, 2228, 2228, 3811, 2228,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3811, 2228,
+     3811, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 2228, 2228, 3016, 3889, 3889,
+     3889, 3889, 3016, 3016, 3890, 3016, 3889, 3016, 3016, 3891,
+     3892, 3889, 3893, 3894, 3895, 3889, 3016, 3016, 3889, 3016,
+     3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3889, 3016,
+     3889, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
+     3890, 3890, 3890, 3890, 3890, 3016, 3016,  215,  626,  755,
+
+      626,  626,  215,  215,  916,  215,  626,  215,  215,  622,
+      626,  626,  757,  758,  917,  626,  215,  215,  626,  215,
+      916,  916,  916,  916,  916,  916,  916,  916,  626,  215,
+      626,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  215,  215,  213, 1281, 1281,
+     1281, 1281,  213,  382,  398,  213,  344,  213,  381, 1256,
+      399,  344,  400, 1506,  402, 1258,  213,  213,  344,  213,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,  344,  213,
+      344, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507,  382,  213, 1508, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1509, 5143, 5143,
+     5143, 5143, 5143, 1508, 1508, 1508, 1508, 1508, 1508, 1508,
+     1508, 5143, 5143, 5143, 1508, 1508, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1756, 2651,
+     3898, 2651, 2651, 1756, 1756, 3899, 1756, 2651, 1756, 1756,
+     2646, 3900, 2651, 3901, 3902, 3903, 2651, 1756, 1756, 2651,
+     1756, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 2651,
+     1756, 2651, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 1756, 1756, 1518, 5143,
+     1519, 5143, 5143, 5143, 5143, 5143, 1520, 1520, 1520, 1520,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1520, 1520, 1520,
+     1520, 1520, 5143, 1520, 5143, 5143, 5143, 5143, 5143, 5143,
+     1520, 1760, 2668, 3001, 2668, 2668, 1760, 1760, 3341, 1760,
+     3025, 1760, 1760, 3026, 3027, 3025, 3356, 3029, 3632, 3031,
+     1760, 1760, 3025, 1760, 3633, 3633, 3633, 3633, 3341, 3341,
+     3341, 3341, 3025, 1760, 3025, 3633, 3633, 3633, 3633, 3633,
+     3341, 3633, 3341, 3341, 3341, 3341, 3341, 3341, 3633, 1760,
+     1760, 3024, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3028,
+     5143, 3030, 5143, 5143, 5143, 5143, 5143, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 5143, 5143, 5143, 3024, 3024,
+
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3028, 5143, 3342, 5143, 5143, 5143, 5143, 5143,
+     3341, 3341, 3341, 3341, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3341, 3341, 3341, 3341, 3341, 5143, 3341, 5143, 5143,
+     5143, 5143, 5143, 5143, 3341, 1760, 3343, 3344, 3343, 3343,
+     1760, 3345, 1760, 1760, 1760, 1760, 3343, 3343, 1761, 1760,
+     1760, 3346, 1760, 3345, 1760, 1760, 1760, 1760, 3345, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 1760, 1760, 1760, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 3345, 3345, 3345, 1760, 2286, 3636, 3609, 3636, 3636,
+
+     2286, 2286, 3637, 2286, 3638, 2286, 2286, 3639, 3640, 3638,
+     3641, 3910, 3642, 3643, 2286, 2286, 3638, 2286, 3637, 3637,
+     3637, 3637, 3637, 3637, 3637, 3637, 3638, 2286, 3638, 3637,
+     3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637,
+     3637, 3637, 3637, 2286, 2286, 3356, 5143, 3357, 5143, 5143,
+     5143, 5143, 5143, 3358, 3358, 3358, 3358, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358, 3358, 5143,
+     3358, 5143, 5143, 5143, 5143, 5143, 5143, 3358, 1760, 3031,
+     3359, 3031, 3031, 1760, 1760, 3360, 1760, 3031, 1760, 1760,
+     3026, 3361, 3031, 3362, 3363, 3364, 3031, 1760, 1760, 3031,
+
+     1760, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3031,
+     1760, 3031, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 1760, 1760, 3646, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3647, 5143,
+     5143, 5143, 5143, 5143, 3646, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646, 5143, 5143, 5143, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3656,
+     5143, 3911, 5143, 5143, 5143, 5143, 5143, 3912, 3912, 3912,
+     3912, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3912, 3912,
+     3912, 3912, 3912, 5143, 3912, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 3912, 2286, 3643, 3913, 3643, 3643, 2286, 2286, 3914,
+     2286, 3643, 2286, 2286, 3639, 3915, 3643, 3916, 3363, 3917,
+     3643, 2286, 2286, 3643, 2286, 3914, 3914, 3914, 3914, 3914,
+     3914, 3914, 3914, 3643, 2286, 3643, 3914, 3914, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914,
+     2286, 2286, 1291, 2006, 1962, 2006, 2006, 1291, 1291, 2288,
+     1291, 2289, 1291, 1291, 2290, 3918, 2289, 2291, 3919, 2293,
+     2109, 1291, 1291, 2289, 1291, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2289, 1291, 2289, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+
+     1291, 1291, 3656, 5143, 3657, 5143, 5143, 5143, 5143, 5143,
+     3658, 3658, 3658, 3658, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3658, 3658, 3658, 3658, 3658, 5143, 3658, 5143, 5143,
+     5143, 5143, 5143, 5143, 3658, 3018, 3659, 3923, 3659, 3659,
+     3018, 3661, 3664, 3018, 3373, 3018, 3372, 3924, 3666, 3373,
+     3667, 3925, 3669, 3926, 3018, 3018, 3373, 3018, 3927, 3927,
+     3927, 3927, 3927, 3927, 3927, 3927, 3373, 3018, 3373, 3927,
+     3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927,
+     3927, 3927, 3927, 3661, 3018,  784, 3660, 3660, 3660, 3660,
+      784, 1359, 2263,  784, 2264,  784, 1360, 1361, 2265, 2264,
+
+     2266, 3928, 2268, 1363,  784,  784, 2264,  784, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 2264,  784, 2264, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 1359,  784,  784, 1994, 1994, 1994, 1994,
+      784,  784, 2263,  784, 2264,  784,  784, 1149, 2265, 2264,
+     2266, 2267, 2268,  961,  784,  784, 2264,  784, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2264,  784, 2264, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263,  784,  784, 3018, 3373, 3663, 3373, 3373,
+     3018, 3018, 3932, 3018, 3373, 3018, 3018, 3665, 3666, 3373,
+
+     3667, 3668, 3933, 3373, 3018, 3018, 3373, 3018, 3932, 3932,
+     3932, 3932, 3932, 3932, 3932, 3932, 3373, 3018, 3373, 3932,
+     3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932,
+     3932, 3932, 3932, 3018, 3018, 3018, 3372, 3660, 3372, 3372,
+     3018, 3661, 3018, 3018, 3018, 3018, 3372, 3372, 3019, 3018,
+     3018, 3662, 3018, 3661, 3018, 3018, 3018, 3018, 3661, 3661,
+     3661, 3661, 3661, 3661, 3661, 3661, 3018, 3018, 3018, 3661,
+     3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661,
+     3661, 3661, 3661, 3661, 3018, 3323, 3934, 3935, 3934, 3934,
+     3323, 3323, 3936, 3323, 3934, 3323, 3323, 3937, 3938, 3934,
+
+     3939, 3940, 3941, 3934, 3323, 3323, 3934, 3323, 3936, 3936,
+     3936, 3936, 3936, 3936, 3936, 3936, 3934, 3323, 3934, 3936,
+     3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936, 3936,
+     3936, 3936, 3936, 3323, 3323, 3664, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3669, 5143, 5143, 5143, 5143,
+     5143, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 5143,
+     5143, 5143, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3944, 5143, 3945, 5143,
+     5143, 5143, 5143, 5143, 3946, 3946, 3946, 3946, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3946, 3946, 3946, 3946, 3946,
+
+     5143, 3946, 5143, 5143, 5143, 5143, 5143, 5143, 3946,  452,
+      911, 1121,  911,  911,  452,  452, 1307,  452,  911,  452,
+      452,  906, 1123,  911, 1124, 1125, 1308,  911,  452,  452,
+      911,  452, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+      911,  452,  911, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 1307, 1307, 1307, 1307, 1307,  452,  452,  617,
+     1304, 1528, 1304, 1304,  617,  617, 1529,  617, 1304,  617,
+      617, 1300, 1530, 1304, 1531, 3378, 1532, 1304,  617,  617,
+     1304,  617, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+     1304,  617, 1304, 1529, 1529, 1529, 1529, 1529, 1529, 1529,
+
+     1529, 1529, 1529, 1529, 1529, 1529, 1529,  617,  617, 1122,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1126,
+     5143, 5143, 5143, 5143, 5143, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 5143, 5143, 5143, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122,
+      946, 1537, 1777, 1537, 1537,  946,  946, 1778,  946, 1779,
+      946,  946, 1780, 3947, 1779, 1782, 3948, 1784, 1547,  946,
+      946, 1779,  946, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1779,  946, 1779, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,  946,  946,
+
+     1317, 5143, 1318, 5143, 5143, 5143, 5143, 5143, 1319, 1319,
+     1319, 1319, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1319,
+     1319, 1319, 1319, 1319, 5143, 1319, 5143, 5143, 5143, 5143,
+     5143, 5143, 1319, 1535, 2335, 2719, 2335, 2335, 1535, 1535,
+     3670, 1535, 2335, 1535, 1535, 2330, 3671, 2335, 3672, 3673,
+     3674, 2335, 1535, 1535, 2335, 1535, 3670, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 2335, 1535, 2335, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+     3670, 1535, 1535,  536, 1338, 1281, 1338, 1338,  536, 1339,
+      536,  536,  536,  536, 1338, 1338,  537,  536,  536, 1340,
+
+      536, 1339,  536,  536,  536,  536, 1339, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339,  536,  536,  536, 1339, 1339, 1339,
+     1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
+     1339, 1339,  536,  536, 1142, 1353, 1142, 1142,  536,  536,
+     1354,  536, 1142,  536,  536, 1137, 1355, 1142, 1356, 1357,
+     1358, 1142,  536,  536, 1142,  536, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1142,  536, 1142, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354,  536,  536,  536,  948, 1121,  948,  948,  536,  536,
+     1336,  536, 1136,  536,  536, 1137, 1138, 1136, 1139, 1140,
+
+     1337, 1142,  536,  536, 1136,  536, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1136,  536, 1136, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336,  536,  536,  213,  344,  344,  344,  344,  213,  213,
+      398,  213,  344,  213,  213,  339,  399,  344,  400,  401,
+      402,  344,  213,  213,  344,  213,  398,  398,  398,  398,
+      398,  398,  398,  398,  344,  213,  344,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  213,  213, 1562, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 1563, 5143, 5143, 5143, 5143, 5143, 1562,
+
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 5143, 5143, 5143,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562, 1562, 1812, 2727, 3949, 2727, 2727, 1812,
+     1812, 3950, 1812, 2727, 1812, 1812, 2722, 3951, 2727, 3952,
+     3953, 3954, 2727, 1812, 1812, 2727, 1812, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 2727, 1812, 2727, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3950, 1812, 1812, 1572, 5143, 1573, 5143, 5143, 5143,
+     5143, 5143, 1574, 1574, 1574, 1574, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 1574, 1574, 1574, 1574, 1574, 5143, 1574,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 1574, 1815, 3071, 2753,
+     3071, 3071, 1815, 1815, 3394, 1815, 3071, 1815, 1815, 3395,
+     3074, 3071, 3409, 3396, 3689, 3071, 1815, 1815, 3071, 1815,
+     3690, 3690, 3690, 3690, 3394, 3394, 3394, 3394, 3071, 1815,
+     3071, 3690, 3690, 3690, 3690, 3690, 3394, 3690, 3394, 3394,
+     3394, 3394, 3394, 3394, 3690, 1815, 1815, 3070, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3075, 5143, 3077, 5143, 5143,
+     5143, 5143, 5143, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 5143, 5143, 5143, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,  784, 1147,
+
+     1147, 1147, 1147,  784, 1359, 1148,  784,  961,  784, 1360,
+     1361, 1150,  961, 1151, 1362, 1153, 1363,  784,  784,  961,
+      784, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,  961,
+      784,  961, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1359,  784, 3075, 5143,
+     3397, 5143, 5143, 5143, 5143, 5143, 3394, 3394, 3394, 3394,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3394, 3394, 3394,
+     3394, 3394, 5143, 3394, 5143, 5143, 5143, 5143, 5143, 5143,
+     3394, 1815, 3072, 3082, 3072, 3072, 1815, 3069, 1815, 1815,
+     1815, 1815, 3072, 3072, 1816, 1815, 1815, 3398, 1815, 3069,
+
+     1815, 1815, 1815, 1815, 3069, 3069, 3069, 3069, 3069, 3069,
+     3069, 3069, 1815, 1815, 1815, 3069, 3069, 3069, 3069, 3069,
+     3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069,
+     1815, 2393, 3693, 3694, 3693, 3693, 2393, 2393, 3695, 2393,
+     3693, 2393, 2393, 3696, 3697, 3693, 3698, 3965, 3699, 3693,
+     2393, 2393, 3693, 2393, 3695, 3695, 3695, 3695, 3695, 3695,
+     3695, 3695, 3693, 2393, 3693, 3695, 3695, 3695, 3695, 3695,
+     3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 2393,
+     2393, 3409, 5143, 3410, 5143, 5143, 5143, 5143, 5143, 3411,
+     3411, 3411, 3411, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3411, 3411, 3411, 3411, 3411, 5143, 3411, 5143, 5143, 5143,
+     5143, 5143, 5143, 3411, 1841, 2767, 3112, 2767, 2767, 1841,
+     1841, 3113, 1841, 2767, 1841, 1841, 3114, 3115, 2767, 3116,
+     3117, 3118, 2767, 1841, 1841, 2767, 1841, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 2767, 1841, 2767, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 1841, 1841, 1818, 2764, 1147, 2764, 2764, 1818,
+     1818, 3412, 1818, 2764, 1818, 1818, 3110, 3087, 2764, 3425,
+     3111, 3702, 2764, 1818, 1818, 2764, 1818, 3703, 3703, 3703,
+     3703, 3412, 3412, 3412, 3412, 2764, 1818, 2764, 3703, 3703,
+
+     3703, 3703, 3703, 3412, 3703, 3412, 3412, 3412, 3412, 3412,
+     3412, 3703, 1818, 1818, 3084, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3088, 5143, 3090, 5143, 5143, 5143, 5143, 5143,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 5143, 5143,
+     5143, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3088, 5143, 3413, 5143, 5143,
+     5143, 5143, 5143, 3412, 3412, 3412, 3412, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3412, 3412, 3412, 3412, 3412, 5143,
+     3412, 5143, 5143, 5143, 5143, 5143, 5143, 3412, 1818, 3085,
+     3414, 3085, 3085, 1818, 3083, 1818, 1818, 1818, 1818, 3085,
+
+     3085, 1819, 1818, 1818, 3415, 1818, 3083, 1818, 1818, 1818,
+     1818, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 1818,
+     1818, 1818, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083,
+     3083, 3083, 3083, 3083, 3083, 3083, 3083, 1818, 2407, 3706,
+     2394, 3706, 3706, 2407, 2407, 3707, 2407, 3706, 2407, 2407,
+     3708, 3709, 3706, 3710, 3967, 3711, 3706, 2407, 2407, 3706,
+     2407, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3706,
+     2407, 3706, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707,
+     3707, 3707, 3707, 3707, 3707, 3707, 2407, 2407, 3425, 5143,
+     3426, 5143, 5143, 5143, 5143, 5143, 3427, 3427, 3427, 3427,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3427, 3427, 3427,
+     3427, 3427, 5143, 3427, 5143, 5143, 5143, 5143, 5143, 5143,
+     3427, 1080, 3713, 3968, 3713, 3713, 1080, 1972, 2114, 1080,
+     1846, 1080, 1732, 3872, 2115, 1846, 2116, 3969, 2118, 3874,
+     1080, 1080, 1846, 1080, 3970, 3970, 3970, 3970, 3970, 3970,
+     3970, 3970, 1846, 1080, 1846, 3970, 3970, 3970, 3970, 3970,
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 1972,
+     1080, 1588, 2421, 2753, 2421, 2421, 1588, 2754, 2755, 1588,
+     2430, 1588, 2756, 2757, 3971, 2430, 2759, 3972, 2761, 2762,
+     1588, 1588, 2430, 1588, 2763, 2763, 2763, 2763, 2763, 2763,
+
+     2763, 2763, 2430, 1588, 2430, 2763, 2763, 2763, 2763, 2763,
+     2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2754,
+     1588,  641, 3715, 3448, 3715, 3715,  641, 1598, 1381,  641,
+     1154,  641, 1596, 3833, 1383, 1154, 1384, 3973, 1386, 3835,
+      641,  641, 1154,  641, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 1154,  641, 1154, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 1598,
+      641, 3445, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3459,
+     5143, 3716, 5143, 5143, 5143, 5143, 5143, 3717, 3717, 3717,
+     3717, 3445, 3445, 3445, 3445, 5143, 5143, 5143, 3717, 3717,
+
+     3717, 3717, 3717, 3445, 3717, 3445, 3445, 3445, 3445, 3445,
+     3445, 3717,  255, 1380, 1380, 1380, 1380,  255,  469,  403,
+      255,  345,  255,  468, 1590,  405,  345,  406, 1591,  408,
+     1592,  255,  255,  345,  255, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593,  345,  255,  345, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+      469,  255, 3116, 5143, 3446, 5143, 5143, 5143, 5143, 5143,
+     3445, 3445, 3445, 3445, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3445, 3445, 3445, 3445, 3445, 5143, 3445, 5143, 5143,
+     5143, 5143, 5143, 5143, 3445, 1841, 3447, 3448, 3447, 3447,
+
+     1841, 3449, 1841, 1841, 1841, 1841, 3447, 3447, 1842, 1841,
+     1841, 3450, 1841, 3449, 1841, 1841, 1841, 1841, 3449, 3449,
+     3449, 3449, 3449, 3449, 3449, 3449, 1841, 1841, 1841, 3449,
+     3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449,
+     3449, 3449, 3449, 3449, 1841, 2427, 3720, 3721, 3720, 3720,
+     2427, 2427, 3722, 2427, 3720, 2427, 2427, 3723, 3724, 3720,
+     3725, 3979, 3726, 3720, 2427, 2427, 3720, 2427, 3722, 3722,
+     3722, 3722, 3722, 3722, 3722, 3722, 3720, 2427, 3720, 3722,
+     3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722,
+     3722, 3722, 3722, 2427, 2427, 3459, 5143, 3460, 5143, 5143,
+
+     5143, 5143, 5143, 3461, 3461, 3461, 3461, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3461, 3461, 3461, 3461, 3461, 5143,
+     3461, 5143, 5143, 5143, 5143, 5143, 5143, 3461,  550, 1389,
+     1380, 1389, 1389,  550, 1390,  550,  550,  550,  550, 1389,
+     1389,  551,  550,  550, 1391,  550, 1390,  550,  550,  550,
+      550, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,  550,
+      550,  550, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
+     1390, 1390, 1390, 1390, 1390, 1390, 1390,  550,  550,  967,
+     1155,  967,  967,  550,  550, 1156,  550,  967,  550,  550,
+     1157, 1158,  967, 1159, 1160, 1161,  967,  550,  550,  967,
+
+      550, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,  967,
+      550,  967, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156,  550,  550, 1387, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 1388, 5143,
+     5143, 5143, 5143, 5143, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 5143, 5143, 5143, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,  260,
+     1408, 1408, 1408, 1408,  260,  260,  565,  260,  260,  260,
+      260,  260,  261,  260,  260, 1632,  260,  260,  260,  260,
+      260,  260,  565,  565,  565,  565,  565,  565,  565,  565,
+
+      260,  260,  260,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565, 1633,  260, 2130,
+     3127, 3468, 3127, 3127, 2130, 2130, 3980, 2130, 2130, 2130,
+     2130, 2130, 2131, 2130, 2130, 3469, 3980, 2130, 2130, 2130,
+     2130, 2130, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     2130, 2130, 2130, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3470, 2130,  561,
+      812,  812,  812,  812,  561,  561,  813,  561,  561,  561,
+      561,  561,  562,  561,  561,  984,  561,  561,  561,  561,
+      561,  561,  813,  813,  813,  813,  813,  813,  813,  813,
+
+      561,  561,  561,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  985,  561, 1196,
+     1673, 1673, 1673, 1673, 1196, 1196, 1890, 1196, 1196, 1196,
+     1891, 1891, 1197, 1196, 1196, 1892, 1196, 1891, 1196, 1196,
+     1196, 1196, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1196, 1196, 1196, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1893, 1196, 2484,
+     3754, 3764, 3754, 3754, 2484, 2484, 3994, 2484, 2484, 2484,
+     3754, 3754, 2485, 2484, 2484, 3995, 3996, 3754, 2484, 2484,
+     2484, 2484, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+
+     2484, 2484, 2484, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3756, 2484, 3997,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2484,
+     5143, 5143, 5143, 5143, 5143, 3997, 3997, 3997, 3997, 3997,
+     3997, 3997, 3997, 5143, 5143, 5143, 3997, 3997, 3997, 3997,
+     3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
+     1909, 3141, 3149, 3141, 3141, 1909, 1909, 3759, 1909, 1909,
+     1909, 3141, 3141, 1909, 1909, 1909, 3485, 3760, 3141, 1909,
+     1909, 1909, 1909, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3759, 1909, 1909, 1909, 3759, 3759, 3759, 3759, 3759, 3759,
+
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3143, 1909,
+      424, 2486, 2486, 2486, 2486,  424,  424, 2817,  424,  424,
+      424,  680,  680,  425,  424,  424, 2818,  424,  680,  424,
+      424,  424,  424, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817,  424,  424,  424, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,  832,  424,
+     2487, 3766, 4003, 3766, 3766, 2487, 2487, 4004, 2487, 2487,
+     2487, 3766, 3766, 2488, 2487, 2487, 4005, 4006, 3766, 2487,
+     2487, 2487, 2487, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+     4004, 2487, 2487, 2487, 4004, 4004, 4004, 4004, 4004, 4004,
+
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 3768, 2487,
+     4007, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2487, 5143, 5143, 5143, 5143, 5143, 4007, 4007, 4007, 4007,
+     4007, 4007, 4007, 4007, 5143, 5143, 5143, 4007, 4007, 4007,
+     4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007,
+     4007, 2163, 3499, 1673, 3499, 3499, 2163, 2163, 3769, 2163,
+     2163, 2163, 3499, 3499, 2164, 2163, 2163, 3770, 3771, 3499,
+     2163, 2163, 2163, 2163, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 2163, 2163, 2163, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3501,
+
+     2163, 4012, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4013, 5143, 5143, 5143, 5143, 5143, 4012, 4012, 4012,
+     4012, 4012, 4012, 4012, 4012, 5143, 5143, 5143, 4012, 4012,
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4014, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 4015, 5143, 5143, 5143, 5143, 5143, 4014, 4014,
+     4014, 4014, 4014, 4014, 4014, 4014, 5143, 5143, 5143, 4014,
+     4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014,
+     4014, 4014, 4014, 1194, 1883, 2152, 1883, 1883, 1194, 1194,
+     3777, 1194, 1194, 1194, 1883, 1883, 1195, 1194, 1194, 2154,
+
+     3778, 1883, 1194, 1194, 1194, 1194, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 1194, 1194, 1194, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 2155, 1194, 1196, 1891, 1891, 1891, 1891, 1196, 1196,
+     2158, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1895,
+     1196, 1891, 1196, 1196, 1196, 1196, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 1196, 1196, 1196, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 1893, 1196,  324, 1904, 1904, 1904, 1904,  324,  324,
+     2168,  324,  324,  324,  681,  681,  325,  324,  324, 2169,
+
+      324,  681,  324,  324,  324,  324, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168,  324,  324,  324, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168,  685,  324, 2501, 4021, 4022, 4021, 4021, 2501, 2501,
+     4023, 2501, 2501, 2501, 4021, 4021, 2502, 2501, 2501, 4024,
+     4025, 4021, 2501, 2501, 2501, 2501, 4023, 4023, 4023, 4023,
+     4023, 4023, 4023, 4023, 2501, 2501, 2501, 4023, 4023, 4023,
+     4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023,
+     4023, 4026, 2501, 3785, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3786, 5143, 5143, 5143, 5143, 5143, 3785,
+
+     3785, 3785, 3785, 3785, 3785, 3785, 3785, 5143, 5143, 5143,
+     3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785, 3785,
+     3785, 3785, 3785, 3785, 1196, 1435, 1435, 1435, 1435, 1196,
+     1196, 1674, 1196, 1196, 1196, 1196, 1196, 1197, 1196, 1196,
+     1675, 1196, 1196, 1196, 1196, 1196, 1196, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1196, 1196, 1196, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1196, 1196,  213, 1082, 1082, 1082, 1082,  213,
+      382,  337,  213,  338,  213,  381, 1256,  340,  338,  341,
+     1257,  343, 1258,  213,  213,  338,  213, 1259, 1259, 1259,
+
+     1259, 1259, 1259, 1259, 1259,  338,  213,  338, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259,  382,  213, 1504, 2984, 2985, 2984, 2984, 1504,
+     2986, 1504, 1504, 1504, 1504, 2984, 2984, 1505, 1504, 1504,
+     2987, 1504, 2986, 1504, 1504, 1504, 1504, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 1504, 1504, 1504, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 1504, 1504, 2627, 3001, 2627, 2627, 1504,
+     1504, 3002, 1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004,
+     3005, 3006, 2627, 1504, 1504, 2627, 1504, 3002, 3002, 3002,
+
+     3002, 3002, 3002, 3002, 3002, 2627, 1504, 2627, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 1504, 1504, 1504, 2262, 2619, 2262, 2262, 1504,
+     1504, 2982, 1504, 2621, 1504, 1504, 2622, 2623, 2621, 2624,
+     2625, 2983, 2627, 1504, 1504, 2621, 1504, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2621, 1504, 2621, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 1504, 1504,  248, 1460, 1460, 1460, 1460,  248,
+      377,  603,  248,  604,  248,  336, 1701,  606,  604,  607,
+     1702,  609, 1703,  248,  248,  604,  248, 1704, 1704, 1704,
+
+     1704, 1704, 1704, 1704, 1704,  604,  248,  604, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704,  377,  248, 1726, 3605, 3560, 3605, 3605, 1726,
+     1726, 4032, 1726, 3799, 1726, 1726, 3883, 3801, 3799, 3802,
+     3884, 4033, 3885, 1726, 1726, 3799, 1726, 4032, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 3799, 1726, 3799, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 1726, 1726, 3798, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3804, 5143, 5143, 5143, 5143, 5143,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 5143, 5143,
+
+     5143, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 1726, 2585, 2960, 2585, 2585,
+     1726, 2961, 1726, 1726, 1726, 1726, 2585, 2585, 1727, 1726,
+     1726, 2962, 1726, 2961, 1726, 1726, 1726, 1726, 2961, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 1726, 1726, 1726, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 1726, 1967, 4034, 4035, 4034, 4034,
+     1967, 1967, 4036, 1967, 4037, 1967, 1967, 4038, 4039, 4037,
+     4040, 4041, 4042, 4043, 1967, 1967, 4037, 1967, 4036, 4036,
+     4036, 4036, 4036, 4036, 4036, 4036, 4037, 1967, 4037, 4036,
+
+     4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036, 4036,
+     4036, 4036, 4036, 1967, 1967, 4046, 5143, 4047, 5143, 5143,
+     5143, 5143, 5143, 4048, 4048, 4048, 4048, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4048, 4048, 4048, 4048, 4048, 5143,
+     4048, 5143, 5143, 5143, 5143, 5143, 5143, 4048, 1726, 3885,
+     3871, 3885, 3885, 1726, 1726, 4049, 1726, 3885, 1726, 1726,
+     3883, 4050, 3885, 4051, 4052, 4053, 3885, 1726, 1726, 3885,
+     1726, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 3885,
+     1726, 3885, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 1726, 1726, 3520, 4054,
+
+     4055, 4054, 4054, 3520, 3520, 4056, 3520, 4057, 3520, 3520,
+     4058, 4059, 4057, 4060, 4061, 4062, 4063, 3520, 3520, 4057,
+     3520, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4057,
+     3520, 4057, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056,
+     4056, 4056, 4056, 4056, 4056, 4056, 3520, 3520, 1458, 2183,
+     2509, 2183, 2183, 1458, 2510, 2511, 1458, 2512, 1458, 2513,
+     2514, 4064, 2512, 2516, 4065, 2518, 2519, 1458, 1458, 2512,
+     1458, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2512,
+     1458, 2512, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520,
+     2520, 2520, 2520, 2520, 2520, 2520, 2510, 1458, 2228, 3617,
+
+     3568, 3617, 3617, 2228, 2228, 4066, 2228, 3811, 2228, 2228,
+     3577, 3812, 3811, 3813, 3814, 4067, 3253, 2228, 2228, 3811,
+     2228, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 3811,
+     2228, 3811, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 2228, 2228, 3810, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3815, 5143,
+     5143, 5143, 5143, 5143, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 5143, 5143, 5143, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 2571,
+     4068, 4069, 4068, 4068, 2571, 2571, 4070, 2571, 4071, 2571,
+
+     2571, 3863, 4072, 4071, 4073, 4074, 4075, 3860, 2571, 2571,
+     4071, 2571, 4070, 4070, 4070, 4070, 4070, 4070, 4070, 4070,
+     4071, 2571, 4071, 4070, 4070, 4070, 4070, 4070, 4070, 4070,
+     4070, 4070, 4070, 4070, 4070, 4070, 4070, 2571, 2571, 4076,
+     5143, 4077, 5143, 5143, 5143, 5143, 5143, 4078, 4078, 4078,
+     4078, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4078, 4078,
+     4078, 4078, 4078, 5143, 4078, 5143, 5143, 5143, 5143, 5143,
+     5143, 4078,  255, 1478, 1478, 1478, 1478,  255,  469,  628,
+      255,  629,  255,  468, 1590,  630,  629,  631, 1721,  633,
+     1592,  255,  255,  629,  255, 1722, 1722, 1722, 1722, 1722,
+
+     1722, 1722, 1722,  629,  255,  629, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+      469,  255, 2228, 3818, 3832, 3818, 3818, 2228, 3817, 2228,
+     2228, 2228, 2228, 3818, 3818, 2229, 2228, 2228, 3859, 2228,
+     3817, 2228, 2228, 2228, 2228, 3817, 3817, 3817, 3817, 3817,
+     3817, 3817, 3817, 2228, 2228, 2228, 3817, 3817, 3817, 3817,
+     3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817,
+     3817, 2228, 2228, 3253, 3575, 3253, 3253, 2228, 2228, 3576,
+     2228, 3253, 2228, 2228, 3577, 3578, 3253, 3579, 3580, 3581,
+     3253, 2228, 2228, 3253, 2228, 3576, 3576, 3576, 3576, 3576,
+
+     3576, 3576, 3576, 3253, 2228, 3253, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     2228, 2228,  512,  847, 1033,  847,  847,  512, 1034,  512,
+      512,  512,  512,  847,  847,  513,  512,  512, 1035,  512,
+     1034,  512,  512,  512,  512, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034,  512,  512,  512, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034,  512,  512, 1984, 1817, 1984, 1984,  512,  512, 2255,
+      512, 1984,  512,  512, 1979, 2256, 1984, 2257, 2258, 2259,
+     1984,  512,  512, 1984,  512, 2255, 2255, 2255, 2255, 2255,
+
+     2255, 2255, 2255, 1984,  512, 1984, 2255, 2255, 2255, 2255,
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+      512,  512,  512, 1738, 1460, 1738, 1738,  512,  512, 2239,
+      512, 1978,  512,  512, 1979, 1980, 1978, 1981, 1982, 2240,
+     1984,  512,  512, 1978,  512, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 1978,  512, 1978, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+      512,  512, 1974, 4083, 3521, 4083, 4083, 1974, 1974, 4084,
+     1974, 4085, 1974, 1974, 4086, 4087, 4085, 4088, 4089, 4090,
+     4091, 1974, 1974, 4085, 1974, 4084, 4084, 4084, 4084, 4084,
+
+     4084, 4084, 4084, 4085, 1974, 4085, 4084, 4084, 4084, 4084,
+     4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084,
+     1974, 1974, 1461, 2198, 2532, 2198, 2198, 1461, 2533, 2534,
+     1461, 2535, 1461, 2536, 2537, 4092, 2535, 2539, 4093, 2541,
+     2542, 1461, 1461, 2535, 1461, 2543, 2543, 2543, 2543, 2543,
+     2543, 2543, 2543, 2535, 1461, 2535, 2543, 2543, 2543, 2543,
+     2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+     2533, 1461,  641, 1596, 1597, 1596, 1596,  641, 1598,  641,
+      641,  641,  641, 1596, 1596,  642,  641,  641, 1599,  641,
+     1598,  641,  641,  641,  641, 1598, 1598, 1598, 1598, 1598,
+
+     1598, 1598, 1598,  641,  641,  641, 1598, 1598, 1598, 1598,
+     1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+     1598,  641,  641, 1154, 1380, 1154, 1154,  641,  641, 1381,
+      641, 1154,  641,  641, 1382, 1383, 1154, 1384, 1385, 1386,
+     1154,  641,  641, 1154,  641, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1154,  641, 1154, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+      641,  641,  641, 1759, 1478, 1759, 1759,  641,  641, 2271,
+      641, 1997,  641,  641, 1382, 1998, 1997, 1999, 2000, 2272,
+     1154,  641,  641, 1997,  641, 2271, 2271, 2271, 2271, 2271,
+
+     2271, 2271, 2271, 1997,  641, 1997, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+      641,  641, 1291, 3839, 4098, 3839, 3839, 1291, 2397, 2288,
+     1291, 2289, 1291, 2237, 2399, 2289, 2289, 2291, 4099, 2293,
+     2403, 1291, 1291, 2289, 1291, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 2289, 1291, 2289, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+     2397, 1291, 1234, 2007, 2294, 2007, 2007, 1234, 1234, 2205,
+     1234, 2206, 1234, 1234, 2295, 2209, 2206, 2210, 2296, 2212,
+     2297, 1234, 1234, 2206, 1234, 2205, 2205, 2205, 2205, 2205,
+
+     2205, 2205, 2205, 2206, 1234, 2206, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     1234, 1234,  599,  712,  712,  712,  712,  599,  599,  855,
+      599,  856,  599,  599,  857,  858,  856,  859,  860,  861,
+      862,  599,  599,  856,  599,  855,  855,  855,  855,  855,
+      855,  855,  855,  856,  599,  856,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      599,  599, 2547, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 2548, 5143, 5143, 5143, 5143, 5143, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 5143, 5143, 5143, 2547,
+
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 1234, 2207,  854, 2207, 2207, 1234, 2204,
+     1234, 1234, 1234, 1234, 2207, 2207, 1235, 1234, 1234, 2549,
+     1234, 2204, 1234, 1234, 1234, 1234, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 1234, 1234, 1234, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 1234, 1711, 2910, 2911, 2910, 2910, 1711, 1711,
+     2912, 1711, 2913, 1711, 1711, 2914, 2915, 2913, 2916, 4104,
+     2917, 2918, 1711, 1711, 2913, 1711, 2912, 2912, 2912, 2912,
+     2912, 2912, 2912, 2912, 2913, 1711, 2913, 2912, 2912, 2912,
+
+     2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+     2912, 1711, 1711,  452, 3034, 2619, 3034, 3034,  452, 1106,
+      904,  452,  905,  452, 1105, 3365, 1774,  905,  908, 4105,
+      910, 3367,  452,  452,  905,  452, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368,  905,  452,  905, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 1106,  452, 2560, 5143, 2561, 5143, 5143, 5143, 5143,
+     5143, 2562, 2562, 2562, 2562, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 2562, 2562, 2562, 2562, 2562, 5143, 2562, 5143,
+     5143, 5143, 5143, 5143, 5143, 2562, 1234, 2297, 2563, 2297,
+
+     2297, 1234, 1234, 2564, 1234, 2297, 1234, 1234, 2295, 2565,
+     2297, 2566, 2567, 2568, 2297, 1234, 1234, 2297, 1234, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2297, 1234, 2297,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 1234, 1234, 3242, 4106, 4107, 4106,
+     4106, 3242, 3242, 4108, 3242, 4109, 3242, 3242, 4110, 4111,
+     4109, 4112, 4113, 4114, 4115, 3242, 3242, 4109, 3242, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4109, 3242, 4109,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108,
+     4108, 4108, 4108, 4108, 3242, 3242, 3857, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 3858, 5143, 5143, 5143,
+     5143, 5143, 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     5143, 5143, 5143, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3857, 3857, 3857, 3857, 3857, 3857, 3857, 3868, 5143, 4119,
+     5143, 5143, 5143, 5143, 5143, 4120, 4120, 4120, 4120, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 4120, 4120, 4120, 4120,
+     4120, 5143, 4120, 5143, 5143, 5143, 5143, 5143, 5143, 4120,
+     2937, 4123, 4124, 4123, 4123, 2937, 2937, 4125, 2937, 4123,
+     2937, 2937, 4126, 4127, 4123, 4128, 3580, 4129, 4123, 2937,
+     2937, 4123, 2937, 4125, 4125, 4125, 4125, 4125, 4125, 4125,
+
+     4125, 4123, 2937, 4123, 4125, 4125, 4125, 4125, 4125, 4125,
+     4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 2937, 2937,
+     1093, 1991, 1962, 1991, 1991, 1093, 1093, 2192, 1093, 1991,
+     1093, 1093, 1989, 4130, 1991, 2193, 4131, 2195, 1991, 1093,
+     1093, 1991, 1093, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 1991, 1093, 1991, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 1093, 1093,
+     3868, 5143, 3869, 5143, 5143, 5143, 5143, 5143, 3870, 3870,
+     3870, 3870, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3870,
+     3870, 3870, 3870, 3870, 5143, 3870, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 3870,  248, 1460, 1460, 1460, 1460,  248,  377,
+      603,  248,  604,  248,  336, 1701,  606,  604,  607, 1702,
+      609, 1703,  248,  248,  604,  248, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704,  604,  248,  604, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704,  377,  248, 1080, 1732, 1817, 1732, 1732, 1080, 1972,
+     1080, 1080, 1080, 1080, 1732, 1732, 1081, 1080, 1080, 1973,
+     1080, 1972, 1080, 1080, 1080, 1080, 1972, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1080, 1080, 1080, 1972, 1972, 1972,
+     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+
+     1972, 1972, 1080, 1080, 1846, 2113, 1846, 1846, 1080, 1080,
+     2114, 1080, 1846, 1080, 1080, 2068, 2115, 1846, 2116, 2117,
+     2118, 1846, 1080, 1080, 1846, 1080, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 1846, 1080, 1846, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 1080, 1080, 1080, 1801, 2025, 1801, 1801, 1080, 1080,
+     2363, 1080, 2067, 1080, 1080, 2068, 2069, 2067, 2070, 2071,
+     2364, 1846, 1080, 1080, 2067, 1080, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2067, 1080, 2067, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+
+     2363, 1080, 1080, 2064, 4134, 4135, 4134, 4134, 2064, 2064,
+     4136, 2064, 4137, 2064, 2064, 4138, 4139, 4137, 4140, 4141,
+     4142, 4143, 2064, 2064, 4137, 2064, 4136, 4136, 4136, 4136,
+     4136, 4136, 4136, 4136, 4137, 2064, 4137, 4136, 4136, 4136,
+     4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
+     4136, 2064, 2064, 1479, 2230, 2573, 2230, 2230, 1479, 2574,
+     2575, 1479, 2576, 1479, 2577, 2578, 4144, 2576, 2580, 4145,
+     2582, 2583, 1479, 1479, 2576, 1479, 2584, 2584, 2584, 2584,
+     2584, 2584, 2584, 2584, 2576, 1479, 2576, 2584, 2584, 2584,
+     2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584,
+
+     2584, 2574, 1479,  550, 1814, 1792, 1814, 1814,  550,  550,
+     2381,  550, 2077,  550,  550, 1157, 2078, 2077, 2079, 2080,
+     2382,  967,  550,  550, 2077,  550, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2077,  550, 2077, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381,  550,  550, 1726, 2585, 2960, 2585, 2585, 1726, 2961,
+     1726, 1726, 1726, 1726, 2585, 2585, 1727, 1726, 1726, 2962,
+     1726, 2961, 1726, 1726, 1726, 1726, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 1726, 1726, 1726, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+
+     2961, 2961, 1726, 1726, 3885, 3871, 3885, 3885, 1726, 1726,
+     4049, 1726, 3885, 1726, 1726, 3883, 4050, 3885, 4051, 4052,
+     4053, 3885, 1726, 1726, 3885, 1726, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 3885, 1726, 3885, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     4049, 1726, 1726, 1987, 3295, 3296, 3295, 3295, 1987, 1987,
+     3297, 1987, 3298, 1987, 1987, 3299, 3300, 3298, 3301, 3606,
+     3302, 3303, 1987, 1987, 3298, 1987, 3297, 3297, 3297, 3297,
+     3297, 3297, 3297, 3297, 3298, 1987, 3298, 3297, 3297, 3297,
+     3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297,
+
+     3297, 1987, 1987, 1504, 2262, 2619, 2262, 2262, 1504, 1504,
+     2620, 1504, 2621, 1504, 1504, 2622, 4153, 2621, 2624, 4154,
+     2626, 2627, 1504, 1504, 2621, 1504, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2621, 1504, 2621, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 1504, 1504,  599,  862,  862,  862,  862,  599,  599,
+     1061,  599,  862,  599,  599,  857, 1062,  862, 1063, 1064,
+     1065,  862,  599,  599,  862,  599, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061,  862,  599,  862, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+
+     1061,  599,  599, 1236, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 1237, 5143, 5143, 5143, 5143, 5143, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 5143, 5143, 5143,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236,  599, 1039, 1039, 1039, 1039,  599,
+     1038,  599,  599,  599,  599, 1039, 1039,  600,  599,  599,
+     1046,  599, 1038,  599,  599,  599,  599, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038,  599,  599,  599, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038,  599, 3321, 4155, 4155, 4155, 4155, 3321,
+
+     3321, 4156, 3321, 4155, 3321, 3321, 4157, 4158, 4155, 4159,
+     4160, 4161, 4155, 3321, 3321, 4155, 3321, 4156, 4156, 4156,
+     4156, 4156, 4156, 4156, 4156, 4155, 3321, 4155, 4156, 4156,
+     4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156,
+     4156, 4156, 3321, 3321,  213, 1281, 1281, 1281, 1281,  213,
+      382,  398,  213,  344,  213,  381, 1256, 1790,  344,  400,
+     4162,  402, 1258,  213,  213,  344,  213, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507,  344,  213,  344, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507,  382,  213, 1245, 5143, 1246, 5143, 5143, 5143,
+
+     5143, 5143, 1247, 1247, 1247, 1247, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 1247, 1247, 1247, 1247, 1247, 5143, 1247,
+     5143, 5143, 5143, 5143, 5143, 5143, 1247,  517, 1090, 1281,
+     1090, 1090,  517,  517, 1508,  517, 1090,  517,  517, 1085,
+     1283, 1090, 1284, 1285, 1509, 1090,  517,  517, 1090,  517,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1090,  517,
+     1090, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 1508, 1508,  517,  517,  734, 1501, 1749,
+     1501, 1501,  734,  734, 1750,  734, 1501,  734,  734, 1497,
+     1751, 1501, 1752, 3628, 1753, 1501,  734,  734, 1501,  734,
+
+     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1501,  734,
+     1501, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
+     1750, 1750, 1750, 1750, 1750,  734,  734, 1282, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1286, 5143, 5143,
+     5143, 5143, 5143, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 5143, 5143, 5143, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,  641, 1759,
+     1478, 1759, 1759,  641,  641, 1996,  641, 1997,  641,  641,
+     1382, 4165, 1997, 1999, 4166, 2001, 1154,  641,  641, 1997,
+      641, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1997,
+
+      641, 1997, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996,  641,  641, 1518, 5143,
+     1519, 5143, 5143, 5143, 5143, 5143, 1520, 1520, 1520, 1520,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 1520, 1520, 1520,
+     1520, 1520, 5143, 1520, 5143, 5143, 5143, 5143, 5143, 5143,
+     1520, 1756, 2651, 3898, 2651, 2651, 1756, 1756, 3899, 1756,
+     2651, 1756, 1756, 2646, 3900, 2651, 3901, 3902, 3903, 2651,
+     1756, 1756, 2651, 1756, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 2651, 1756, 2651, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 1756,
+
+     1756,  599, 2897, 2897, 2897, 2897,  599, 1038, 1061,  599,
+      862,  599, 1039, 1040, 1062,  862, 1063, 3217, 1065, 1042,
+      599,  599,  862,  599, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218,  862,  599,  862, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 1038,
+      599, 1970, 3909, 3871, 3909, 3909, 1970, 1970, 4170, 1970,
+     4171, 1970, 1970, 4172, 4173, 4171, 4174, 4175, 4176, 3978,
+     1970, 1970, 4171, 1970, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4171, 1970, 4171, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 1970,
+
+     1970, 1760, 2668, 3001, 2668, 2668, 1760, 1760, 3024, 1760,
+     3025, 1760, 1760, 3026, 4177, 3025, 3028, 4178, 3030, 3031,
+     1760, 1760, 3025, 1760, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3025, 1760, 3025, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 1760,
+     1760, 1760, 3031, 3359, 3031, 3031, 1760, 1760, 3646, 1760,
+     3031, 1760, 1760, 3026, 3361, 3031, 3656, 3363, 3911, 3031,
+     1760, 1760, 3031, 1760, 3912, 3912, 3912, 3912, 3646, 3646,
+     3646, 3646, 3031, 1760, 3031, 3912, 3912, 3912, 3912, 3912,
+     3646, 3912, 3646, 3646, 3646, 3646, 3646, 3646, 3912, 1760,
+
+     1760, 3362, 5143, 3647, 5143, 5143, 5143, 5143, 5143, 3646,
+     3646, 3646, 3646, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     3646, 3646, 3646, 3646, 3646, 5143, 3646, 5143, 5143, 5143,
+     5143, 5143, 5143, 3646, 2286, 3643, 3913, 3643, 3643, 2286,
+     2286, 3914, 2286, 3643, 2286, 2286, 3639, 3915, 3643, 3916,
+     4179, 3917, 3643, 2286, 2286, 3643, 2286, 3914, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3643, 2286, 3643, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914,
+     3914, 3914, 2286, 2286, 3360, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3364, 5143, 5143, 5143, 5143, 5143,
+
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 5143, 5143,
+     5143, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3656, 5143, 3657, 5143, 5143,
+     5143, 5143, 5143, 3658, 3658, 3658, 3658, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3658, 3658, 3658, 3658, 3658, 5143,
+     3658, 5143, 5143, 5143, 5143, 5143, 5143, 3658, 1841, 3922,
+     3575, 3922, 3922, 1841, 1841, 4180, 1841, 4181, 1841, 1841,
+     3114, 4182, 4181, 4183, 4184, 4185, 2767, 1841, 1841, 4181,
+     1841, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4181,
+     1841, 4181, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+
+     4180, 4180, 4180, 4180, 4180, 4180, 1841, 1841,  784, 3660,
+     3660, 3660, 3660,  784, 1359, 2263,  784, 2264,  784, 1360,
+     1361, 2265, 2264, 2266, 3928, 2268, 1363,  784,  784, 2264,
+      784, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 2264,
+      784, 2264, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 1359,  784, 3018, 3372,
+     3660, 3372, 3372, 3018, 3661, 3018, 3018, 3018, 3018, 3372,
+     3372, 3019, 3018, 3018, 3662, 3018, 3661, 3018, 3018, 3018,
+     3018, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3018,
+     3018, 3018, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661,
+
+     3661, 3661, 3661, 3661, 3661, 3661, 3661, 3018, 3018, 3373,
+     3663, 3373, 3373, 3018, 3018, 3664, 3018, 3373, 3018, 3018,
+     3665, 3666, 3373, 3667, 3668, 3669, 3373, 3018, 3018, 3373,
+     3018, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3373,
+     3018, 3373, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3018, 3018, 3932, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3933, 5143,
+     5143, 5143, 5143, 5143, 3932, 3932, 3932, 3932, 3932, 3932,
+     3932, 3932, 5143, 5143, 5143, 3932, 3932, 3932, 3932, 3932,
+     3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932,  784,
+
+     1994, 1994, 1994, 1994,  784,  784, 2628,  784, 2264,  784,
+      784, 1149, 2265, 2264, 2266, 2267, 2629,  961,  784,  784,
+     2264,  784, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2264,  784, 2264, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628,  784,  784, 3944,
+     5143, 4189, 5143, 5143, 5143, 5143, 5143, 4190, 4190, 4190,
+     4190, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4190, 4190,
+     4190, 4190, 4190, 5143, 4190, 5143, 5143, 5143, 5143, 5143,
+     5143, 4190, 2263, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 2268, 5143, 5143, 5143, 5143, 5143, 2263, 2263,
+
+     2263, 2263, 2263, 2263, 2263, 2263, 5143, 5143, 5143, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 3370, 4191, 4192, 4191, 4191, 3370, 3370,
+     4193, 3370, 4191, 3370, 3370, 4194, 4195, 4191, 4196, 3668,
+     4197, 4191, 3370, 3370, 4191, 3370, 4193, 4193, 4193, 4193,
+     4193, 4193, 4193, 4193, 4191, 3370, 4191, 4193, 4193, 4193,
+     4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193,
+     4193, 3370, 3370,  215, 3325, 1962, 3325, 3325,  215,  750,
+      756,  215,  626,  215,  749, 1714, 2360,  626,  757, 4198,
+      759, 1716,  215,  215,  626,  215, 3621, 3621, 3621, 3621,
+
+     3621, 3621, 3621, 3621,  626,  215,  626, 3621, 3621, 3621,
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+     3621,  750,  215, 3944, 5143, 3945, 5143, 5143, 5143, 5143,
+     5143, 3946, 3946, 3946, 3946, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3946, 3946, 3946, 3946, 3946, 5143, 3946, 5143,
+     5143, 5143, 5143, 5143, 5143, 3946, 1334, 2340, 2341, 2340,
+     2340, 1334, 1334, 2342, 1334, 2343, 1334, 1334, 2344, 2345,
+     2343, 2346, 2697, 2347, 2348, 1334, 1334, 2343, 1334, 2342,
+     2342, 2342, 2342, 2342, 2342, 2342, 2342, 2343, 1334, 2343,
+     2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342,
+
+     2342, 2342, 2342, 2342, 1334, 1334,  213,  344,  344,  344,
+      344,  213,  213,  398,  213,  344,  213,  213,  339,  399,
+      344,  400,  401,  402,  344,  213,  213,  344,  213,  398,
+      398,  398,  398,  398,  398,  398,  398,  344,  213,  344,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  213,  213,  536, 1142, 1353, 1142,
+     1142,  536,  536, 1562,  536, 1142,  536,  536, 1137, 1355,
+     1142, 1356, 1357, 1563, 1142,  536,  536, 1142,  536, 1562,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1142,  536, 1142,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+
+     1562, 1562, 1562, 1562,  536,  536,  776, 1559, 1805, 1559,
+     1559,  776,  776, 1806,  776, 1559,  776,  776, 1555, 1807,
+     1559, 1808, 3685, 1809, 1559,  776,  776, 1559,  776, 1806,
+     1806, 1806, 1806, 1806, 1806, 1806, 1806, 1559,  776, 1559,
+     1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
+     1806, 1806, 1806, 1806,  776,  776, 1354, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 1358, 5143, 5143, 5143,
+     5143, 5143, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     5143, 5143, 5143, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354,  550, 1814, 1792,
+
+     1814, 1814,  550,  550, 2076,  550, 2077,  550,  550, 1157,
+     4200, 2077, 2079, 4201, 2081,  967,  550,  550, 2077,  550,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2077,  550,
+     2077, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076,  550,  550, 1572, 5143, 1573,
+     5143, 5143, 5143, 5143, 5143, 1574, 1574, 1574, 1574, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 1574, 1574, 1574, 1574,
+     1574, 5143, 1574, 5143, 5143, 5143, 5143, 5143, 5143, 1574,
+     1812, 2727, 3949, 2727, 2727, 1812, 1812, 3950, 1812, 2727,
+     1812, 1812, 2722, 3951, 2727, 3952, 3953, 3954, 2727, 1812,
+
+     1812, 2727, 1812, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 2727, 1812, 2727, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 1812, 1812,
+      784, 1147, 1147, 1147, 1147,  784, 1359, 1148,  784,  961,
+      784, 1360, 1361, 1150,  961, 1151, 1362, 1153, 1363,  784,
+      784,  961,  784, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364,  961,  784,  961, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1359,  784,
+     1841, 3960, 4202, 3960, 3960, 1841, 3449, 3113, 1841, 2767,
+     1841, 3447, 4203, 3115, 2767, 3116, 4204, 3118, 4205, 1841,
+
+     1841, 2767, 1841, 4206, 4206, 4206, 4206, 4206, 4206, 4206,
+     4206, 2767, 1841, 2767, 4206, 4206, 4206, 4206, 4206, 4206,
+     4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206, 3449, 1841,
+     1970, 3964, 4207, 3964, 3964, 1970, 3283, 4208, 1970, 3978,
+     1970, 2963, 4209, 4210, 3978, 4211, 4212, 4213, 4214, 1970,
+     1970, 3978, 1970, 4215, 4215, 4215, 4215, 4215, 4215, 4215,
+     4215, 3978, 1970, 3978, 4215, 4215, 4215, 4215, 4215, 4215,
+     4215, 4215, 4215, 4215, 4215, 4215, 4215, 4215, 3283, 1970,
+     1815, 2738, 3068, 2738, 2738, 1815, 3069, 3070, 1815, 3071,
+     1815, 3072, 3073, 4216, 3071, 3075, 4217, 3077, 3078, 1815,
+
+     1815, 3071, 1815, 3079, 3079, 3079, 3079, 3079, 3079, 3079,
+     3079, 3071, 1815, 3071, 3079, 3079, 3079, 3079, 3079, 3079,
+     3079, 3079, 3079, 3079, 3079, 3079, 3079, 3079, 3069, 1815,
+      512, 3966, 3282, 3966, 3966,  512, 1034, 2255,  512, 1984,
+      512,  847, 3823, 2256, 1984, 2257, 4218, 2259, 3825,  512,
+      512, 1984,  512, 4219, 4219, 4219, 4219, 4219, 4219, 4219,
+     4219, 1984,  512, 1984, 4219, 4219, 4219, 4219, 4219, 4219,
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 1034,  512,
+     1818, 2748, 3082, 2748, 2748, 1818, 3083, 3084, 1818, 2764,
+     1818, 3085, 3086, 4220, 2764, 3088, 4221, 3090, 3091, 1818,
+
+     1818, 2764, 1818, 3092, 3092, 3092, 3092, 3092, 3092, 3092,
+     3092, 2764, 1818, 2764, 3092, 3092, 3092, 3092, 3092, 3092,
+     3092, 3092, 3092, 3092, 3092, 3092, 3092, 3092, 3083, 1818,
+      248, 1817, 1817, 1817, 1817,  248,  377,  729,  248,  610,
+      248,  336, 1701,  730,  610,  731, 2086,  733, 1703,  248,
+      248,  610,  248, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087,  610,  248,  610, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,  377,  248,
+     1080, 1846, 2113, 1846, 1846, 1080, 1080, 2431, 1080, 1846,
+     1080, 1080, 2068, 2115, 1846, 2116, 2117, 2432, 1846, 1080,
+
+     1080, 1846, 1080, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 1846, 1080, 1846, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 1080, 1080,
+     2110, 4224, 4225, 4224, 4224, 2110, 2110, 4226, 2110, 4224,
+     2110, 2110, 4227, 4228, 4224, 4229, 4230, 4231, 4224, 2110,
+     2110, 4224, 2110, 4226, 4226, 4226, 4226, 4226, 4226, 4226,
+     4226, 4224, 2110, 4224, 4226, 4226, 4226, 4226, 4226, 4226,
+     4226, 4226, 4226, 4226, 4226, 4226, 4226, 4226, 2110, 2110,
+      641, 1154, 1380, 1154, 1154,  641,  641, 1594,  641, 1154,
+      641,  641, 1382, 1383, 1154, 1384, 1385, 1595, 1154,  641,
+
+      641, 1154,  641, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1154,  641, 1154, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,  641,  641,
+     1970, 3978, 3968, 3978, 3978, 1970, 1970, 4208, 1970, 3978,
+     1970, 1970, 4172, 4210, 3978, 4211, 4234, 4213, 3978, 1970,
+     1970, 3978, 1970, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 3978, 1970, 3978, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 1970, 1970,
+     1841, 2767, 3112, 2767, 2767, 1841, 1841, 3113, 1841, 2767,
+     1841, 1841, 3114, 4235, 2767, 3116, 4236, 3118, 2767, 1841,
+
+     1841, 2767, 1841, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 2767, 1841, 2767, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 1841, 1841,
+     2130, 3127, 3468, 3127, 3127, 2130, 2130, 3980, 2130, 2130,
+     2130, 2130, 2130, 2131, 2130, 2130, 3469, 3980, 2130, 2130,
+     2130, 2130, 2130, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 2130, 2130, 2130, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3470, 2130,
+      561,  662,  662,  662,  662,  561,  561,  813,  561,  561,
+      561,  561,  561,  562,  561,  561,  814,  561,  561,  561,
+
+      561,  561,  561,  813,  813,  813,  813,  813,  813,  813,
+      813,  561,  561,  561,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  815,  561,
+     1406, 3991, 2135, 3991, 3991, 1406, 1406, 2445, 1406, 1406,
+     1406, 1406, 1406, 1407, 1406, 1406, 4243, 1406, 1406, 1406,
+     1406, 1406, 1406, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 1406, 1406, 1406, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 4244, 1406,
+     2484, 3754, 3764, 3754, 3754, 2484, 2484, 3994, 2484, 2484,
+     2484, 3754, 3754, 2485, 2484, 2484, 3995, 3996, 3754, 2484,
+
+     2484, 2484, 2484, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 2484, 2484, 2484, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3756, 2484,
+     4250, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4251, 5143, 5143, 5143, 5143, 5143, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 5143, 5143, 5143, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250,  424, 2486, 2486, 2486, 2486,  424,  424, 2817,  424,
+      424,  424,  680,  680,  425,  424,  424, 2818,  424,  680,
+      424,  424,  424,  424, 2817, 2817, 2817, 2817, 2817, 2817,
+
+     2817, 2817,  424,  424,  424, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,  832,
+      424, 1196, 1891, 1891, 1891, 1891, 1196, 1196, 2158, 1196,
+     1196, 1196, 1891, 1891, 1197, 1196, 1196, 1895, 1196, 1891,
+     1196, 1196, 1196, 1196, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 1196, 1196, 1196, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1893,
+     1196, 2487, 3766, 4003, 3766, 3766, 2487, 2487, 4004, 2487,
+     2487, 2487, 3766, 3766, 2488, 2487, 2487, 4005, 4006, 3766,
+     2487, 2487, 2487, 2487, 4004, 4004, 4004, 4004, 4004, 4004,
+
+     4004, 4004, 2487, 2487, 2487, 4004, 4004, 4004, 4004, 4004,
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 3768,
+     2487, 4255, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4256, 5143, 5143, 5143, 5143, 5143, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 5143, 5143, 5143, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 2163, 3499, 1673, 3499, 3499, 2163, 2163, 4012,
+     2163, 2163, 2163, 3499, 3499, 2164, 2163, 2163, 3770, 4013,
+     3499, 2163, 2163, 2163, 2163, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4012, 2163, 2163, 2163, 4012, 4012, 4012, 4012,
+
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     3501, 2163, 4014, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 4015, 5143, 5143, 5143, 5143, 5143, 4014, 4014,
+     4014, 4014, 4014, 4014, 4014, 4014, 5143, 5143, 5143, 4014,
+     4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014,
+     4014, 4014, 4014, 2501, 4021, 4022, 4021, 4021, 2501, 2501,
+     4259, 2501, 2501, 2501, 4021, 4021, 2502, 2501, 2501, 4024,
+     2501, 4021, 2501, 2501, 2501, 2501, 4259, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 2501, 2501, 2501, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+
+     4259, 4026, 2501,  324, 1904, 1904, 1904, 1904,  324,  324,
+     2168,  324,  324,  324,  681,  681,  325,  324,  324, 2169,
+      324,  681,  324,  324,  324,  324, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168,  324,  324,  324, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168,  685,  324, 4260, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4261, 5143, 5143, 5143, 5143, 5143, 4260,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 5143, 5143, 5143,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260,
+     4260, 4260, 4260, 4260, 4023, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 4025, 5143, 5143, 5143, 5143, 5143,
+     4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 5143, 5143,
+     5143, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023,
+     4023, 4023, 4023, 4023, 4023,  838, 4029, 3782, 4029, 4029,
+      838,  838, 4264,  838,  838,  838, 1910, 1910,  839,  838,
+      838, 4265,  838, 1910,  838,  838,  838,  838, 4264, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264,  838,  838,  838, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 1914,  838, 1726, 3605, 3560, 3605, 3605,
+     1726, 1726, 4032, 1726, 3799, 1726, 1726, 3883, 3801, 3799,
+
+     3802, 3884, 4033, 3885, 1726, 1726, 3799, 1726, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 3799, 1726, 3799, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 4032, 1726, 1726, 4046, 5143, 4269, 5143, 5143,
+     5143, 5143, 5143, 4270, 4270, 4270, 4270, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4270, 4270, 4270, 4270, 4270, 5143,
+     4270, 5143, 5143, 5143, 5143, 5143, 5143, 4270, 3798, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3804, 5143,
+     5143, 5143, 5143, 5143, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 5143, 5143, 5143, 3798, 3798, 3798, 3798, 3798,
+
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,  248,
+     1460, 1460, 1460, 1460,  248,  377,  603,  248,  604,  248,
+      336, 1701,  606,  604,  607, 1702,  609, 1703,  248,  248,
+      604,  248, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+      604,  248,  604, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704,  377,  248, 1726,
+     2585, 2960, 2585, 2585, 1726, 2961, 1726, 1726, 1726, 1726,
+     2585, 2585, 1727, 1726, 1726, 2962, 1726, 2961, 1726, 1726,
+     1726, 1726, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     1726, 1726, 1726, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 1726, 2231,
+     4271, 4272, 4271, 4271, 2231, 2231, 4273, 2231, 4274, 2231,
+     2231, 4275, 4276, 4274, 4277, 3884, 4278, 4279, 2231, 2231,
+     4274, 2231, 4273, 4273, 4273, 4273, 4273, 4273, 4273, 4273,
+     4274, 2231, 4274, 4273, 4273, 4273, 4273, 4273, 4273, 4273,
+     4273, 4273, 4273, 4273, 4273, 4273, 4273, 2231, 2231, 1093,
+     1928, 1940, 1928, 1928, 1093, 1925, 1093, 1093, 1093, 1093,
+     1928, 1928, 1740, 1093, 1093, 4280, 1093, 1925, 1093, 1093,
+     1093, 1093, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+     1093, 1093, 1093, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+
+     1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1093, 4046,
+     5143, 4047, 5143, 5143, 5143, 5143, 5143, 4048, 4048, 4048,
+     4048, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4048, 4048,
+     4048, 4048, 4048, 5143, 4048, 5143, 5143, 5143, 5143, 5143,
+     5143, 4048, 1726, 3885, 3871, 3885, 3885, 1726, 1726, 4049,
+     1726, 3885, 1726, 1726, 3883, 4050, 3885, 4051, 4052, 4053,
+     3885, 1726, 1726, 3885, 1726, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 3885, 1726, 3885, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     1726, 1726, 4284, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 4285, 5143, 5143, 5143, 5143, 5143, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284, 4284, 5143, 5143, 5143, 4284,
+     4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284,
+     4284, 4284, 4284, 1967, 4043, 4286, 4043, 4043, 1967, 1967,
+     4287, 1967, 4043, 1967, 1967, 4038, 4288, 4043, 4289, 4290,
+     4291, 4043, 1967, 1967, 4043, 1967, 4287, 4287, 4287, 4287,
+     4287, 4287, 4287, 4287, 4043, 1967, 4043, 4287, 4287, 4287,
+     4287, 4287, 4287, 4287, 4287, 4287, 4287, 4287, 4287, 4287,
+     4287, 1967, 1967, 4294, 5143, 4295, 5143, 5143, 5143, 5143,
+     5143, 4296, 4296, 4296, 4296, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 4296, 4296, 4296, 4296, 4296, 5143, 4296, 5143,
+     5143, 5143, 5143, 5143, 5143, 4296, 1458, 2850, 2203, 2850,
+     2850, 1458, 1458, 2511, 1458, 2512, 1458, 1458, 2852, 2515,
+     2512, 2516, 2853, 2518, 2855, 1458, 1458, 2512, 1458, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2512, 1458, 2512,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 1458, 1458,  599,  854,  854,  854,
+      854,  599, 1038,  855,  599,  856,  599, 1039, 1040,  858,
+      856,  859, 1041,  861, 1042,  599,  599,  856,  599, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043,  856,  599,  856,
+
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1038,  599, 2851, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 2854, 5143, 5143, 5143,
+     5143, 5143, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+     5143, 5143, 5143, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851, 1458, 2513, 2532,
+     2513, 2513, 1458, 2510, 1458, 1458, 1458, 1458, 2513, 2513,
+     1459, 1458, 1458, 2856, 1458, 2510, 1458, 1458, 1458, 1458,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 1458, 1458,
+     1458, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510,
+
+     2510, 2510, 2510, 2510, 2510, 2510, 1458, 1921, 3180, 3181,
+     3180, 3180, 1921, 1921, 3182, 1921, 3183, 1921, 1921, 3184,
+     3185, 3183, 3186, 4297, 3187, 3188, 1921, 1921, 3183, 1921,
+     3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3183, 1921,
+     3183, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+     3182, 3182, 3182, 3182, 3182, 1921, 1921, 1504, 3523, 3792,
+     3523, 3523, 1504, 2986, 2620, 1504, 2621, 1504, 2984, 3793,
+     3886, 2621, 2624, 4298, 2626, 3795, 1504, 1504, 2621, 1504,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 2621, 1504,
+     2621, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+
+     3796, 3796, 3796, 3796, 3796, 2986, 1504, 2869, 5143, 2870,
+     5143, 5143, 5143, 5143, 5143, 2871, 2871, 2871, 2871, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 2871, 2871, 2871, 2871,
+     2871, 5143, 2871, 5143, 5143, 5143, 5143, 5143, 5143, 2871,
+     1458, 2855, 2573, 2855, 2855, 1458, 1458, 2872, 1458, 2855,
+     1458, 1458, 2852, 2873, 2855, 2874, 2875, 2876, 2855, 1458,
+     1458, 2855, 1458, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2855, 1458, 2855, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 1458, 1458,
+     3538, 4299, 4300, 4299, 4299, 3538, 3538, 4301, 3538, 4302,
+
+     3538, 3538, 4303, 4304, 4302, 4305, 4306, 4307, 4308, 3538,
+     3538, 4302, 3538, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
+     4301, 4302, 3538, 4302, 4301, 4301, 4301, 4301, 4301, 4301,
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 3538, 3538,
+     2228, 3617, 3568, 3617, 3617, 2228, 2228, 4066, 2228, 3811,
+     2228, 2228, 3577, 3812, 3811, 3813, 3814, 4067, 3253, 2228,
+     2228, 3811, 2228, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 3811, 2228, 3811, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 2228, 2228,
+     4076, 5143, 4309, 5143, 5143, 5143, 5143, 5143, 4310, 4310,
+
+     4310, 4310, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4310,
+     4310, 4310, 4310, 4310, 5143, 4310, 5143, 5143, 5143, 5143,
+     5143, 5143, 4310, 3810, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3815, 5143, 5143, 5143, 5143, 5143, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 5143, 5143, 5143,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810,  255, 1478, 1478, 1478, 1478,  255,
+      469,  628,  255,  629,  255,  468, 1590,  630,  629,  631,
+     1721,  633, 1592,  255,  255,  629,  255, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722,  629,  255,  629, 1722, 1722,
+
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722,  469,  255, 2937, 4311, 4312, 4311, 4311, 2937,
+     2937, 4313, 2937, 4314, 2937, 2937, 4126, 4315, 4314, 4316,
+     3814, 4317, 4123, 2937, 2937, 4314, 2937, 4313, 4313, 4313,
+     4313, 4313, 4313, 4313, 4313, 4314, 2937, 4314, 4313, 4313,
+     4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313,
+     4313, 4313, 2937, 2937, 1093, 1991, 1962, 1991, 1991, 1093,
+     1093, 2192, 1093, 1991, 1093, 1093, 1989, 4318, 1991, 2193,
+     4319, 2195, 1991, 1093, 1093, 1991, 1093, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 1991, 1093, 1991, 2192, 2192,
+
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 1093, 1093, 4076, 5143, 4077, 5143, 5143, 5143,
+     5143, 5143, 4078, 4078, 4078, 4078, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4078, 4078, 4078, 4078, 4078, 5143, 4078,
+     5143, 5143, 5143, 5143, 5143, 5143, 4078, 1461, 2238,  854,
+     2238, 2238, 1461, 1461, 2534, 1461, 2535, 1461, 1461, 2590,
+     2538, 2535, 2539, 2591, 2541, 2592, 1461, 1461, 2535, 1461,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2535, 1461,
+     2535, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 1461, 1461, 2879, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 2880, 5143, 5143,
+     5143, 5143, 5143, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 5143, 5143, 5143, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 1461, 2536,
+     2881, 2536, 2536, 1461, 2533, 1461, 1461, 1461, 1461, 2536,
+     2536, 1462, 1461, 1461, 2882, 1461, 2533, 1461, 1461, 1461,
+     1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461,
+     1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533,
+     2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461, 1937, 3208,
+     1922, 3208, 3208, 1937, 1937, 3209, 1937, 3210, 1937, 1937,
+
+     3211, 3212, 3210, 3213, 4326, 3214, 3215, 1937, 1937, 3210,
+     1937, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3210,
+     1937, 3210, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3209, 3209, 3209, 3209, 3209, 1937, 1937,  517, 3285,
+     2985, 3285, 3285,  517, 1264, 1083,  517, 1084,  517, 1262,
+     3597, 1985, 1084, 1087, 4327, 1089, 3599,  517,  517, 1084,
+      517, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 1084,
+      517, 1084, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 1264,  517, 2894, 5143,
+     2895, 5143, 5143, 5143, 5143, 5143, 2896, 2896, 2896, 2896,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 2896, 2896, 2896,
+     2896, 2896, 5143, 2896, 5143, 5143, 5143, 5143, 5143, 5143,
+     2896, 1461, 2592, 2897, 2592, 2592, 1461, 1461, 2898, 1461,
+     2592, 1461, 1461, 2590, 2899, 2592, 2900, 2901, 2902, 2592,
+     1461, 1461, 2592, 1461, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2592, 1461, 2592, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 1461,
+     1461, 3554, 4328, 3539, 4328, 4328, 3554, 3554, 4329, 3554,
+     4330, 3554, 3554, 4331, 4332, 4330, 4333, 4334, 4335, 4336,
+     3554, 3554, 4330, 3554, 4329, 4329, 4329, 4329, 4329, 4329,
+
+     4329, 4329, 4330, 3554, 4330, 4329, 4329, 4329, 4329, 4329,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 3554,
+     3554,  709,  709,  709,  709, 5143,  169,  115, 5143,  116,
+     5143,  168,  850,  116,  116,  118,  851,  120,  852, 5143,
+     5143,  116, 5143,  853,  853,  853,  853,  853,  853,  853,
+      853,  116, 5143,  116,  853,  853,  853,  853,  853,  853,
+      853,  853,  853,  853,  853,  853,  853,  853,  169, 1291,
+     2006, 1962, 2006, 2006, 1291, 1291, 2669, 1291, 2289, 1291,
+     1291, 2290, 2289, 2289, 2291, 2292, 2670, 2109, 1291, 1291,
+     2289, 1291, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+
+     2289, 1291, 2289, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 1291, 1291,  599,
+      712,  712,  712,  712,  599,  599,  855,  599,  856,  599,
+      599,  857,  858,  856,  859,  860,  861,  862,  599,  599,
+      856,  599,  855,  855,  855,  855,  855,  855,  855,  855,
+      856,  599,  856,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  599,  599, 1234,
+     2007, 2294, 2007, 2007, 1234, 1234, 2205, 1234, 2206, 1234,
+     1234, 2295, 3565, 2206, 2210, 4343, 2212, 2297, 1234, 1234,
+     2206, 1234, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+
+     2206, 1234, 2206, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 1234, 1234, 1234,
+     2007, 2294, 2007, 2007, 1234, 1234, 2547, 1234, 2206, 1234,
+     1234, 2295, 2209, 2206, 2210, 2296, 2548, 2297, 1234, 1234,
+     2206, 1234, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2206, 1234, 2206, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 1234, 1234, 1234,
+     2207,  854, 2207, 2207, 1234, 2204, 1234, 1234, 1234, 1234,
+     2207, 2207, 1235, 1234, 1234, 2549, 1234, 2204, 1234, 1234,
+     1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+
+     1234, 1234, 1234, 2204, 2204, 2204, 2204, 2204, 2204, 2204,
+     2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 1234, 1711,
+     2910, 2911, 2910, 2910, 1711, 1711, 2912, 1711, 2913, 1711,
+     1711, 2914, 2915, 2913, 2916, 4344, 2917, 2918, 1711, 1711,
+     2913, 1711, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+     2913, 1711, 2913, 2912, 2912, 2912, 2912, 2912, 2912, 2912,
+     2912, 2912, 2912, 2912, 2912, 2912, 2912, 1711, 1711,  946,
+     3244, 3568, 3244, 3244,  946, 2036, 1778,  946, 1779,  946,
+     2035, 3569, 2692, 1779, 1782, 4345, 1784, 3571,  946,  946,
+     1779,  946, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+
+     1779,  946, 1779, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 2036,  946, 2209,
+     5143, 2560, 2296, 2561, 5143, 5143, 5143, 5143, 5143, 2562,
+     2562, 2562, 2562, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2562, 2562, 2562, 2562, 2562, 5143, 2562, 5143, 5143, 5143,
+     5143, 5143, 5143, 2562, 1234, 2297, 2563, 2297, 2297, 1234,
+     1234, 2564, 1234, 2297, 1234, 1234, 2295, 2565, 2297, 2566,
+     2567, 2568, 2297, 1234, 1234, 2297, 1234, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2297, 1234, 2297, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+
+     2564, 2564, 1234, 1234,  599,  862,  862,  862,  862,  599,
+      599, 1061,  599,  862,  599,  599,  857, 1062,  862, 1063,
+     1064, 1065,  862,  599,  599,  862,  599, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061,  862,  599,  862, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061,  599,  599, 2228, 3253, 3575, 3253, 3253, 2228,
+     2228, 3857, 2228, 3253, 2228, 2228, 3577, 3578, 3253, 3868,
+     3580, 4119, 3253, 2228, 2228, 3253, 2228, 4120, 4120, 4120,
+     4120, 3857, 3857, 3857, 3857, 3253, 2228, 3253, 4120, 4120,
+     4120, 4120, 4120, 3857, 4120, 3857, 3857, 3857, 3857, 3857,
+
+     3857, 4120, 2228, 2228, 3576, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3579, 5143, 3581, 5143, 5143, 5143, 5143, 5143,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 5143, 5143,
+     5143, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576,  255, 1478, 1478, 1478, 1478,
+      255,  469,  628,  255,  629,  255,  468, 1590,  630,  629,
+      631, 1721,  633, 1592,  255,  255,  629,  255, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722,  629,  255,  629, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722,  469,  255, 3579, 5143, 3858, 5143, 5143,
+
+     5143, 5143, 5143, 3857, 3857, 3857, 3857, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3857, 3857, 3857, 3857, 3857, 5143,
+     3857, 5143, 5143, 5143, 5143, 5143, 5143, 3857, 2228, 3818,
+     3832, 3818, 3818, 2228, 3817, 2228, 2228, 2228, 2228, 3818,
+     3818, 2229, 2228, 2228, 3859, 2228, 3817, 2228, 2228, 2228,
+     2228, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 2228,
+     2228, 2228, 3817, 3817, 3817, 3817, 3817, 3817, 3817, 3817,
+     3817, 3817, 3817, 3817, 3817, 3817, 3817, 2228, 2937, 4123,
+     4124, 4123, 4123, 2937, 2937, 4125, 2937, 4123, 2937, 2937,
+     4126, 4127, 4123, 4128, 4349, 4129, 4123, 2937, 2937, 4123,
+
+     2937, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4123,
+     2937, 4123, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125,
+     4125, 4125, 4125, 4125, 4125, 4125, 2937, 2937, 3868, 5143,
+     3869, 5143, 5143, 5143, 5143, 5143, 3870, 3870, 3870, 3870,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3870, 3870, 3870,
+     3870, 3870, 5143, 3870, 5143, 5143, 5143, 5143, 5143, 5143,
+     3870, 1479, 2362, 2563, 2362, 2362, 1479, 1479, 2575, 1479,
+     2576, 1479, 1479, 2701, 2579, 2576, 2580, 2702, 2582, 2703,
+     1479, 1479, 2576, 1479, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2576, 1479, 2576, 2575, 2575, 2575, 2575, 2575,
+
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 1479,
+     1479, 2939, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2940, 5143, 5143, 5143, 5143, 5143, 2939, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 5143, 5143, 5143, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 1479, 2577, 2897, 2577, 2577, 1479, 2574, 1479,
+     1479, 1479, 1479, 2577, 2577, 1480, 1479, 1479, 2941, 1479,
+     2574, 1479, 1479, 1479, 1479, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 1479, 1479, 1479, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+
+     2574, 1479, 1960, 3258, 3236, 3258, 3258, 1960, 1960, 3259,
+     1960, 3260, 1960, 1960, 3261, 3262, 3260, 3263, 4353, 3264,
+     3265, 1960, 1960, 3260, 1960, 3259, 3259, 3259, 3259, 3259,
+     3259, 3259, 3259, 3260, 1960, 3260, 3259, 3259, 3259, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259,
+     1960, 1960,  536, 3380, 3001, 3380, 3380,  536, 1339, 1135,
+      536, 1136,  536, 1338, 3677, 2073, 1136, 1139, 4354, 1141,
+     3679,  536,  536, 1136,  536, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 1136,  536, 1136, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+
+     1339,  536, 2951, 5143, 2952, 5143, 5143, 5143, 5143, 5143,
+     2953, 2953, 2953, 2953, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2953, 2953, 2953, 2953, 2953, 5143, 2953, 5143, 5143,
+     5143, 5143, 5143, 5143, 2953, 1479, 2703, 2954, 2703, 2703,
+     1479, 1479, 2955, 1479, 2703, 1479, 1479, 2701, 2956, 2703,
+     2957, 2958, 2959, 2703, 1479, 1479, 2703, 1479, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2703, 1479, 2703, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 1479, 1479, 3592, 4355, 4356, 4355, 4355,
+     3592, 3592, 4357, 3592, 4358, 3592, 3592, 4359, 4360, 4358,
+
+     4361, 4362, 4363, 4364, 3592, 3592, 4358, 3592, 4357, 4357,
+     4357, 4357, 4357, 4357, 4357, 4357, 4358, 3592, 4358, 4357,
+     4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+     4357, 4357, 4357, 3592, 3592,  599, 1039, 1039, 1039, 1039,
+      599, 1038,  599,  599,  599,  599, 1039, 1039,  600,  599,
+      599, 1046,  599, 1038,  599,  599,  599,  599, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,  599,  599,  599, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038,  599, 3615, 4371, 4372, 4371, 4371,
+     3615, 3615, 4373, 3615, 4374, 3615, 3615, 4375, 4376, 4374,
+
+     4377, 4378, 4379, 4380, 3615, 3615, 4374, 3615, 4373, 4373,
+     4373, 4373, 4373, 4373, 4373, 4373, 4374, 3615, 4374, 4373,
+     4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373,
+     4373, 4373, 4373, 3615, 3615, 1236, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 1237, 5143, 5143, 5143, 5143,
+     5143, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 5143,
+     5143, 5143, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236,  710, 1232, 1232, 1232,
+     1232,  710,  710, 1471,  710, 1232,  710,  710, 1228, 1472,
+     1232, 1473, 4381, 1474, 1232,  710,  710, 1232,  710, 1471,
+
+     1471, 1471, 1471, 1471, 1471, 1471, 1471, 1232,  710, 1232,
+     1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+     1471, 1471, 1471, 1471,  710,  710,  784, 1994, 1994, 1994,
+     1994,  784,  784, 2263,  784, 2264,  784,  784, 1149, 4382,
+     2264, 2266, 4383, 2268,  961,  784,  784, 2264,  784, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2264,  784, 2264,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263,  784,  784, 1245, 5143, 1246, 5143,
+     5143, 5143, 5143, 5143, 1247, 1247, 1247, 1247, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 1247, 1247, 1247, 1247, 1247,
+
+     5143, 1247, 5143, 5143, 5143, 5143, 5143, 5143, 1247,  962,
+     2656, 2657, 2656, 2656,  962,  962, 2658,  962, 2659,  962,
+      962, 1835, 2660, 2659, 2661, 3023, 2662, 1832,  962,  962,
+     2659,  962, 2658, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
+     2659,  962, 2659, 2658, 2658, 2658, 2658, 2658, 2658, 2658,
+     2658, 2658, 2658, 2658, 2658, 2658, 2658,  962,  962,  599,
+     2897, 2897, 2897, 2897,  599, 1038, 1061,  599,  862,  599,
+     1039, 1040, 1062,  862, 1063, 3217, 1065, 1042,  599,  599,
+      862,  599, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+      862,  599,  862, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 1038,  599, 1970,
+     3909, 3871, 3909, 3909, 1970, 1970, 4393, 1970, 4171, 1970,
+     1970, 4172, 4173, 4171, 4174, 4175, 4394, 3978, 1970, 1970,
+     4171, 1970, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4171, 1970, 4171, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 1970, 1970, 4170,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4176,
+     5143, 5143, 5143, 5143, 5143, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 5143, 5143, 5143, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+
+     1970, 2963, 3282, 2963, 2963, 1970, 3283, 1970, 1970, 1970,
+     1970, 2963, 2963, 1971, 1970, 1970, 3284, 1970, 3283, 1970,
+     1970, 1970, 1970, 3283, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 1970, 1970, 1970, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 1970,
+     2234, 4395, 4286, 4395, 4395, 2234, 2234, 4396, 2234, 4397,
+     2234, 2234, 4398, 4399, 4397, 4400, 4401, 4402, 4403, 2234,
+     2234, 4397, 2234, 4396, 4396, 4396, 4396, 4396, 4396, 4396,
+     4396, 4397, 2234, 4397, 4396, 4396, 4396, 4396, 4396, 4396,
+     4396, 4396, 4396, 4396, 4396, 4396, 4396, 4396, 2234, 2234,
+
+     4406, 5143, 4407, 5143, 5143, 5143, 5143, 5143, 4408, 4408,
+     4408, 4408, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4408,
+     4408, 4408, 4408, 4408, 5143, 4408, 5143, 5143, 5143, 5143,
+     5143, 5143, 4408, 2286, 3636, 3609, 3636, 3636, 2286, 2286,
+     3637, 2286, 3638, 2286, 2286, 3639, 3640, 3638, 3641, 3910,
+     3642, 3643, 2286, 2286, 3638, 2286, 3637, 3637, 3637, 3637,
+     3637, 3637, 3637, 3637, 3638, 2286, 3638, 3637, 3637, 3637,
+     3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637,
+     3637, 2286, 2286, 1760, 2668, 3001, 2668, 2668, 1760, 1760,
+     3024, 1760, 3025, 1760, 1760, 3026, 4409, 3025, 3028, 4410,
+
+     3030, 3031, 1760, 1760, 3025, 1760, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3025, 1760, 3025, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 1760, 1760, 1841, 3922, 3575, 3922, 3922, 1841, 1841,
+     4411, 1841, 4181, 1841, 1841, 3114, 4182, 4181, 4183, 4184,
+     4412, 2767, 1841, 1841, 4181, 1841, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4181, 1841, 4181, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 1841, 1841, 4180, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4185, 5143, 5143, 5143, 5143, 5143, 4180,
+
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 5143, 5143, 5143,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 2107, 4413, 3861, 4413, 4413, 2107,
+     2107, 4414, 2107, 4415, 2107, 2107, 3454, 4416, 4415, 4417,
+     4418, 4419, 3451, 2107, 2107, 4415, 2107, 4414, 4414, 4414,
+     4414, 4414, 4414, 4414, 4414, 4415, 2107, 4415, 4414, 4414,
+     4414, 4414, 4414, 4414, 4414, 4414, 4414, 4414, 4414, 4414,
+     4414, 4414, 2107, 2107, 4420, 5143, 4421, 5143, 5143, 5143,
+     5143, 5143, 4422, 4422, 4422, 4422, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4422, 4422, 4422, 4422, 4422, 5143, 4422,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 4422,  876, 4188, 3871,
+     4188, 4188,  876, 1728, 2026,  876, 1773,  876, 1483, 3561,
+     2027, 1773, 2028, 4425, 2030, 3563,  876,  876, 1773,  876,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 1773,  876,
+     1773, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 1728,  876, 3018, 3373, 3663,
+     3373, 3373, 3018, 3018, 3932, 3018, 3373, 3018, 3018, 3665,
+     3666, 3373, 3944, 3668, 4189, 3373, 3018, 3018, 3373, 3018,
+     4190, 4190, 4190, 4190, 3932, 3932, 3932, 3932, 3373, 3018,
+     3373, 4190, 4190, 4190, 4190, 4190, 3932, 4190, 3932, 3932,
+
+     3932, 3932, 3932, 3932, 4190, 3018, 3018, 3664, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3667, 5143, 3669, 5143, 5143,
+     5143, 5143, 5143, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 5143, 5143, 5143, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3667, 5143,
+     3933, 5143, 5143, 5143, 5143, 5143, 3932, 3932, 3932, 3932,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 3932, 3932, 3932,
+     3932, 3932, 5143, 3932, 5143, 5143, 5143, 5143, 5143, 5143,
+     3932, 3018, 3372, 3660, 3372, 3372, 3018, 3661, 3018, 3018,
+     3018, 3018, 3372, 3372, 3019, 3018, 3018, 3662, 3018, 3661,
+
+     3018, 3018, 3018, 3018, 3661, 3661, 3661, 3661, 3661, 3661,
+     3661, 3661, 3018, 3018, 3018, 3661, 3661, 3661, 3661, 3661,
+     3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661,
+     3018, 3370, 4191, 4192, 4191, 4191, 3370, 3370, 4193, 3370,
+     4191, 3370, 3370, 4194, 4195, 4191, 4196, 4427, 4197, 4191,
+     3370, 3370, 4191, 3370, 4193, 4193, 4193, 4193, 4193, 4193,
+     4193, 4193, 4191, 3370, 4191, 4193, 4193, 4193, 4193, 4193,
+     4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 3370,
+     3370, 3944, 5143, 3945, 5143, 5143, 5143, 5143, 5143, 3946,
+     3946, 3946, 3946, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     3946, 3946, 3946, 3946, 3946, 5143, 3946, 5143, 5143, 5143,
+     5143, 5143, 5143, 3946,  946, 4199, 3575, 4199, 4199,  946,
+     2036, 1793,  946, 1547,  946, 2035, 3569, 1794, 1547, 1795,
+     4428, 1797, 3571,  946,  946, 1547,  946, 4429, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 1547,  946, 1547, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 2036,  946,  793, 2730, 2355, 2730, 2730,  793,
+      793, 2731,  793, 2732,  793,  793, 1620, 2733, 2732, 2734,
+     3067, 2735, 1617,  793,  793, 2732,  793, 2731, 2731, 2731,
+     2731, 2731, 2731, 2731, 2731, 2732,  793, 2732, 2731, 2731,
+
+     2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731,
+     2731, 2731,  793,  793,  255, 1380, 1380, 1380, 1380,  255,
+      469,  403,  255,  345,  255,  468, 1590,  405,  345,  406,
+     1591,  408, 1592,  255,  255,  345,  255, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593,  345,  255,  345, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593,  469,  255, 1841, 3447, 3448, 3447, 3447, 1841,
+     3449, 1841, 1841, 1841, 1841, 3447, 3447, 1842, 1841, 1841,
+     3450, 1841, 3449, 1841, 1841, 1841, 1841, 3449, 3449, 3449,
+     3449, 3449, 3449, 3449, 3449, 1841, 1841, 1841, 3449, 3449,
+
+     3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449, 3449,
+     3449, 3449, 3449, 1841, 1841, 2767, 3112, 2767, 2767, 1841,
+     1841, 3113, 1841, 2767, 1841, 1841, 3114, 3115, 2767, 3116,
+     3117, 3118, 2767, 1841, 1841, 2767, 1841, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 2767, 1841, 2767, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 1841, 1841, 3445, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 3446, 5143, 5143, 5143, 5143, 5143,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 5143, 5143,
+     5143, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+
+     3445, 3445, 3445, 3445, 3445,  248, 1817, 1817, 1817, 1817,
+      248,  377,  729,  248,  610,  248,  336, 1701,  730,  610,
+      731, 2086,  733, 1703,  248,  248,  610,  248, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087,  610,  248,  610, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087,  377,  248, 1970, 3978, 3968, 3978, 3978,
+     1970, 1970, 4432, 1970, 3978, 1970, 1970, 4172, 4210, 3978,
+     4211, 4234, 4433, 3978, 1970, 1970, 3978, 1970, 4432, 4432,
+     4432, 4432, 4432, 4432, 4432, 4432, 3978, 1970, 3978, 4432,
+     4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432,
+
+     4432, 4432, 4432, 1970, 1970, 2234, 4403, 4434, 4403, 4403,
+     2234, 2234, 4435, 2234, 4403, 2234, 2234, 4398, 4436, 4403,
+     4437, 4438, 4439, 4403, 2234, 2234, 4403, 2234, 4435, 4435,
+     4435, 4435, 4435, 4435, 4435, 4435, 4403, 2234, 4403, 4435,
+     4435, 4435, 4435, 4435, 4435, 4435, 4435, 4435, 4435, 4435,
+     4435, 4435, 4435, 2234, 2234, 4208, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4213, 5143, 5143, 5143, 5143,
+     5143, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 5143,
+     5143, 5143, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4442, 5143, 4443, 5143,
+
+     5143, 5143, 5143, 5143, 4444, 4444, 4444, 4444, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4444, 4444, 4444, 4444, 4444,
+     5143, 4444, 5143, 5143, 5143, 5143, 5143, 5143, 4444, 3957,
+     4445, 4446, 4445, 4445, 3957, 3957, 4447, 3957, 4445, 3957,
+     3957, 4448, 4449, 4445, 4450, 4451, 4452, 4445, 3957, 3957,
+     4445, 3957, 4447, 4447, 4447, 4447, 4447, 4447, 4447, 4447,
+     4445, 3957, 4445, 4447, 4447, 4447, 4447, 4447, 4447, 4447,
+     4447, 4447, 4447, 4447, 4447, 4447, 4447, 3957, 3957,  512,
+     1984, 1817, 1984, 1984,  512,  512, 2607,  512, 1984,  512,
+      512, 1979, 2256, 1984, 2257, 2258, 2608, 1984,  512,  512,
+
+     1984,  512, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
+     1984,  512, 1984, 2607, 2607, 2607, 2607, 2607, 2607, 2607,
+     2607, 2607, 2607, 2607, 2607, 2607, 2607,  512,  512, 2422,
+     4455, 3958, 4455, 4455, 2422, 2422, 4456, 2422, 4455, 2422,
+     2422, 4457, 4458, 4455, 4459, 4460, 4461, 4455, 2422, 2422,
+     4455, 2422, 4456, 4456, 4456, 4456, 4456, 4456, 4456, 4456,
+     4455, 2422, 4455, 4456, 4456, 4456, 4456, 4456, 4456, 4456,
+     4456, 4456, 4456, 4456, 4456, 4456, 4456, 2422, 2422, 1588,
+     2430, 2768, 2430, 2430, 1588, 1588, 2755, 1588, 2430, 1588,
+     1588, 2769, 2758, 2430, 2759, 2770, 2761, 2430, 1588, 1588,
+
+     2430, 1588, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2430, 1588, 2430, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 1588, 1588,  784,
+      961,  961,  961,  961,  784,  784, 1148,  784,  961,  784,
+      784, 1149, 1150,  961, 1151, 1152, 1153,  961,  784,  784,
+      961,  784, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+      961,  784,  961, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148,  784,  784, 3096,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3097,
+     5143, 5143, 5143, 5143, 5143, 3096, 3096, 3096, 3096, 3096,
+
+     3096, 3096, 3096, 5143, 5143, 5143, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     1588, 2756, 1147, 2756, 2756, 1588, 2754, 1588, 1588, 1588,
+     1588, 2756, 2756, 1589, 1588, 1588, 3098, 1588, 2754, 1588,
+     1588, 1588, 1588, 2754, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 1588, 1588, 1588, 2754, 2754, 2754, 2754, 2754, 2754,
+     2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 1588,
+     2094, 3435, 3436, 3435, 3435, 2094, 2094, 3437, 2094, 3435,
+     2094, 2094, 3438, 3439, 3435, 3440, 4465, 3441, 3435, 2094,
+     2094, 3435, 2094, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3435, 2094, 3435, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 2094, 2094,
+      550, 3462, 3112, 3462, 3462,  550, 1390, 1156,  550,  967,
+      550, 1389, 3728, 2119,  967, 1159, 4466, 1161, 3730,  550,
+      550,  967,  550, 3731, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731,  967,  550,  967, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 1390,  550,
+     3107, 5143, 3108, 5143, 5143, 5143, 5143, 5143, 3109, 3109,
+     3109, 3109, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3109,
+     3109, 3109, 3109, 3109, 5143, 3109, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 3109, 2427, 3720, 3721, 3720, 3720, 2427, 2427,
+     3722, 2427, 3720, 2427, 2427, 3723, 3724, 3720, 3725, 3979,
+     3726, 3720, 2427, 2427, 3720, 2427, 3722, 3722, 3722, 3722,
+     3722, 3722, 3722, 3722, 3720, 2427, 3720, 3722, 3722, 3722,
+     3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722, 3722,
+     3722, 2427, 2427,  561,  812,  812,  812,  812,  561,  561,
+      813,  561,  561,  561,  561,  561,  562,  561,  561,  984,
+      561,  561,  561,  561,  561,  561,  813,  813,  813,  813,
+      813,  813,  813,  813,  561,  561,  561,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+
+      813,  985,  561, 2484, 3754, 3764, 3754, 3754, 2484, 2484,
+     4250, 2484, 2484, 2484, 3754, 3754, 2485, 2484, 2484, 3995,
+     4251, 3754, 2484, 2484, 2484, 2484, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 2484, 2484, 2484, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 3756, 2484, 3492, 4252, 4478, 4252, 4252, 3492, 3492,
+     4479, 3492, 3492, 3492, 4252, 4252, 3493, 3492, 3492, 4480,
+     3492, 4252, 3492, 3492, 3492, 3492, 4479, 4479, 4479, 4479,
+     4479, 4479, 4479, 4479, 3492, 3492, 3492, 4479, 4479, 4479,
+     4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+
+     4479, 4481, 3492, 2487, 3766, 4003, 3766, 3766, 2487, 2487,
+     4255, 2487, 2487, 2487, 3766, 3766, 2488, 2487, 2487, 4005,
+     4256, 3766, 2487, 2487, 2487, 2487, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 2487, 2487, 2487, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 3768, 2487, 1680, 4257, 4483, 4257, 4257, 1680, 1680,
+     4484, 1680, 1680, 1680, 2493, 2493, 1681, 1680, 1680, 4485,
+     1680, 2493, 1680, 1680, 1680, 1680, 4484, 4484, 4484, 4484,
+     4484, 4484, 4484, 4484, 1680, 1680, 1680, 4484, 4484, 4484,
+     4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+
+     4484, 2831, 1680, 1017, 4258, 4022, 4258, 4258, 1017, 1017,
+     4486, 1017, 1017, 1017, 2170, 2170, 1018, 1017, 1017, 4487,
+     1017, 2170, 1017, 1017, 1017, 1017, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 1017, 1017, 1017, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 2175, 1017, 2501, 4021, 4022, 4021, 4021, 2501, 2501,
+     4488, 2501, 2501, 2501, 4021, 4021, 2502, 2501, 2501, 4024,
+     4489, 4021, 2501, 2501, 2501, 2501, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 2501, 2501, 2501, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+
+     4488, 4026, 2501, 4260, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4261, 5143, 5143, 5143, 5143, 5143, 4260,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 5143, 5143, 5143,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260,
+     4260, 4260, 4260, 4260,  838, 1910, 1904, 1910, 1910,  838,
+      838, 2179,  838,  838,  838, 1910, 1910,  839,  838,  838,
+     1912, 2180, 1910,  838,  838,  838,  838, 2179, 2179, 2179,
+     2179, 2179, 2179, 2179, 2179,  838,  838,  838, 2179, 2179,
+     2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
+     2179, 2179, 1914,  838,  599,  854,  854,  854,  854,  599,
+
+     1038,  855,  599,  856,  599, 1039, 1040,  858,  856,  859,
+     1041,  861, 1042,  599,  599,  856,  599, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043,  856,  599,  856, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1038,  599, 1726, 3605, 3560, 3605, 3605, 1726,
+     1726, 4032, 1726, 3799, 1726, 1726, 3883, 3801, 3799, 4046,
+     3884, 4269, 3885, 1726, 1726, 3799, 1726, 4270, 4270, 4270,
+     4270, 4032, 4032, 4032, 4032, 3799, 1726, 3799, 4270, 4270,
+     4270, 4270, 4270, 4032, 4270, 4032, 4032, 4032, 4032, 4032,
+     4032, 4270, 1726, 1726, 3798, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 3802, 5143, 3804, 5143, 5143, 5143, 5143, 5143,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 5143, 5143,
+     5143, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798,  248, 1460, 1460, 1460, 1460,
+      248,  377,  603,  248,  604,  248,  336, 1701,  606,  604,
+      607, 1702,  609, 1703,  248,  248,  604,  248, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704,  604,  248,  604, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704,  377,  248, 3802, 5143, 4033, 5143, 5143,
+     5143, 5143, 5143, 4032, 4032, 4032, 4032, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 4032, 4032, 4032, 4032, 4032, 5143,
+     4032, 5143, 5143, 5143, 5143, 5143, 5143, 4032, 1726, 2585,
+     2960, 2585, 2585, 1726, 2961, 1726, 1726, 1726, 1726, 2585,
+     2585, 1727, 1726, 1726, 2962, 1726, 2961, 1726, 1726, 1726,
+     1726, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 1726,
+     1726, 1726, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 1726, 2231, 4271,
+     4272, 4271, 4271, 2231, 2231, 4273, 2231, 4274, 2231, 2231,
+     4275, 4276, 4274, 4277, 4496, 4278, 4279, 2231, 2231, 4274,
+     2231, 4273, 4273, 4273, 4273, 4273, 4273, 4273, 4273, 4274,
+
+     2231, 4274, 4273, 4273, 4273, 4273, 4273, 4273, 4273, 4273,
+     4273, 4273, 4273, 4273, 4273, 4273, 2231, 2231, 4046, 5143,
+     4047, 5143, 5143, 5143, 5143, 5143, 4048, 4048, 4048, 4048,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4048, 4048, 4048,
+     4048, 4048, 5143, 4048, 5143, 5143, 5143, 5143, 5143, 5143,
+     4048, 1726, 3885, 3871, 3885, 3885, 1726, 1726, 4049, 1726,
+     3885, 1726, 1726, 3883, 4050, 3885, 4051, 4052, 4053, 3885,
+     1726, 1726, 3885, 1726, 4049, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 3885, 1726, 3885, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 1726,
+
+     1726, 4284, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4285, 5143, 5143, 5143, 5143, 5143, 4284, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284, 5143, 5143, 5143, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284,
+     4284, 4284, 4294, 5143, 4497, 5143, 5143, 5143, 5143, 5143,
+     4498, 4498, 4498, 4498, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4498, 4498, 4498, 4498, 4498, 5143, 4498, 5143, 5143,
+     5143, 5143, 5143, 5143, 4498, 2231, 4279, 4499, 4279, 4279,
+     2231, 2231, 4500, 2231, 4279, 2231, 2231, 4275, 4501, 4279,
+     4502, 4052, 4503, 4279, 2231, 2231, 4279, 2231, 4500, 4500,
+
+     4500, 4500, 4500, 4500, 4500, 4500, 4279, 2231, 4279, 4500,
+     4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500,
+     4500, 4500, 4500, 2231, 2231, 1093, 1928, 1940, 1928, 1928,
+     1093, 1925, 1093, 1093, 1093, 1093, 1928, 1928, 2527, 1093,
+     1093, 4504, 1093, 1925, 1093, 1093, 1093, 1093, 1925, 1925,
+     1925, 1925, 1925, 1925, 1925, 1925, 1093, 1093, 1093, 1925,
+     1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
+     1925, 1925, 1925, 1925, 1093, 4294, 5143, 4295, 5143, 5143,
+     5143, 5143, 5143, 4296, 4296, 4296, 4296, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4296, 4296, 4296, 4296, 4296, 5143,
+
+     4296, 5143, 5143, 5143, 5143, 5143, 5143, 4296, 1458, 2850,
+     2203, 2850, 2850, 1458, 1458, 2511, 1458, 2512, 1458, 1458,
+     2852, 3807, 2512, 2516, 4508, 2518, 2855, 1458, 1458, 2512,
+     1458, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2512,
+     1458, 2512, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 1458, 1458, 1458, 2850,
+     2203, 2850, 2850, 1458, 1458, 2851, 1458, 2512, 1458, 1458,
+     2852, 2515, 2512, 2516, 2853, 2854, 2855, 1458, 1458, 2512,
+     1458, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2512,
+     1458, 2512, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+
+     2851, 2851, 2851, 2851, 2851, 2851, 1458, 1458, 1458, 2513,
+     2532, 2513, 2513, 1458, 2510, 1458, 1458, 1458, 1458, 2513,
+     2513, 1459, 1458, 1458, 2856, 1458, 2510, 1458, 1458, 1458,
+     1458, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 1458,
+     1458, 1458, 2510, 2510, 2510, 2510, 2510, 2510, 2510, 2510,
+     2510, 2510, 2510, 2510, 2510, 2510, 2510, 1458, 1921, 3180,
+     3181, 3180, 3180, 1921, 1921, 3182, 1921, 3183, 1921, 1921,
+     3184, 3185, 3183, 3186, 4509, 3187, 3188, 1921, 1921, 3183,
+     1921, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3183,
+     1921, 3183, 3182, 3182, 3182, 3182, 3182, 3182, 3182, 3182,
+
+     3182, 3182, 3182, 3182, 3182, 3182, 1921, 1921, 2228, 3541,
+     3816, 3541, 3541, 2228, 3817, 3810, 2228, 3811, 2228, 3818,
+     3819, 4510, 3811, 3813, 4511, 3815, 3821, 2228, 2228, 3811,
+     2228, 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3811,
+     2228, 3811, 3822, 3822, 3822, 3822, 3822, 3822, 3822, 3822,
+     3822, 3822, 3822, 3822, 3822, 3822, 3817, 2228, 2515, 5143,
+     2869, 2853, 2870, 5143, 5143, 5143, 5143, 5143, 2871, 2871,
+     2871, 2871, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2871,
+     2871, 2871, 2871, 2871, 5143, 2871, 5143, 5143, 5143, 5143,
+     5143, 5143, 2871, 1458, 2855, 2573, 2855, 2855, 1458, 1458,
+
+     2872, 1458, 2855, 1458, 1458, 2852, 2873, 2855, 2874, 2875,
+     2876, 2855, 1458, 1458, 2855, 1458, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2855, 1458, 2855, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 1458, 1458, 2228, 3617, 3568, 3617, 3617, 2228, 2228,
+     4066, 2228, 3811, 2228, 2228, 3577, 3812, 3811, 4076, 3814,
+     4309, 3253, 2228, 2228, 3811, 2228, 4310, 4310, 4310, 4310,
+     4066, 4066, 4066, 4066, 3811, 2228, 3811, 4310, 4310, 4310,
+     4310, 4310, 4066, 4310, 4066, 4066, 4066, 4066, 4066, 4066,
+     4310, 2228, 2228, 3810, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 3813, 5143, 3815, 5143, 5143, 5143, 5143, 5143, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 5143, 5143, 5143,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810,  255, 1478, 1478, 1478, 1478,  255,
+      469,  628,  255,  629,  255,  468, 1590,  630,  629,  631,
+     1721,  633, 1592,  255,  255,  629,  255, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722,  629,  255,  629, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722,  469,  255, 3813, 5143, 4067, 5143, 5143, 5143,
+     5143, 5143, 4066, 4066, 4066, 4066, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 4066, 4066, 4066, 4066, 4066, 5143, 4066,
+     5143, 5143, 5143, 5143, 5143, 5143, 4066, 2937, 4311, 4312,
+     4311, 4311, 2937, 2937, 4313, 2937, 4314, 2937, 2937, 4126,
+     4315, 4314, 4316, 4512, 4317, 4123, 2937, 2937, 4314, 2937,
+     4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4314, 2937,
+     4314, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313,
+     4313, 4313, 4313, 4313, 4313, 2937, 2937, 4076, 5143, 4077,
+     5143, 5143, 5143, 5143, 5143, 4078, 4078, 4078, 4078, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 4078, 4078, 4078, 4078,
+     4078, 5143, 4078, 5143, 5143, 5143, 5143, 5143, 5143, 4078,
+
+     1504, 2627, 3001, 2627, 2627, 1504, 1504, 3002, 1504, 2627,
+     1504, 1504, 2622, 3003, 2627, 3004, 3005, 3006, 2627, 1504,
+     1504, 2627, 1504, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 2627, 1504, 2627, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 1504, 1504,
+      599, 1039, 1039, 1039, 1039,  599, 1038,  599,  599,  599,
+      599, 1039, 1039,  600,  599,  599, 1046,  599, 1038,  599,
+      599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038,  599,  599,  599, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  599,
+
+     1461, 2238,  854, 2238, 2238, 1461, 1461, 2534, 1461, 2535,
+     1461, 1461, 2590, 3827, 2535, 2539, 4513, 2541, 2592, 1461,
+     1461, 2535, 1461, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2535, 1461, 2535, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 1461, 1461,
+     1461, 2238,  854, 2238, 2238, 1461, 1461, 2879, 1461, 2535,
+     1461, 1461, 2590, 2538, 2535, 2539, 2591, 2880, 2592, 1461,
+     1461, 2535, 1461, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2535, 1461, 2535, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 1461, 1461,
+
+     1461, 2536, 2881, 2536, 2536, 1461, 2533, 1461, 1461, 1461,
+     1461, 2536, 2536, 1462, 1461, 1461, 2882, 1461, 2533, 1461,
+     1461, 1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533, 2533,
+     2533, 1461, 1461, 1461, 2533, 2533, 2533, 2533, 2533, 2533,
+     2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 1461,
+     1937, 3208, 1922, 3208, 3208, 1937, 1937, 3209, 1937, 3210,
+     1937, 1937, 3211, 3212, 3210, 3213, 4514, 3214, 3215, 1937,
+     1937, 3210, 1937, 3209, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3210, 1937, 3210, 3209, 3209, 3209, 3209, 3209, 3209,
+     3209, 3209, 3209, 3209, 3209, 3209, 3209, 3209, 1937, 1937,
+
+      641, 3557, 3832, 3557, 3557,  641, 1598, 1996,  641, 1997,
+      641, 1596, 3833, 3021, 1997, 1999, 4515, 2001, 3835,  641,
+      641, 1997,  641, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 1997,  641, 1997, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 1598,  641,
+     2538, 5143, 2894, 2591, 2895, 5143, 5143, 5143, 5143, 5143,
+     2896, 2896, 2896, 2896, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2896, 2896, 2896, 2896, 2896, 5143, 2896, 5143, 5143,
+     5143, 5143, 5143, 5143, 2896, 1461, 2592, 2897, 2592, 2592,
+     1461, 1461, 2898, 1461, 2592, 1461, 1461, 2590, 2899, 2592,
+
+     2900, 2901, 2902, 2592, 1461, 1461, 2592, 1461, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2592, 1461, 2592, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 1461, 1461, 3558, 4342, 4516, 4342, 4342,
+     3558, 4517, 4518, 3558, 4519, 3558, 4520, 4521, 4522, 4519,
+     4523, 4524, 4525, 4526, 3558, 3558, 4519, 3558, 4527, 4527,
+     4527, 4527, 4527, 4527, 4527, 4527, 4519, 3558, 4519, 4527,
+     4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527,
+     4527, 4527, 4527, 4517, 3558, 1234, 2297, 2563, 2297, 2297,
+     1234, 1234, 2564, 1234, 2297, 1234, 1234, 2295, 4528, 2297,
+
+     2566, 4529, 2568, 2297, 1234, 1234, 2297, 1234, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2297, 1234, 2297, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 1234, 1234,  784, 3660, 3660, 3660, 3660,
+      784, 1359, 2263,  784, 2264,  784, 1360, 1361, 2265, 2264,
+     2266, 3928, 2268, 1363,  784,  784, 2264,  784, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 2264,  784, 2264, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 1359,  784, 2228, 3253, 3575, 3253, 3253,
+     2228, 2228, 3576, 2228, 3253, 2228, 2228, 3577, 4533, 3253,
+
+     3579, 4534, 3581, 3253, 2228, 2228, 3253, 2228, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3253, 2228, 3253, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 2228, 2228,  599,  862,  862,  862,  862,
+      599,  599, 1061,  599,  862,  599,  599,  857, 1062,  862,
+     1063, 1064, 1065,  862,  599,  599,  862,  599, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061,  862,  599,  862, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061,  599,  599, 1479, 2362, 2563, 2362, 2362,
+     1479, 1479, 2575, 1479, 2576, 1479, 1479, 2701, 3876, 2576,
+
+     2580, 4535, 2582, 2703, 1479, 1479, 2576, 1479, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2576, 1479, 2576, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 1479, 1479,  599,  712,  712,  712,  712,
+      599,  599,  855,  599,  856,  599,  599,  857,  858,  856,
+      859,  860,  861,  862,  599,  599,  856,  599,  855,  855,
+      855,  855,  855,  855,  855,  855,  856,  599,  856,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  599,  599, 1479, 2362, 2563, 2362, 2362,
+     1479, 1479, 2939, 1479, 2576, 1479, 1479, 2701, 2579, 2576,
+
+     2580, 2702, 2940, 2703, 1479, 1479, 2576, 1479, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2576, 1479, 2576, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 2939, 1479, 1479, 1479, 2577, 2897, 2577, 2577,
+     1479, 2574, 1479, 1479, 1479, 1479, 2577, 2577, 1480, 1479,
+     1479, 2941, 1479, 2574, 1479, 1479, 1479, 1479, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 1479, 1479, 1479, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 1479, 1960, 3258, 3236, 3258, 3258,
+     1960, 1960, 3259, 1960, 3260, 1960, 1960, 3261, 3262, 3260,
+
+     3263, 4536, 3264, 3265, 1960, 1960, 3260, 1960, 3259, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3260, 1960, 3260, 3259,
+     3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259,
+     3259, 3259, 3259, 1960, 1960,  550, 3594, 3575, 3594, 3594,
+      550, 1390, 2076,  550, 2077,  550, 1389, 3728, 3065, 2077,
+     2079, 4537, 2081, 3730,  550,  550, 2077,  550, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 2077,  550, 2077, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 1390,  550, 2579, 5143, 2951, 2702, 2952,
+     5143, 5143, 5143, 5143, 5143, 2953, 2953, 2953, 2953, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 2953, 2953, 2953, 2953,
+     2953, 5143, 2953, 5143, 5143, 5143, 5143, 5143, 5143, 2953,
+     1479, 2703, 2954, 2703, 2703, 1479, 1479, 2955, 1479, 2703,
+     1479, 1479, 2701, 2956, 2703, 2957, 2958, 2959, 2703, 1479,
+     1479, 2703, 1479, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2703, 1479, 2703, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 1479, 1479,
+     1504, 2262, 2619, 2262, 2262, 1504, 1504, 2620, 1504, 2621,
+     1504, 1504, 2622, 2623, 2621, 2624, 2625, 2626, 2627, 1504,
+     1504, 2621, 1504, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+
+     2620, 2621, 1504, 2621, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 1504, 1504,
+      213, 1082, 1082, 1082, 1082,  213,  382,  337,  213,  338,
+      213,  381, 1256,  340,  338,  341, 1257,  343, 1258,  213,
+      213,  338,  213, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259,  338,  213,  338, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  382,  213,
+     2982, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     2983, 5143, 5143, 5143, 5143, 5143, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 5143, 5143, 5143, 2982, 2982, 2982,
+
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 1504, 2984, 2985, 2984, 2984, 1504, 2986, 1504, 1504,
+     1504, 1504, 2984, 2984, 1505, 1504, 1504, 2987, 1504, 2986,
+     1504, 1504, 1504, 1504, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 1504, 1504, 1504, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     1504, 1987, 3295, 3296, 3295, 3295, 1987, 1987, 3297, 1987,
+     3298, 1987, 1987, 3299, 3300, 3298, 3301, 4538, 3302, 3303,
+     1987, 1987, 3298, 1987, 3297, 3297, 3297, 3297, 3297, 3297,
+     3297, 3297, 3298, 1987, 3298, 3297, 3297, 3297, 3297, 3297,
+
+     3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 3297, 1987,
+     1987, 2228, 3617, 3568, 3617, 3617, 2228, 2228, 3810, 2228,
+     3811, 2228, 2228, 3577, 4510, 3811, 3813, 4539, 3815, 3253,
+     2228, 2228, 3811, 2228, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3811, 2228, 3811, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 2228,
+     2228, 2998, 5143, 2999, 5143, 5143, 5143, 5143, 5143, 3000,
+     3000, 3000, 3000, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     3000, 3000, 3000, 3000, 3000, 5143, 3000, 5143, 5143, 5143,
+     5143, 5143, 5143, 3000, 1504, 2627, 3001, 2627, 2627, 1504,
+
+     1504, 3002, 1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004,
+     3005, 3006, 2627, 1504, 1504, 2627, 1504, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 2627, 1504, 2627, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 1504, 1504,  599, 2897, 2897, 2897, 2897,  599,
+     1038, 1061,  599,  862,  599, 1039, 1040, 4540,  862, 1063,
+     4541, 1065, 1042,  599,  599,  862,  599, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218,  862,  599,  862, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 1038,  599,  786, 3052, 3052, 3052, 3052,  786,
+
+      786, 4542,  786, 4543,  786,  786, 2414, 4544, 4543, 4545,
+     4546, 4547, 2111,  786,  786, 4543,  786, 4542, 4542, 4542,
+     4542, 4542, 4542, 4542, 4542, 4543,  786, 4543, 4542, 4542,
+     4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542,
+     4542, 4542,  786,  786, 1093, 4389, 4098, 4389, 4389, 1093,
+     1925, 2192, 1093, 1991, 1093, 1928, 1929, 1991, 1991, 2193,
+     4557, 2195, 1933, 1093, 1093, 1991, 1093, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 1991, 1093, 1991, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 1925, 1093, 3558, 4392, 2573, 4392, 4392, 3558,
+
+     3558, 4518, 3558, 4519, 3558, 3558, 4561, 4522, 4519, 4523,
+     4562, 4525, 4563, 3558, 3558, 4519, 3558, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4519, 3558, 4519, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 3558, 3558, 1970, 3909, 3871, 3909, 3909, 1970,
+     1970, 4393, 1970, 4171, 1970, 1970, 4172, 4173, 4171, 4174,
+     4175, 4394, 3978, 1970, 1970, 4171, 1970, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4171, 1970, 4171, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 1970, 1970, 4406, 5143, 4564, 5143, 5143, 5143,
+
+     5143, 5143, 4565, 4565, 4565, 4565, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4565, 4565, 4565, 4565, 4565, 5143, 4565,
+     5143, 5143, 5143, 5143, 5143, 5143, 4565, 4170, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4176, 5143, 5143,
+     5143, 5143, 5143, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 5143, 5143, 5143, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 1970, 2963,
+     3282, 2963, 2963, 1970, 3283, 1970, 1970, 1970, 1970, 2963,
+     2963, 1971, 1970, 1970, 3284, 1970, 3283, 1970, 1970, 1970,
+     1970, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 1970,
+
+     1970, 1970, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 3283, 3283, 3283, 1970, 2586, 4566,
+     4499, 4566, 4566, 2586, 2586, 4567, 2586, 4568, 2586, 2586,
+     4569, 4570, 4568, 4571, 4175, 4572, 4573, 2586, 2586, 4568,
+     2586, 4567, 4567, 4567, 4567, 4567, 4567, 4567, 4567, 4568,
+     2586, 4568, 4567, 4567, 4567, 4567, 4567, 4567, 4567, 4567,
+     4567, 4567, 4567, 4567, 4567, 4567, 2586, 2586, 1291, 2237,
+     2410, 2237, 2237, 1291, 2397, 1291, 1291, 1291, 1291, 2237,
+     2237, 2002, 1291, 1291, 4574, 1291, 2397, 1291, 1291, 1291,
+     1291, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 1291,
+
+     1291, 1291, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397,
+     2397, 2397, 2397, 2397, 2397, 2397, 2397, 1291, 4406, 5143,
+     4407, 5143, 5143, 5143, 5143, 5143, 4408, 4408, 4408, 4408,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4408, 4408, 4408,
+     4408, 4408, 5143, 4408, 5143, 5143, 5143, 5143, 5143, 5143,
+     4408, 1970, 3978, 3968, 3978, 3978, 1970, 1970, 4208, 1970,
+     3978, 1970, 1970, 4172, 4210, 3978, 4211, 4234, 4213, 3978,
+     1970, 1970, 3978, 1970, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 3978, 1970, 3978, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 1970,
+
+     1970, 3920, 4578, 4579, 4578, 4578, 3920, 3920, 4580, 3920,
+     4581, 3920, 3920, 4582, 4583, 4581, 4584, 4585, 4586, 4587,
+     3920, 3920, 4581, 3920, 4580, 4580, 4580, 4580, 4580, 4580,
+     4580, 4580, 4581, 3920, 4581, 4580, 4580, 4580, 4580, 4580,
+     4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580, 3920,
+     3920, 1841, 3922, 3575, 3922, 3922, 1841, 1841, 4411, 1841,
+     4181, 1841, 1841, 3114, 4182, 4181, 4183, 4184, 4412, 2767,
+     1841, 1841, 4181, 1841, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4181, 1841, 4181, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 1841,
+
+     1841, 4420, 5143, 4588, 5143, 5143, 5143, 5143, 5143, 4589,
+     4589, 4589, 4589, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4589, 4589, 4589, 4589, 4589, 5143, 4589, 5143, 5143, 5143,
+     5143, 5143, 5143, 4589, 4180, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4185, 5143, 5143, 5143, 5143, 5143,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 5143, 5143,
+     5143, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 2427, 4590, 4124, 4590, 4590,
+     2427, 2427, 4591, 2427, 4592, 2427, 2427, 3723, 4593, 4592,
+     4594, 4184, 4595, 3720, 2427, 2427, 4592, 2427, 4591, 4591,
+
+     4591, 4591, 4591, 4591, 4591, 4591, 4592, 2427, 4592, 4591,
+     4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591,
+     4591, 4591, 4591, 2427, 2427, 1291, 2109, 2096, 2109, 2109,
+     1291, 1291, 2398, 1291, 2109, 1291, 1291, 2290, 4596, 2109,
+     2400, 4597, 2402, 2109, 1291, 1291, 2109, 1291, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2109, 1291, 2109, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 2398, 1291, 1291, 4420, 5143, 4421, 5143, 5143,
+     5143, 5143, 5143, 4422, 4422, 4422, 4422, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4422, 4422, 4422, 4422, 4422, 5143,
+
+     4422, 5143, 5143, 5143, 5143, 5143, 5143, 4422,  876, 1773,
+     2025, 1773, 1773,  876,  876, 2313,  876, 1773,  876,  876,
+     1768, 2027, 1773, 2028, 2029, 2314, 1773,  876,  876, 1773,
+      876, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 1773,
+      876, 1773, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313, 2313, 2313,  876,  876, 3018, 3659,
+     3923, 3659, 3659, 3018, 3661, 3664, 3018, 3373, 3018, 3372,
+     3924, 4600, 3373, 3667, 4601, 3669, 3926, 3018, 3018, 3373,
+     3018, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3373,
+     3018, 3373, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927,
+
+     3927, 3927, 3927, 3927, 3927, 3927, 3661, 3018,  946, 1547,
+     1792, 1547, 1547,  946,  946, 2053,  946, 1547,  946,  946,
+     1780, 1794, 1547, 1795, 1796, 2054, 1547,  946,  946, 1547,
+      946, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 1547,
+      946, 1547, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+     2053, 2053, 2053, 2053, 2053, 2053,  946,  946, 4432, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4433, 5143,
+     5143, 5143, 5143, 5143, 4432, 4432, 4432, 4432, 4432, 4432,
+     4432, 4432, 5143, 5143, 5143, 4432, 4432, 4432, 4432, 4432,
+     4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4442,
+
+     5143, 4607, 5143, 5143, 5143, 5143, 5143, 4608, 4608, 4608,
+     4608, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4608, 4608,
+     4608, 4608, 4608, 5143, 4608, 5143, 5143, 5143, 5143, 5143,
+     5143, 4608,  248, 1817, 1817, 1817, 1817,  248,  377,  729,
+      248,  610,  248,  336, 1701,  730,  610,  731, 2086,  733,
+     1703,  248,  248,  610,  248, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087,  610,  248,  610, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+      377,  248, 2586, 4573, 4609, 4573, 4573, 2586, 2586, 4610,
+     2586, 4573, 2586, 2586, 4569, 4611, 4573, 4612, 4234, 4613,
+
+     4573, 2586, 2586, 4573, 2586, 4610, 4610, 4610, 4610, 4610,
+     4610, 4610, 4610, 4573, 2586, 4573, 4610, 4610, 4610, 4610,
+     4610, 4610, 4610, 4610, 4610, 4610, 4610, 4610, 4610, 4610,
+     2586, 2586, 4442, 5143, 4443, 5143, 5143, 5143, 5143, 5143,
+     4444, 4444, 4444, 4444, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4444, 4444, 4444, 4444, 4444, 5143, 4444, 5143, 5143,
+     5143, 5143, 5143, 5143, 4444, 1815, 3071, 2753, 3071, 3071,
+     1815, 1815, 3070, 1815, 3071, 1815, 1815, 3395, 3074, 3071,
+     3075, 3396, 3077, 3071, 1815, 1815, 3071, 1815, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3071, 1815, 3071, 3070,
+
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 1815, 1815,  784, 1147, 1147, 1147, 1147,
+      784, 1359, 1148,  784,  961,  784, 1360, 1361, 1150,  961,
+     1151, 1362, 1153, 1363,  784,  784,  961,  784, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364,  961,  784,  961, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1359,  784, 3394, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3397, 5143, 5143, 5143, 5143,
+     5143, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 5143,
+     5143, 5143, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+
+     3394, 3394, 3394, 3394, 3394, 3394, 1815, 3072, 3082, 3072,
+     3072, 1815, 3069, 1815, 1815, 1815, 1815, 3072, 3072, 1816,
+     1815, 1815, 3398, 1815, 3069, 1815, 1815, 1815, 1815, 3069,
+     3069, 3069, 3069, 3069, 3069, 3069, 3069, 1815, 1815, 1815,
+     3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069, 3069,
+     3069, 3069, 3069, 3069, 3069, 1815, 2393, 3693, 3694, 3693,
+     3693, 2393, 2393, 3695, 2393, 3693, 2393, 2393, 3696, 3697,
+     3693, 3698, 4618, 3699, 3693, 2393, 2393, 3693, 2393, 3695,
+     3695, 3695, 3695, 3695, 3695, 3695, 3695, 3693, 2393, 3693,
+     3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695, 3695,
+
+     3695, 3695, 3695, 3695, 2393, 2393, 1841, 3960, 4202, 3960,
+     3960, 1841, 3449, 3113, 1841, 2767, 1841, 3447, 4203, 4235,
+     2767, 3116, 4619, 3118, 4205, 1841, 1841, 2767, 1841, 4206,
+     4206, 4206, 4206, 4206, 4206, 4206, 4206, 2767, 1841, 2767,
+     4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206,
+     4206, 4206, 4206, 4206, 3449, 1841, 3409, 5143, 3410, 5143,
+     5143, 5143, 5143, 5143, 3411, 3411, 3411, 3411, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3411, 3411, 3411, 3411, 3411,
+     5143, 3411, 5143, 5143, 5143, 5143, 5143, 5143, 3411, 1818,
+     2764, 1147, 2764, 2764, 1818, 1818, 3084, 1818, 2764, 1818,
+
+     1818, 3110, 3087, 2764, 3088, 3111, 3090, 2764, 1818, 1818,
+     2764, 1818, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     2764, 1818, 2764, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 1818, 1818, 3412,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3413,
+     5143, 5143, 5143, 5143, 5143, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 5143, 5143, 5143, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     1818, 3085, 3414, 3085, 3085, 1818, 3083, 1818, 1818, 1818,
+     1818, 3085, 3085, 1819, 1818, 1818, 3415, 1818, 3083, 1818,
+
+     1818, 1818, 1818, 3083, 3083, 3083, 3083, 3083, 3083, 3083,
+     3083, 1818, 1818, 1818, 3083, 3083, 3083, 3083, 3083, 3083,
+     3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 3083, 1818,
+     2407, 3706, 2394, 3706, 3706, 2407, 2407, 3707, 2407, 3706,
+     2407, 2407, 3708, 3709, 3706, 3710, 4623, 3711, 3706, 2407,
+     2407, 3706, 2407, 3707, 3707, 3707, 3707, 3707, 3707, 3707,
+     3707, 3706, 2407, 3706, 3707, 3707, 3707, 3707, 3707, 3707,
+     3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 2407, 2407,
+      641, 3715, 3448, 3715, 3715,  641, 1598, 1381,  641, 1154,
+      641, 1596, 3833, 2425, 1154, 1384, 4624, 1386, 3835,  641,
+
+      641, 1154,  641, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 1154,  641, 1154, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 1598,  641,
+     3425, 5143, 3426, 5143, 5143, 5143, 5143, 5143, 3427, 3427,
+     3427, 3427, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3427,
+     3427, 3427, 3427, 3427, 5143, 3427, 5143, 5143, 5143, 5143,
+     5143, 5143, 3427,  784,  961,  961,  961,  961,  784,  784,
+     1148,  784,  961,  784,  784, 1149, 1150,  961, 1151, 1152,
+     1153,  961,  784,  784,  961,  784, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148,  961,  784,  961, 1148, 1148, 1148,
+
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148,  784,  784, 1588, 2430, 2768, 2430, 2430, 1588, 1588,
+     2755, 1588, 2430, 1588, 1588, 2769, 3971, 2430, 2759, 4625,
+     2761, 2430, 1588, 1588, 2430, 1588, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2430, 1588, 2430, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 1588, 1588,  784, 1360, 1360, 1360, 1360,  784, 1359,
+      784,  784,  784,  784, 1360, 1360,  785,  784,  784, 1367,
+      784, 1359,  784,  784,  784,  784, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359,  784,  784,  784, 1359, 1359, 1359,
+
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359,  784, 1196, 1673, 1673, 1673, 1673, 1196, 1196,
+     1890, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1892,
+     1196, 1891, 1196, 1196, 1196, 1196, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1196, 1196, 1196, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1893, 1196, 3492, 4477, 4630, 4477, 4477, 3492, 3492,
+     4631, 3492, 3492, 3492, 4252, 4252, 3493, 3492, 3492, 4632,
+     3492, 4252, 3492, 3492, 3492, 3492, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 3492, 3492, 3492, 4631, 4631, 4631,
+
+     4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4481, 3492,  424, 2486, 2486, 2486, 2486,  424,  424,
+     2817,  424,  424,  424,  680,  680,  425,  424,  424, 2818,
+      424,  680,  424,  424,  424,  424, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817,  424,  424,  424, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817,  832,  424, 3492, 4252, 4478, 4252, 4252, 3492, 3492,
+     4633, 3492, 3492, 3492, 4252, 4252, 3493, 3492, 3492, 4480,
+     4634, 4252, 3492, 3492, 3492, 3492, 4633, 4633, 4633, 4633,
+     4633, 4633, 4633, 4633, 3492, 3492, 3492, 4633, 4633, 4633,
+
+     4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
+     4633, 4481, 3492, 1194, 4482, 4478, 4482, 4482, 1194, 1194,
+     4637, 1194, 1194, 1194, 1883, 1883, 1195, 1194, 1194, 4638,
+     1194, 1883, 1194, 1194, 1194, 1194, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 1194, 1194, 1194, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637,
+     4637, 2155, 1194, 1680, 2493, 2486, 2493, 2493, 1680, 1680,
+     3515, 1680, 1680, 1680, 2493, 2493, 1681, 1680, 1680, 2830,
+     3516, 2493, 1680, 1680, 1680, 1680, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 1680, 1680, 1680, 3515, 3515, 3515,
+
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 2831, 1680, 1017, 2170, 2171, 2170, 2170, 1017, 1017,
+     2497, 1017, 1017, 1017, 2170, 2170, 1018, 1017, 1017, 2173,
+     2498, 2170, 1017, 1017, 1017, 1017, 2497, 2497, 2497, 2497,
+     2497, 2497, 2497, 2497, 1017, 1017, 1017, 2497, 2497, 2497,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+     2497, 2175, 1017, 2501, 4021, 4022, 4021, 4021, 2501, 2501,
+     4488, 2501, 2501, 2501, 4021, 4021, 2502, 2501, 2501, 4024,
+     4489, 4021, 2501, 2501, 2501, 2501, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 2501, 2501, 2501, 4488, 4488, 4488,
+
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+     4488, 4026, 2501, 3492, 4493, 4483, 4493, 4493, 3492, 3492,
+     4646, 3492, 3492, 3492, 3492, 3492, 3493, 3492, 3492, 4647,
+     3492, 3492, 3492, 3492, 3492, 3492, 4646, 4646, 4646, 4646,
+     4646, 4646, 4646, 4646, 3492, 3492, 3492, 4646, 4646, 4646,
+     4646, 4646, 4646, 4646, 4646, 4646, 4646, 4646, 4646, 4646,
+     4646, 3492, 3492, 1726, 2585, 2960, 2585, 2585, 1726, 2961,
+     1726, 1726, 1726, 1726, 2585, 2585, 4151, 1726, 1726, 4651,
+     1726, 2961, 1726, 1726, 1726, 1726, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 1726, 1726, 1726, 2961, 2961, 2961,
+
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 1726, 1726, 3885, 3871, 3885, 3885, 1726, 1726,
+     4284, 1726, 3885, 1726, 1726, 3883, 4050, 3885, 4294, 4052,
+     4497, 3885, 1726, 1726, 3885, 1726, 4498, 4498, 4498, 4498,
+     4284, 4284, 4284, 4284, 3885, 1726, 3885, 4498, 4498, 4498,
+     4498, 4498, 4284, 4498, 4284, 4284, 4284, 4284, 4284, 4284,
+     4498, 1726, 1726,  248, 1460, 1460, 1460, 1460,  248,  377,
+      603,  248,  604,  248,  336, 1701,  606,  604,  607, 1702,
+      609, 1703,  248,  248,  604,  248, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704,  604,  248,  604, 1704, 1704, 1704,
+
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704,  377,  248, 4051, 5143, 4285, 5143, 5143, 5143, 5143,
+     5143, 4284, 4284, 4284, 4284, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 4284, 4284, 4284, 4284, 4284, 5143, 4284, 5143,
+     5143, 5143, 5143, 5143, 5143, 4284, 2231, 4279, 4499, 4279,
+     4279, 2231, 2231, 4500, 2231, 4279, 2231, 2231, 4275, 4501,
+     4279, 4502, 4652, 4503, 4279, 2231, 2231, 4279, 2231, 4500,
+     4500, 4500, 4500, 4500, 4500, 4500, 4500, 4279, 2231, 4279,
+     4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500, 4500,
+     4500, 4500, 4500, 4500, 2231, 2231, 4049, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 4053, 5143, 5143, 5143,
+     5143, 5143, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     5143, 5143, 5143, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 4049, 4294, 5143, 4295,
+     5143, 5143, 5143, 5143, 5143, 4296, 4296, 4296, 4296, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 4296, 4296, 4296, 4296,
+     4296, 5143, 4296, 5143, 5143, 5143, 5143, 5143, 5143, 4296,
+      784, 3660, 3660, 3660, 3660,  784, 1359, 2263,  784, 2264,
+      784, 1360, 1361, 2265, 2264, 2266, 3928, 2268, 1363,  784,
+      784, 2264,  784, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+
+     3929, 2264,  784, 2264, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 1359,  784,
+     1458, 2855, 2573, 2855, 2855, 1458, 1458, 2872, 1458, 2855,
+     1458, 1458, 2852, 4656, 2855, 2874, 4657, 2876, 2855, 1458,
+     1458, 2855, 1458, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2855, 1458, 2855, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 1458, 1458,
+     3622, 4658, 4659, 4658, 4658, 3622, 3622, 4660, 3622, 4661,
+     3622, 3622, 4662, 4663, 4661, 4664, 4538, 4665, 4666, 3622,
+     3622, 4661, 3622, 4660, 4660, 4660, 4660, 4660, 4660, 4660,
+
+     4660, 4661, 3622, 4661, 4660, 4660, 4660, 4660, 4660, 4660,
+     4660, 4660, 4660, 4660, 4660, 4660, 4660, 4660, 3622, 3622,
+     2228, 3253, 3575, 3253, 3253, 2228, 2228, 3576, 2228, 3253,
+     2228, 2228, 3577, 4667, 3253, 3579, 4668, 3581, 3253, 2228,
+     2228, 3253, 2228, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3253, 2228, 3253, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 2228, 2228,
+     1461, 2592, 2897, 2592, 2592, 1461, 1461, 2898, 1461, 2592,
+     1461, 1461, 2590, 4669, 2592, 2900, 4670, 2902, 2592, 1461,
+     1461, 2592, 1461, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+
+     2898, 2592, 1461, 2592, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 1461, 1461,
+      599,  854,  854,  854,  854,  599, 1038,  855,  599,  856,
+      599, 1039, 1040,  858,  856,  859, 1041,  861, 1042,  599,
+      599,  856,  599, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043,  856,  599,  856, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1038,  599,
+     3558, 4392, 2573, 4392, 4392, 3558, 3558, 4671, 3558, 4519,
+     3558, 3558, 4561, 4522, 4519, 4523, 4562, 4672, 4563, 3558,
+     3558, 4519, 3558, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+
+     4671, 4519, 3558, 4519, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 3558, 3558,
+     4518, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4525, 5143, 5143, 5143, 5143, 5143, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 5143, 5143, 5143, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 3558, 4520, 4673, 4520, 4520, 3558, 4517, 3558, 3558,
+     3558, 3558, 4520, 4520, 3559, 3558, 3558, 4674, 3558, 4517,
+     3558, 3558, 3558, 3558, 4517, 4517, 4517, 4517, 4517, 4517,
+     4517, 4517, 3558, 3558, 3558, 4517, 4517, 4517, 4517, 4517,
+
+     4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517,
+     3558, 3837, 4675, 3193, 4675, 4675, 3837, 3837, 4676, 3837,
+     4677, 3837, 3837, 4678, 4679, 4677, 4680, 4681, 4682, 4683,
+     3837, 3837, 4677, 3837, 4676, 4676, 4676, 4676, 4676, 4676,
+     4676, 4676, 4677, 3837, 4677, 4676, 4676, 4676, 4676, 4676,
+     4676, 4676, 4676, 4676, 4676, 4676, 4676, 4676, 4676, 3837,
+     3837, 4684, 5143, 4685, 5143, 5143, 5143, 5143, 5143, 4686,
+     4686, 4686, 4686, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4686, 4686, 4686, 4686, 4686, 5143, 4686, 5143, 5143, 5143,
+     5143, 5143, 5143, 4686, 3558, 4563, 4687, 4563, 4563, 3558,
+
+     3558, 4688, 3558, 4563, 3558, 3558, 4561, 4689, 4563, 4690,
+     4691, 4692, 4563, 3558, 3558, 4563, 3558, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 4563, 3558, 4563, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4688, 3558, 3558, 1762, 3851, 4135, 3851, 3851, 1762,
+     1762, 4693, 1762, 3851, 1762, 1762, 3846, 4694, 3851, 4695,
+     4696, 4697, 3851, 1762, 1762, 3851, 1762, 4693, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 3851, 1762, 3851, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4693, 1762, 1762, 2937, 4123, 4124, 4123, 4123, 2937,
+
+     2937, 4125, 2937, 4123, 2937, 2937, 4126, 4127, 4123, 4128,
+     4349, 4129, 4123, 2937, 2937, 4123, 2937, 4125, 4125, 4125,
+     4125, 4125, 4125, 4125, 4125, 4123, 2937, 4123, 4125, 4125,
+     4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125, 4125,
+     4125, 4125, 2937, 2937, 1479, 2703, 2954, 2703, 2703, 1479,
+     1479, 2955, 1479, 2703, 1479, 1479, 2701, 4699, 2703, 2957,
+     4700, 2959, 2703, 1479, 1479, 2703, 1479, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2703, 1479, 2703, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 1479, 1479, 1504, 2627, 3001, 2627, 2627, 1504,
+
+     1504, 3002, 1504, 2627, 1504, 1504, 2622, 4701, 2627, 3004,
+     4702, 3006, 2627, 1504, 1504, 2627, 1504, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 2627, 1504, 2627, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 1504, 1504, 1476, 2223, 2223, 2223, 2223, 1476,
+     1476, 4703, 1476, 2223, 1476, 1476, 2218, 4704, 2223, 4705,
+     4706, 4707, 2223, 1476, 1476, 2223, 1476, 4703, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 2223, 1476, 2223, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703,
+     4703, 4703, 1476, 1476,  784, 1994, 1994, 1994, 1994,  784,
+
+      784, 2628,  784, 2264,  784,  784, 1149, 2265, 2264, 2266,
+     2267, 2629,  961,  784,  784, 2264,  784, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2264,  784, 2264, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628,  784,  784, 2263, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 2268, 5143, 5143, 5143, 5143, 5143,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 5143, 5143,
+     5143, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263,  959, 3009, 3009, 3009, 3009,
+      959,  959, 3010,  959, 3011,  959,  959, 1583, 3012, 3011,
+
+     3013, 4710, 3014, 1581,  959,  959, 3011,  959, 3010, 3010,
+     3010, 3010, 3010, 3010, 3010, 3010, 3011,  959, 3011, 3010,
+     3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010, 3010,
+     3010, 3010, 3010,  959,  959,  255, 1380, 1380, 1380, 1380,
+      255,  469,  403,  255,  345,  255,  468, 1590, 1332,  345,
+      406, 4711,  408, 1592,  255,  255,  345,  255, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593,  345,  255,  345, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593,  469,  255, 2639, 5143, 2640, 5143, 5143,
+     5143, 5143, 5143, 2641, 2641, 2641, 2641, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 2641, 2641, 2641, 2641, 2641, 5143,
+     2641, 5143, 5143, 5143, 5143, 5143, 5143, 2641,  599,  862,
+      862,  862,  862,  599,  599, 1061,  599,  862,  599,  599,
+      857, 1062,  862, 1063, 1064, 1065,  862,  599,  599,  862,
+      599, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,
+      599,  862, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061,  599,  599, 1588, 4553,
+     3663, 4553, 4553, 1588, 1588, 4715, 1588, 4716, 1588, 1588,
+     2769, 4717, 4716, 4718, 4719, 4720, 2430, 1588, 1588, 4716,
+     1588, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4716,
+
+     1588, 4716, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 1588, 1588, 1093, 1991,
+     1962, 1991, 1991, 1093, 1093, 2525, 1093, 1991, 1093, 1093,
+     1989, 1991, 1991, 2193, 2194, 2526, 1991, 1093, 1093, 1991,
+     1093, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 1991,
+     1093, 1991, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 1093, 1093, 1970, 3909,
+     3871, 3909, 3909, 1970, 1970, 4393, 1970, 4171, 1970, 1970,
+     4172, 4173, 4171, 4406, 4175, 4564, 3978, 1970, 1970, 4171,
+     1970, 4565, 4565, 4565, 4565, 4393, 4393, 4393, 4393, 4171,
+
+     1970, 4171, 4565, 4565, 4565, 4565, 4565, 4393, 4565, 4393,
+     4393, 4393, 4393, 4393, 4393, 4565, 1970, 1970, 4170, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 4174, 5143, 4176, 5143,
+     5143, 5143, 5143, 5143, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 5143, 5143, 5143, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4174,
+     5143, 4394, 5143, 5143, 5143, 5143, 5143, 4393, 4393, 4393,
+     4393, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4393, 4393,
+     4393, 4393, 4393, 5143, 4393, 5143, 5143, 5143, 5143, 5143,
+     5143, 4393, 1970, 2963, 3282, 2963, 2963, 1970, 3283, 1970,
+
+     1970, 1970, 1970, 2963, 2963, 1971, 1970, 1970, 3284, 1970,
+     3283, 1970, 1970, 1970, 1970, 3283, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 1970, 1970, 1970, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 1970, 2586, 4566, 4499, 4566, 4566, 2586, 2586, 4567,
+     2586, 4568, 2586, 2586, 4569, 4570, 4568, 4571, 4726, 4572,
+     4573, 2586, 2586, 4568, 2586, 4567, 4567, 4567, 4567, 4567,
+     4567, 4567, 4567, 4568, 2586, 4568, 4567, 4567, 4567, 4567,
+     4567, 4567, 4567, 4567, 4567, 4567, 4567, 4567, 4567, 4567,
+     2586, 2586, 4406, 5143, 4407, 5143, 5143, 5143, 5143, 5143,
+
+     4408, 4408, 4408, 4408, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4408, 4408, 4408, 4408, 4408, 5143, 4408, 5143, 5143,
+     5143, 5143, 5143, 5143, 4408, 1970, 3978, 3968, 3978, 3978,
+     1970, 1970, 4208, 1970, 3978, 1970, 1970, 4172, 4210, 3978,
+     4211, 4234, 4213, 3978, 1970, 1970, 3978, 1970, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 3978, 1970, 3978, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 1970, 1970,  599, 2897, 2897, 2897, 2897,
+      599, 1038, 1061,  599,  862,  599, 1039, 1040, 1062,  862,
+     1063, 3217, 1065, 1042,  599,  599,  862,  599, 3218, 3218,
+
+     3218, 3218, 3218, 3218, 3218, 3218,  862,  599,  862, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 1038,  599, 1760, 2668, 3001, 2668, 2668,
+     1760, 1760, 3024, 1760, 3025, 1760, 1760, 3026, 3027, 3025,
+     3028, 3029, 3030, 3031, 1760, 1760, 3025, 1760, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3025, 1760, 3025, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 1760, 1760,  213, 1082, 1082, 1082, 1082,
+      213,  382,  337,  213,  338,  213,  381, 1256,  340,  338,
+      341, 1257,  343, 1258,  213,  213,  338,  213, 1259, 1259,
+
+     1259, 1259, 1259, 1259, 1259, 1259,  338,  213,  338, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259,  382,  213, 3341, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3342, 5143, 5143, 5143, 5143,
+     5143, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 5143,
+     5143, 5143, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 1760, 3343, 3344, 3343,
+     3343, 1760, 3345, 1760, 1760, 1760, 1760, 3343, 3343, 1761,
+     1760, 1760, 3346, 1760, 3345, 1760, 1760, 1760, 1760, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760, 1760, 1760,
+
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 3345, 3345, 3345, 3345, 1760, 2286, 3636, 3609, 3636,
+     3636, 2286, 2286, 3637, 2286, 3638, 2286, 2286, 3639, 3640,
+     3638, 3641, 4730, 3642, 3643, 2286, 2286, 3638, 2286, 3637,
+     3637, 3637, 3637, 3637, 3637, 3637, 3637, 3638, 2286, 3638,
+     3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637, 3637,
+     3637, 3637, 3637, 3637, 2286, 2286, 1841, 3922, 3575, 3922,
+     3922, 1841, 1841, 4180, 1841, 4181, 1841, 1841, 3114, 4731,
+     4181, 4183, 4732, 4185, 2767, 1841, 1841, 4181, 1841, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4181, 1841, 4181,
+
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 1841, 1841, 3356, 5143, 3357, 5143,
+     5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 3358, 3358, 3358, 3358, 3358,
+     5143, 3358, 5143, 5143, 5143, 5143, 5143, 5143, 3358, 1760,
+     3031, 3359, 3031, 3031, 1760, 1760, 3360, 1760, 3031, 1760,
+     1760, 3026, 3361, 3031, 3362, 3363, 3364, 3031, 1760, 1760,
+     3031, 1760, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3031, 1760, 3031, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 1760, 1760, 1841,
+
+     3922, 3575, 3922, 3922, 1841, 1841, 4411, 1841, 4181, 1841,
+     1841, 3114, 4182, 4181, 4420, 4184, 4588, 2767, 1841, 1841,
+     4181, 1841, 4589, 4589, 4589, 4589, 4411, 4411, 4411, 4411,
+     4181, 1841, 4181, 4589, 4589, 4589, 4589, 4589, 4411, 4589,
+     4411, 4411, 4411, 4411, 4411, 4411, 4589, 1841, 1841, 4183,
+     5143, 4412, 5143, 5143, 5143, 5143, 5143, 4411, 4411, 4411,
+     4411, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4411, 4411,
+     4411, 4411, 4411, 5143, 4411, 5143, 5143, 5143, 5143, 5143,
+     5143, 4411, 2427, 4590, 4124, 4590, 4590, 2427, 2427, 4591,
+     2427, 4592, 2427, 2427, 3723, 4593, 4592, 4594, 4733, 4595,
+
+     3720, 2427, 2427, 4592, 2427, 4591, 4591, 4591, 4591, 4591,
+     4591, 4591, 4591, 4592, 2427, 4592, 4591, 4591, 4591, 4591,
+     4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591,
+     2427, 2427, 4182, 5143, 4420, 4184, 4421, 5143, 5143, 5143,
+     5143, 5143, 4422, 4422, 4422, 4422, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4422, 4422, 4422, 4422, 4422, 5143, 4422,
+     5143, 5143, 5143, 5143, 5143, 5143, 4422, 3051, 4737, 4738,
+     4737, 4737, 3051, 3051, 4739, 3051, 4737, 3051, 3051, 4740,
+     4741, 4737, 4742, 4743, 4744, 4737, 3051, 3051, 4737, 3051,
+     4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739, 4737, 3051,
+
+     4737, 4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739,
+     4739, 4739, 4739, 4739, 4739, 3051, 3051,  784, 1147, 1147,
+     1147, 1147,  784, 1359, 1148,  784,  961,  784, 1360, 1361,
+     1150,  961, 1151, 1362, 1153, 1363,  784,  784,  961,  784,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,  961,  784,
+      961, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1359,  784, 4432, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4442, 5143, 4607, 5143, 5143,
+     5143, 5143, 5143, 4608, 4608, 4608, 4608, 4432, 4432, 4432,
+     4432, 5143, 5143, 5143, 4608, 4608, 4608, 4608, 4608, 4432,
+
+     4608, 4432, 4432, 4432, 4432, 4432, 4432, 4608,  248, 1817,
+     1817, 1817, 1817,  248,  377,  729,  248,  610,  248,  336,
+     1701,  730,  610,  731, 2086,  733, 1703,  248,  248,  610,
+      248, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,  610,
+      248,  610, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087,  377,  248, 4211, 5143,
+     4433, 5143, 5143, 5143, 5143, 5143, 4432, 4432, 4432, 4432,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4432, 4432, 4432,
+     4432, 4432, 5143, 4432, 5143, 5143, 5143, 5143, 5143, 5143,
+     4432, 2586, 4573, 4609, 4573, 4573, 2586, 2586, 4610, 2586,
+
+     4573, 2586, 2586, 4569, 4611, 4573, 4612, 4748, 4613, 4573,
+     2586, 2586, 4573, 2586, 4610, 4610, 4610, 4610, 4610, 4610,
+     4610, 4610, 4573, 2586, 4573, 4610, 4610, 4610, 4610, 4610,
+     4610, 4610, 4610, 4610, 4610, 4610, 4610, 4610, 4610, 2586,
+     2586, 4442, 5143, 4443, 5143, 5143, 5143, 5143, 5143, 4444,
+     4444, 4444, 4444, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4444, 4444, 4444, 4444, 4444, 5143, 4444, 5143, 5143, 5143,
+     5143, 5143, 5143, 4444, 1815, 3071, 2753, 3071, 3071, 1815,
+     1815, 3070, 1815, 3071, 1815, 1815, 3395, 4216, 3071, 3075,
+     4749, 3077, 3071, 1815, 1815, 3071, 1815, 3070, 3070, 3070,
+
+     3070, 3070, 3070, 3070, 3070, 3071, 1815, 3071, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 1815, 1815,  784, 1360, 1360, 1360, 1360,  784,
+     1359,  784,  784,  784,  784, 1360, 1360,  785,  784,  784,
+     1367,  784, 1359,  784,  784,  784,  784, 1359, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359,  784,  784,  784, 1359, 1359,
+     1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+     1359, 1359, 1359,  784, 1818, 2764, 1147, 2764, 2764, 1818,
+     1818, 3084, 1818, 2764, 1818, 1818, 3110, 4220, 2764, 3088,
+     4750, 3090, 2764, 1818, 1818, 2764, 1818, 3084, 3084, 3084,
+
+     3084, 3084, 3084, 3084, 3084, 2764, 1818, 2764, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 1818, 1818, 1420, 4629, 4751, 4629, 4629, 1420,
+     1420, 2470, 1420, 1420, 1420, 1420, 1420, 1421, 1420, 1420,
+     4752, 1420, 1420, 1420, 1420, 1420, 1420, 2470, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 1420, 1420, 1420, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 4753, 1420,  424, 2486, 2486, 2486, 2486,  424,
+      424, 2817,  424,  424,  424,  680,  680,  425,  424,  424,
+     2818,  424,  680,  424,  424,  424,  424, 2817, 2817, 2817,
+
+     2817, 2817, 2817, 2817, 2817,  424,  424,  424, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817,  832,  424, 3492, 4252, 4478, 4252, 4252, 3492,
+     3492, 4754, 3492, 3492, 3492, 4252, 4252, 3493, 3492, 3492,
+     4480, 4755, 4252, 3492, 3492, 3492, 3492, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 3492, 3492, 3492, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4481, 3492, 4633, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4634, 5143, 5143, 5143, 5143, 5143,
+     4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 5143, 5143,
+
+     5143, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
+     4633, 4633, 4633, 4633, 4633, 1194, 1883, 2152, 1883, 1883,
+     1194, 1194, 3777, 1194, 1194, 1194, 1883, 1883, 1195, 1194,
+     1194, 2154, 3778, 1883, 1194, 1194, 1194, 1194, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 1194, 1194, 1194, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 2155, 1194, 1196, 1673, 1673, 1673, 1673,
+     1196, 1196, 1890, 1196, 1196, 1196, 1891, 1891, 1197, 1196,
+     1196, 1892, 1196, 1891, 1196, 1196, 1196, 1196, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1196, 1196, 1196, 1890,
+
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1893, 1196, 4767, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4768, 5143, 5143, 5143, 5143,
+     5143, 4767, 4767, 4767, 4767, 4767, 4767, 4767, 4767, 5143,
+     5143, 5143, 4767, 4767, 4767, 4767, 4767, 4767, 4767, 4767,
+     4767, 4767, 4767, 4767, 4767, 4767, 1196, 1435, 1435, 1435,
+     1435, 1196, 1196, 1674, 1196, 1196, 1196, 1196, 1196, 1197,
+     1196, 1196, 1675, 1196, 1196, 1196, 1196, 1196, 1196, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1196, 1196, 1196,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+
+     1674, 1674, 1674, 1674, 1196, 1196, 1726, 2585, 2960, 2585,
+     2585, 1726, 2961, 1726, 1726, 1726, 1726, 2585, 2585, 4292,
+     1726, 1726, 4771, 1726, 2961, 1726, 1726, 1726, 1726, 2961,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 1726, 1726, 1726,
+     2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961,
+     2961, 2961, 2961, 2961, 2961, 1726,  784, 3660, 3660, 3660,
+     3660,  784, 1359, 2263,  784, 2264,  784, 1360, 1361, 2265,
+     2264, 2266, 3928, 2268, 1363,  784,  784, 2264,  784, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 2264,  784, 2264,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+
+     3929, 3929, 3929, 3929, 1359,  784, 3520, 4063, 4773, 4063,
+     4063, 3520, 3520, 4774, 3520, 4063, 3520, 3520, 4058, 4775,
+     4063, 4776, 4777, 4778, 4063, 3520, 3520, 4063, 3520, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4063, 3520, 4063,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774,
+     4774, 4774, 4774, 4774, 3520, 3520, 1504, 2262, 2619, 2262,
+     2262, 1504, 1504, 2620, 1504, 2621, 1504, 1504, 2622, 2623,
+     2621, 2624, 2625, 2626, 2627, 1504, 1504, 2621, 1504, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2621, 1504, 2621,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+
+     2620, 2620, 2620, 2620, 1504, 1504,  213, 1082, 1082, 1082,
+     1082,  213,  382,  337,  213,  338,  213,  381, 1256,  340,
+      338,  341, 1257,  343, 1258,  213,  213,  338,  213, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259,  338,  213,  338,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259,  382,  213, 2982, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 2983, 5143, 5143, 5143,
+     5143, 5143, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     5143, 5143, 5143, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 1504, 2984, 2985,
+
+     2984, 2984, 1504, 2986, 1504, 1504, 1504, 1504, 2984, 2984,
+     1505, 1504, 1504, 2987, 1504, 2986, 1504, 1504, 1504, 1504,
+     2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 1504, 1504,
+     1504, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
+     2986, 2986, 2986, 2986, 2986, 2986, 1504, 3615, 4371, 4372,
+     4371, 4371, 3615, 3615, 4373, 3615, 4374, 3615, 3615, 4375,
+     4376, 4374, 4377, 4378, 4379, 4380, 3615, 3615, 4374, 3615,
+     4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4374, 3615,
+     4374, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373,
+     4373, 4373, 4373, 4373, 4373, 3615, 3615, 2998, 5143, 2999,
+
+     5143, 5143, 5143, 5143, 5143, 3000, 3000, 3000, 3000, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 3000, 3000, 3000, 3000,
+     3000, 5143, 3000, 5143, 5143, 5143, 5143, 5143, 5143, 3000,
+     1504, 2627, 3001, 2627, 2627, 1504, 1504, 3002, 1504, 2627,
+     1504, 1504, 2622, 3003, 2627, 3004, 3005, 3006, 2627, 1504,
+     1504, 2627, 1504, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 2627, 1504, 2627, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 1504, 1504,
+     3622, 4666, 4779, 4666, 4666, 3622, 3622, 4780, 3622, 4666,
+     3622, 3622, 4662, 4781, 4666, 4782, 4783, 4784, 4666, 3622,
+
+     3622, 4666, 3622, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4666, 3622, 4666, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 3622, 3622,
+     1974, 4091, 4168, 4091, 4091, 1974, 1974, 4785, 1974, 4091,
+     1974, 1974, 4086, 4786, 4091, 4787, 4788, 4789, 4091, 1974,
+     1974, 4091, 1974, 4785, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4091, 1974, 4091, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 1974, 1974,
+     3558, 4392, 2573, 4392, 4392, 3558, 3558, 4671, 3558, 4519,
+     3558, 3558, 4561, 4522, 4519, 4523, 4562, 4672, 4563, 3558,
+
+     3558, 4519, 3558, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4519, 3558, 4519, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 3558, 3558,
+     4684, 5143, 4790, 5143, 5143, 5143, 5143, 5143, 4791, 4791,
+     4791, 4791, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4791,
+     4791, 4791, 4791, 4791, 5143, 4791, 5143, 5143, 5143, 5143,
+     5143, 5143, 4791,  599, 2897, 2897, 2897, 2897,  599, 1038,
+     1061,  599,  862,  599, 1039, 1040, 1062,  862, 1063, 3217,
+     1065, 1042,  599,  599,  862,  599, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218,  862,  599,  862, 3218, 3218, 3218,
+
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 1038,  599, 4518, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4525, 5143, 5143, 5143, 5143, 5143, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 5143, 5143, 5143,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 3558, 4520, 4673, 4520, 4520, 3558,
+     4517, 3558, 3558, 3558, 3558, 4520, 4520, 3559, 3558, 3558,
+     4674, 3558, 4517, 3558, 3558, 3558, 3558, 4517, 4517, 4517,
+     4517, 4517, 4517, 4517, 4517, 3558, 3558, 3558, 4517, 4517,
+     4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517,
+
+     4517, 4517, 4517, 3558, 4096, 4794, 3531, 4794, 4794, 4096,
+     4096, 4795, 4096, 4796, 4096, 4096, 4797, 4798, 4796, 4799,
+     4562, 4800, 4801, 4096, 4096, 4796, 4096, 4795, 4795, 4795,
+     4795, 4795, 4795, 4795, 4795, 4796, 4096, 4796, 4795, 4795,
+     4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795,
+     4795, 4795, 4096, 4096, 1291, 3839, 4098, 3839, 3839, 1291,
+     2397, 2288, 1291, 2289, 1291, 2237, 2399, 3644, 2289, 2291,
+     4802, 2293, 2403, 1291, 1291, 2289, 1291, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 2289, 1291, 2289, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+
+     4100, 4100, 2397, 1291, 4684, 5143, 4685, 5143, 5143, 5143,
+     5143, 5143, 4686, 4686, 4686, 4686, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4686, 4686, 4686, 4686, 4686, 5143, 4686,
+     5143, 5143, 5143, 5143, 5143, 5143, 4686, 3558, 4563, 4687,
+     4563, 4563, 3558, 3558, 4688, 3558, 4563, 3558, 3558, 4561,
+     4689, 4563, 4690, 4691, 4692, 4563, 3558, 3558, 4563, 3558,
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4563, 3558,
+     4563, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 3558, 3558, 4803, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4804, 5143, 5143,
+
+     5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 4803, 4803, 4803, 4803, 4803, 4803, 4803, 3837, 4683,
+     4805, 4683, 4683, 3837, 3837, 4806, 3837, 4683, 3837, 3837,
+     4678, 4807, 4683, 4808, 4809, 4810, 4683, 3837, 3837, 4683,
+     3837, 4806, 4806, 4806, 4806, 4806, 4806, 4806, 4806, 4683,
+     3837, 4683, 4806, 4806, 4806, 4806, 4806, 4806, 4806, 4806,
+     4806, 4806, 4806, 4806, 4806, 4806, 3837, 3837, 4813, 5143,
+     4814, 5143, 5143, 5143, 5143, 5143, 4815, 4815, 4815, 4815,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4815, 4815, 4815,
+
+     4815, 4815, 5143, 4815, 5143, 5143, 5143, 5143, 5143, 5143,
+     4815, 1234, 2297, 2563, 2297, 2297, 1234, 1234, 2920, 1234,
+     2297, 1234, 1234, 2295, 2565, 2297, 2566, 2567, 2921, 2297,
+     1234, 1234, 2297, 1234, 2920, 2920, 2920, 2920, 2920, 2920,
+     2920, 2920, 2297, 1234, 2297, 2920, 2920, 2920, 2920, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 1234,
+     1234, 1711, 2918, 3236, 2918, 2918, 1711, 1711, 3237, 1711,
+     2918, 1711, 1711, 2914, 3238, 2918, 3239, 4816, 3240, 2918,
+     1711, 1711, 2918, 1711, 3237, 3237, 3237, 3237, 3237, 3237,
+     3237, 3237, 2918, 1711, 2918, 3237, 3237, 3237, 3237, 3237,
+
+     3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 3237, 1711,
+     1711, 2564, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2568, 5143, 5143, 5143, 5143, 5143, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 5143, 5143, 5143, 2564, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564,  452, 3034, 2619, 3034, 3034,  452, 1106,  904,
+      452,  905,  452, 1105, 3365, 2031,  905,  908, 4817,  910,
+     3367,  452,  452,  905,  452, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368,  905,  452,  905, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+
+     1106,  452, 2930, 5143, 2931, 5143, 5143, 5143, 5143, 5143,
+     2932, 2932, 2932, 2932, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 2932, 2932, 2932, 2932, 2932, 5143, 2932, 5143, 5143,
+     5143, 5143, 5143, 5143, 2932, 4163, 4698, 3923, 4698, 4698,
+     4163, 4163, 4818, 4163, 4698, 4163, 4163, 4819, 4820, 4698,
+     4821, 4822, 4823, 4698, 4163, 4163, 4698, 4163, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4698, 4163, 4698, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4163, 4163, 2064, 4143, 4824, 4143, 4143,
+     2064, 2064, 4825, 2064, 4143, 2064, 2064, 4138, 4826, 4143,
+
+     4827, 4828, 4829, 4143, 2064, 2064, 4143, 2064, 4825, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4143, 2064, 4143, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825,
+     4825, 4825, 4825, 2064, 2064, 1987, 3303, 3609, 3303, 3303,
+     1987, 1987, 3610, 1987, 3303, 1987, 1987, 3299, 3611, 3303,
+     3612, 3888, 3613, 3303, 1987, 1987, 3303, 1987, 3610, 3610,
+     3610, 3610, 3610, 3610, 3610, 3610, 3303, 1987, 3303, 3610,
+     3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
+     3610, 3610, 3610, 1987, 1987,  599,  862,  862,  862,  862,
+      599,  599, 1236,  599,  862,  599,  599,  857, 1062,  862,
+
+     1063, 1064, 1237,  862,  599,  599,  862,  599, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236,  862,  599,  862, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1236,  599,  599,  710, 1232, 1232, 1232, 1232,
+      710,  710, 1471,  710, 1232,  710,  710, 1228, 1472, 1232,
+     1473, 4830, 1474, 1232,  710,  710, 1232,  710, 1471, 1471,
+     1471, 1471, 1471, 1471, 1471, 1471, 1232,  710, 1232, 1471,
+     1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471,
+     1471, 1471, 1471,  710,  710, 1061, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 1065, 5143, 5143, 5143, 5143,
+
+     5143, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 5143,
+     5143, 5143, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061,  255, 1478, 1478, 1478,
+     1478,  255,  469,  628,  255,  629,  255,  468, 1590, 2051,
+      629,  631, 4831,  633, 1592,  255,  255,  629,  255, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722,  629,  255,  629,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722,  469,  255, 1245, 5143, 1246, 5143,
+     5143, 5143, 5143, 5143, 1247, 1247, 1247, 1247, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 1247, 1247, 1247, 1247, 1247,
+
+     5143, 1247, 5143, 5143, 5143, 5143, 5143, 5143, 1247,  784,
+      961,  961,  961,  961,  784,  784, 1148,  784,  961,  784,
+      784, 1149, 3618,  961, 1151, 4835, 1153,  961,  784,  784,
+      961,  784, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+      961,  784,  961, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148,  784,  784,  536,
+     4714, 3359, 4714, 4714,  536, 1339, 1354,  536, 1142,  536,
+     1338, 3677, 1355, 1142, 1356, 4836, 1358, 3679,  536,  536,
+     1142,  536, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     1142,  536, 1142, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 1339,  536, 1588,
+     4553, 3663, 4553, 4553, 1588, 1588, 4838, 1588, 4716, 1588,
+     1588, 2769, 4717, 4716, 4718, 4719, 4839, 2430, 1588, 1588,
+     4716, 1588, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4716, 1588, 4716, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 1588, 1588, 4715,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4720,
+     5143, 5143, 5143, 5143, 5143, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 5143, 5143, 5143, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+
+     1823, 4840, 3935, 4840, 4840, 1823, 1823, 4841, 1823, 4842,
+     1823, 1823, 3102, 4843, 4842, 4844, 4845, 4846, 3099, 1823,
+     1823, 4842, 1823, 4841, 4841, 4841, 4841, 4841, 4841, 4841,
+     4841, 4842, 1823, 4842, 4841, 4841, 4841, 4841, 4841, 4841,
+     4841, 4841, 4841, 4841, 4841, 4841, 4841, 4841, 1823, 1823,
+     4847, 5143, 4848, 5143, 5143, 5143, 5143, 5143, 4849, 4849,
+     4849, 4849, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4849,
+     4849, 4849, 4849, 4849, 5143, 4849, 5143, 5143, 5143, 5143,
+     5143, 5143, 4849, 4163, 4721, 4850, 4721, 4721, 4163, 4851,
+     4818, 4163, 4698, 4163, 4772, 4852, 4820, 4698, 4821, 4853,
+
+     4823, 4854, 4163, 4163, 4698, 4163, 4855, 4855, 4855, 4855,
+     4855, 4855, 4855, 4855, 4698, 4163, 4698, 4855, 4855, 4855,
+     4855, 4855, 4855, 4855, 4855, 4855, 4855, 4855, 4855, 4855,
+     4855, 4851, 4163, 1970, 2963, 3282, 2963, 2963, 1970, 3283,
+     1970, 1970, 1970, 1970, 2963, 2963, 4404, 1970, 1970, 4857,
+     1970, 3283, 1970, 1970, 1970, 1970, 3283, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 1970, 1970, 1970, 3283, 3283, 3283,
+     3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283, 3283,
+     3283, 3283, 1970, 1760, 3031, 3359, 3031, 3031, 1760, 1760,
+     3360, 1760, 3031, 1760, 1760, 3026, 4858, 3031, 3362, 4859,
+
+     3364, 3031, 1760, 1760, 3031, 1760, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3031, 1760, 3031, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 1760, 1760, 4559, 4860, 4779, 4860, 4860, 4559, 4559,
+     4861, 4559, 4862, 4559, 4559, 4863, 4864, 4862, 4865, 4730,
+     4866, 4867, 4559, 4559, 4862, 4559, 4861, 4861, 4861, 4861,
+     4861, 4861, 4861, 4861, 4862, 4559, 4862, 4861, 4861, 4861,
+     4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861,
+     4861, 4559, 4559, 1841, 2767, 3112, 2767, 2767, 1841, 1841,
+     3113, 1841, 2767, 1841, 1841, 3114, 4868, 2767, 3116, 4869,
+
+     3118, 2767, 1841, 1841, 2767, 1841, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 2767, 1841, 2767, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 1841, 1841,  784, 1994, 1994, 1994, 1994,  784,  784,
+     2263,  784, 2264,  784,  784, 1149, 2265, 2264, 2266, 2267,
+     2268,  961,  784,  784, 2264,  784, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2264,  784, 2264, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263,  784,  784, 3018, 3373, 3663, 3373, 3373, 3018, 3018,
+     3664, 3018, 3373, 3018, 3018, 3665, 3666, 3373, 3667, 3668,
+
+     3669, 3373, 3018, 3018, 3373, 3018, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3373, 3018, 3373, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3018, 3018, 3932, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3933, 5143, 5143, 5143, 5143, 5143, 3932,
+     3932, 3932, 3932, 3932, 3932, 3932, 3932, 5143, 5143, 5143,
+     3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932,
+     3932, 3932, 3932, 3932, 3018, 3372, 3660, 3372, 3372, 3018,
+     3661, 3018, 3018, 3018, 3018, 3372, 3372, 3019, 3018, 3018,
+     3662, 3018, 3661, 3018, 3018, 3018, 3018, 3661, 3661, 3661,
+
+     3661, 3661, 3661, 3661, 3661, 3018, 3018, 3018, 3661, 3661,
+     3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661, 3661,
+     3661, 3661, 3661, 3018, 3370, 4191, 4192, 4191, 4191, 3370,
+     3370, 4193, 3370, 4191, 3370, 3370, 4194, 4195, 4191, 4196,
+     4870, 4197, 4191, 3370, 3370, 4191, 3370, 4193, 4193, 4193,
+     4193, 4193, 4193, 4193, 4193, 4191, 3370, 4191, 4193, 4193,
+     4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193, 4193,
+     4193, 4193, 3370, 3370,  946, 4199, 3575, 4199, 4199,  946,
+     2036, 1793,  946, 1547,  946, 2035, 3569, 3056, 1547, 1795,
+     4871, 1797, 3571,  946,  946, 1547,  946, 4429, 4429, 4429,
+
+     4429, 4429, 4429, 4429, 4429, 1547,  946, 1547, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 2036,  946, 3944, 5143, 3945, 5143, 5143, 5143,
+     5143, 5143, 3946, 3946, 3946, 3946, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3946, 3946, 3946, 3946, 3946, 5143, 3946,
+     5143, 5143, 5143, 5143, 5143, 5143, 3946,  187, 1177, 1177,
+     1177, 1177,  187,  187,  316,  187,  187,  187,  187,  187,
+      188,  187,  187, 1183,  187,  187,  187,  187,  187,  187,
+      316,  316,  316,  316,  316,  316,  316,  316,  187,  187,
+      187,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+
+      316,  316,  316,  316,  316, 1184,  187, 3492, 4252, 4478,
+     4252, 4252, 3492, 3492, 4754, 3492, 3492, 3492, 4252, 4252,
+     3493, 3492, 3492, 4480, 4755, 4252, 3492, 3492, 3492, 3492,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 3492, 3492,
+     3492, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4481, 3492, 1196, 1435, 1435,
+     1435, 1435, 1196, 1196, 1674, 1196, 1196, 1196, 1196, 1196,
+     1197, 1196, 1196, 1675, 1196, 1196, 1196, 1196, 1196, 1196,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1196, 1196,
+     1196, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+
+     1674, 1674, 1674, 1674, 1674, 1196, 1196, 1196, 1891, 1891,
+     1891, 1891, 1196, 1196, 2158, 1196, 1196, 1196, 1891, 1891,
+     1197, 1196, 1196, 1895, 1196, 1891, 1196, 1196, 1196, 1196,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 1196, 1196,
+     1196, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 1893, 1196, 2484, 4766, 3497,
+     4766, 4766, 2484, 2484, 4881, 2484, 2484, 2484, 2484, 2484,
+     2485, 2484, 2484, 4882, 2484, 2484, 2484, 2484, 2484, 2484,
+     4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 2484, 2484,
+     2484, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+
+     4881, 4881, 4881, 4881, 4881, 2484, 2484, 4767, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4768, 5143, 5143,
+     5143, 5143, 5143, 4767, 4767, 4767, 4767, 4767, 4767, 4767,
+     4767, 5143, 5143, 5143, 4767, 4767, 4767, 4767, 4767, 4767,
+     4767, 4767, 4767, 4767, 4767, 4767, 4767, 4767, 4163, 4772,
+     4886, 4772, 4772, 4163, 4851, 4163, 4163, 4163, 4163, 4772,
+     4772, 4164, 4163, 4163, 4887, 4163, 4851, 4163, 4163, 4163,
+     4163, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4163,
+     4163, 4163, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851,
+     4851, 4851, 4851, 4851, 4851, 4851, 4851, 4163,  599,  854,
+
+      854,  854,  854,  599, 1038,  855,  599,  856,  599, 1039,
+     1040,  858,  856,  859, 1041,  861, 1042,  599,  599,  856,
+      599, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,  856,
+      599,  856, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1038,  599, 1458, 2855,
+     2573, 2855, 2855, 1458, 1458, 3191, 1458, 2855, 1458, 1458,
+     2852, 2873, 2855, 2874, 2875, 3192, 2855, 1458, 1458, 2855,
+     1458, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 2855,
+     1458, 2855, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191, 3191, 3191, 3191, 1458, 1458, 1921, 3188,
+
+     3531, 3188, 3188, 1921, 1921, 3532, 1921, 3188, 1921, 1921,
+     3184, 3533, 3188, 3534, 4888, 3535, 3188, 1921, 1921, 3188,
+     1921, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3188,
+     1921, 3188, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532,
+     3532, 3532, 3532, 3532, 3532, 3532, 1921, 1921, 2872, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2876, 5143,
+     5143, 5143, 5143, 5143, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 5143, 5143, 5143, 2872, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 1504,
+     3523, 3792, 3523, 3523, 1504, 2986, 2620, 1504, 2621, 1504,
+
+     2984, 3793, 4153, 2621, 2624, 4889, 2626, 3795, 1504, 1504,
+     2621, 1504, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     2621, 1504, 2621, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 2986, 1504, 3201,
+     5143, 3202, 5143, 5143, 5143, 5143, 5143, 3203, 3203, 3203,
+     3203, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3203, 3203,
+     3203, 3203, 3203, 5143, 3203, 5143, 5143, 5143, 5143, 5143,
+     5143, 3203,  213, 1082, 1082, 1082, 1082,  213,  382,  337,
+      213,  338,  213,  381, 1256,  340,  338,  341, 1257,  343,
+     1258,  213,  213,  338,  213, 1259, 1259, 1259, 1259, 1259,
+
+     1259, 1259, 1259,  338,  213,  338, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+      382,  213, 1504, 2627, 3001, 2627, 2627, 1504, 1504, 3305,
+     1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004, 3005, 3306,
+     2627, 1504, 1504, 2627, 1504, 3305, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 2627, 1504, 2627, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305,
+     1504, 1504, 3615, 4380, 4579, 4380, 4380, 3615, 3615, 4890,
+     3615, 4380, 3615, 3615, 4375, 4891, 4380, 4892, 4893, 4894,
+     4380, 3615, 3615, 4380, 3615, 4890, 4890, 4890, 4890, 4890,
+
+     4890, 4890, 4890, 4380, 3615, 4380, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     3615, 3615, 3002, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3006, 5143, 5143, 5143, 5143, 5143, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 5143, 5143, 5143, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3315, 5143, 3316, 5143, 5143, 5143, 5143,
+     5143, 3317, 3317, 3317, 3317, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 3317, 3317, 3317, 3317, 3317, 5143, 3317, 5143,
+     5143, 5143, 5143, 5143, 5143, 3317, 1461, 2592, 2897, 2592,
+
+     2592, 1461, 1461, 3219, 1461, 2592, 1461, 1461, 2590, 2899,
+     2592, 2900, 2901, 3220, 2592, 1461, 1461, 2592, 1461, 3219,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 2592, 1461, 2592,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219,
+     3219, 3219, 3219, 3219, 1461, 1461, 1937, 3215, 3548, 3215,
+     3215, 1937, 1937, 3549, 1937, 3215, 1937, 1937, 3211, 3550,
+     3215, 3551, 4897, 3552, 3215, 1937, 1937, 3215, 1937, 3549,
+     3549, 3549, 3549, 3549, 3549, 3549, 3549, 3215, 1937, 3215,
+     3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3549,
+     3549, 3549, 3549, 3549, 1937, 1937, 2898, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 2902, 5143, 5143, 5143,
+     5143, 5143, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     5143, 5143, 5143, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898,  517, 3285, 2985,
+     3285, 3285,  517, 1264, 1083,  517, 1084,  517, 1262, 3597,
+     2269, 1084, 1087, 4898, 1089, 3599,  517,  517, 1084,  517,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 1084,  517,
+     1084, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 1264,  517, 3229, 5143, 3230,
+     5143, 5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 3231, 3231, 3231, 3231,
+     3231, 5143, 3231, 5143, 5143, 5143, 5143, 5143, 5143, 3231,
+     3558, 4392, 2573, 4392, 4392, 3558, 3558, 4671, 3558, 4519,
+     3558, 3558, 4561, 4522, 4519, 4684, 4562, 4790, 4563, 3558,
+     3558, 4519, 3558, 4791, 4791, 4791, 4791, 4671, 4671, 4671,
+     4671, 4519, 3558, 4519, 4791, 4791, 4791, 4791, 4791, 4671,
+     4791, 4671, 4671, 4671, 4671, 4671, 4671, 4791, 3558, 3558,
+     4518, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 4523, 5143,
+     4525, 5143, 5143, 5143, 5143, 5143, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 5143, 5143, 5143, 4518, 4518, 4518,
+
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4523, 5143, 4672, 5143, 5143, 5143, 5143, 5143, 4671,
+     4671, 4671, 4671, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4671, 4671, 4671, 4671, 4671, 5143, 4671, 5143, 5143, 5143,
+     5143, 5143, 5143, 4671, 3558, 4520, 4673, 4520, 4520, 3558,
+     4517, 3558, 3558, 3558, 3558, 4520, 4520, 3559, 3558, 3558,
+     4674, 3558, 4517, 3558, 3558, 3558, 3558, 4517, 4517, 4517,
+     4517, 4517, 4517, 4517, 4517, 3558, 3558, 3558, 4517, 4517,
+     4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517,
+     4517, 4517, 4517, 3558, 4096, 4794, 3531, 4794, 4794, 4096,
+
+     4096, 4795, 4096, 4796, 4096, 4096, 4797, 4798, 4796, 4799,
+     4900, 4800, 4801, 4096, 4096, 4796, 4096, 4795, 4795, 4795,
+     4795, 4795, 4795, 4795, 4795, 4796, 4096, 4796, 4795, 4795,
+     4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795,
+     4795, 4795, 4096, 4096, 4684, 5143, 4685, 5143, 5143, 5143,
+     5143, 5143, 4686, 4686, 4686, 4686, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4686, 4686, 4686, 4686, 4686, 5143, 4686,
+     5143, 5143, 5143, 5143, 5143, 5143, 4686, 3558, 4563, 4687,
+     4563, 4563, 3558, 3558, 4688, 3558, 4563, 3558, 3558, 4561,
+     4689, 4563, 4690, 4691, 4692, 4563, 3558, 3558, 4563, 3558,
+
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4563, 3558,
+     4563, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 3558, 3558, 4803, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4804, 5143, 5143,
+     5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 4803, 4803, 4803, 4803, 4803, 4803, 4803, 4813, 5143,
+     4901, 5143, 5143, 5143, 5143, 5143, 4902, 4902, 4902, 4902,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4902, 4902, 4902,
+     4902, 4902, 5143, 4902, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     4902,  599, 2897, 2897, 2897, 2897,  599, 1038, 1061,  599,
+      862,  599, 1039, 1040, 1062,  862, 1063, 3217, 1065, 1042,
+      599,  599,  862,  599, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218,  862,  599,  862, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 1038,
+      599, 4096, 4801, 4903, 4801, 4801, 4096, 4096, 4904, 4096,
+     4801, 4096, 4096, 4797, 4905, 4801, 4906, 4691, 4907, 4801,
+     4096, 4096, 4801, 4096, 4904, 4904, 4904, 4904, 4904, 4904,
+     4904, 4904, 4801, 4096, 4801, 4904, 4904, 4904, 4904, 4904,
+     4904, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4096,
+
+     4096, 1291, 3839, 4098, 3839, 3839, 1291, 2397, 2288, 1291,
+     2289, 1291, 2237, 2399, 3918, 2289, 2291, 4908, 2293, 2403,
+     1291, 1291, 2289, 1291, 4100, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 2289, 1291, 2289, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 2397,
+     1291, 4813, 5143, 4814, 5143, 5143, 5143, 5143, 5143, 4815,
+     4815, 4815, 4815, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4815, 4815, 4815, 4815, 4815, 5143, 4815, 5143, 5143, 5143,
+     5143, 5143, 5143, 4815, 1234, 2007, 2294, 2007, 2007, 1234,
+     1234, 2205, 1234, 2206, 1234, 1234, 2295, 3852, 2206, 2210,
+
+     4913, 2212, 2297, 1234, 1234, 2206, 1234, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2206, 1234, 2206, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 1234, 1234, 4163, 4698, 3923, 4698, 4698, 4163,
+     4163, 4914, 4163, 4698, 4163, 4163, 4819, 4820, 4698, 4821,
+     4822, 4915, 4698, 4163, 4163, 4698, 4163, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4698, 4163, 4698, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4163, 4163, 4386, 4916, 4917, 4916, 4916, 4386,
+     4386, 4918, 4386, 4916, 4386, 4386, 4919, 4920, 4916, 4921,
+
+     4922, 4923, 4916, 4386, 4386, 4916, 4386, 4918, 4918, 4918,
+     4918, 4918, 4918, 4918, 4918, 4916, 4386, 4916, 4918, 4918,
+     4918, 4918, 4918, 4918, 4918, 4918, 4918, 4918, 4918, 4918,
+     4918, 4918, 4386, 4386, 4818, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4823, 5143, 5143, 5143, 5143, 5143,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 5143, 5143,
+     5143, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4926, 5143, 4927, 5143, 5143,
+     5143, 5143, 5143, 4928, 4928, 4928, 4928, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4928, 4928, 4928, 4928, 4928, 5143,
+
+     4928, 5143, 5143, 5143, 5143, 5143, 5143, 4928,  599,  862,
+      862,  862,  862,  599,  599, 1061,  599,  862,  599,  599,
+      857, 1062,  862, 1063, 1064, 1065,  862,  599,  599,  862,
+      599, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,  862,
+      599,  862, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061,  599,  599, 1479, 2703,
+     2954, 2703, 2703, 1479, 1479, 3267, 1479, 2703, 1479, 1479,
+     2701, 2956, 2703, 2957, 2958, 3268, 2703, 1479, 1479, 2703,
+     1479, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 2703,
+     1479, 2703, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267,
+
+     3267, 3267, 3267, 3267, 3267, 3267, 1479, 1479, 1960, 3265,
+     3586, 3265, 3265, 1960, 1960, 3587, 1960, 3265, 1960, 1960,
+     3261, 3588, 3265, 3589, 4929, 3590, 3265, 1960, 1960, 3265,
+     1960, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3265,
+     1960, 3265, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587,
+     3587, 3587, 3587, 3587, 3587, 3587, 1960, 1960, 2955, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 2959, 5143,
+     5143, 5143, 5143, 5143, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 5143, 5143, 5143, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,  536,
+
+     3380, 3001, 3380, 3380,  536, 1339, 1135,  536, 1136,  536,
+     1338, 3677, 2379, 1136, 1139, 4930, 1141, 3679,  536,  536,
+     1136,  536, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     1136,  536, 1136, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 1339,  536, 3277,
+     5143, 3278, 5143, 5143, 5143, 5143, 5143, 3279, 3279, 3279,
+     3279, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3279, 3279,
+     3279, 3279, 3279, 5143, 3279, 5143, 5143, 5143, 5143, 5143,
+     5143, 3279, 1588, 4834, 3923, 4834, 4834, 1588, 2754, 4715,
+     1588, 4716, 1588, 2756, 2757, 4717, 4716, 4718, 4933, 4720,
+
+     2762, 1588, 1588, 4716, 1588, 4934, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4716, 1588, 4716, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     2754, 1588,  536, 1142, 1353, 1142, 1142,  536,  536, 1562,
+      536, 1142,  536,  536, 1137, 1355, 1142, 1356, 1357, 1563,
+     1142,  536,  536, 1142,  536, 1562, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562, 1142,  536, 1142, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+      536,  536, 1588, 4553, 3663, 4553, 4553, 1588, 1588, 4838,
+     1588, 4716, 1588, 1588, 2769, 4717, 4716, 4718, 4719, 4839,
+
+     2430, 1588, 1588, 4716, 1588, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4716, 1588, 4716, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     1588, 1588, 4847, 5143, 4935, 5143, 5143, 5143, 5143, 5143,
+     4936, 4936, 4936, 4936, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4936, 4936, 4936, 4936, 4936, 5143, 4936, 5143, 5143,
+     5143, 5143, 5143, 5143, 4936, 4715, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4720, 5143, 5143, 5143, 5143,
+     5143, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 5143,
+     5143, 5143, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+
+     4715, 4715, 4715, 4715, 4715, 4715, 2094, 4937, 4192, 4937,
+     4937, 2094, 2094, 4938, 2094, 4939, 2094, 2094, 3438, 4940,
+     4939, 4941, 4719, 4942, 3435, 2094, 2094, 4939, 2094, 4938,
+     4938, 4938, 4938, 4938, 4938, 4938, 4938, 4939, 2094, 4939,
+     4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938,
+     4938, 4938, 4938, 4938, 2094, 2094,  257, 1825, 2096, 1825,
+     1825,  257,  952,  796,  257,  648,  257,  951, 1963, 2736,
+      648,  797, 4943,  799, 1965,  257,  257,  648,  257, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098,  648,  257,  648,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+
+     2098, 2098, 2098, 2098,  952,  257, 4847, 5143, 4848, 5143,
+     5143, 5143, 5143, 5143, 4849, 4849, 4849, 4849, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4849, 4849, 4849, 4849, 4849,
+     5143, 4849, 5143, 5143, 5143, 5143, 5143, 5143, 4849,  784,
+     3660, 3660, 3660, 3660,  784, 1359, 2263,  784, 2264,  784,
+     1360, 1361, 2265, 2264, 2266, 3928, 2268, 1363,  784,  784,
+     2264,  784, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     2264,  784, 2264, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 1359,  784, 1760,
+     4856, 4946, 4856, 4856, 1760, 3345, 3024, 1760, 3025, 1760,
+
+     3343, 4947, 3027, 3025, 3028, 4948, 3030, 4949, 1760, 1760,
+     3025, 1760, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     3025, 1760, 3025, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 3345, 1760, 2286,
+     3643, 3913, 3643, 3643, 2286, 2286, 3914, 2286, 3643, 2286,
+     2286, 3639, 3915, 3643, 3916, 4179, 3917, 3643, 2286, 2286,
+     3643, 2286, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914,
+     3643, 2286, 3643, 3914, 3914, 3914, 3914, 3914, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3914, 3914, 2286, 2286, 1760,
+     2668, 3001, 2668, 2668, 1760, 1760, 3024, 1760, 3025, 1760,
+
+     1760, 3026, 3027, 3025, 3028, 3029, 3030, 3031, 1760, 1760,
+     3025, 1760, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3025, 1760, 3025, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 1760, 1760, 3341,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3342,
+     5143, 5143, 5143, 5143, 5143, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 5143, 5143, 5143, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     1760, 3343, 3344, 3343, 3343, 1760, 3345, 1760, 1760, 1760,
+     1760, 3343, 3343, 1761, 1760, 1760, 3346, 1760, 3345, 1760,
+
+     1760, 1760, 1760, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 1760, 1760, 1760, 3345, 3345, 3345, 3345, 3345, 3345,
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760,
+     3920, 4578, 4579, 4578, 4578, 3920, 3920, 4580, 3920, 4581,
+     3920, 3920, 4582, 4583, 4581, 4584, 4585, 4586, 4587, 3920,
+     3920, 4581, 3920, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
+     4580, 4581, 3920, 4581, 4580, 4580, 4580, 4580, 4580, 4580,
+     4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580, 3920, 3920,
+     3356, 5143, 3357, 5143, 5143, 5143, 5143, 5143, 3358, 3358,
+     3358, 3358, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3358,
+
+     3358, 3358, 3358, 3358, 5143, 3358, 5143, 5143, 5143, 5143,
+     5143, 5143, 3358, 1760, 3031, 3359, 3031, 3031, 1760, 1760,
+     3360, 1760, 3031, 1760, 1760, 3026, 3361, 3031, 3362, 3363,
+     3364, 3031, 1760, 1760, 3031, 1760, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3031, 1760, 3031, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 1760, 1760, 4559, 4867, 4951, 4867, 4867, 4559, 4559,
+     4952, 4559, 4867, 4559, 4559, 4863, 4953, 4867, 4954, 4955,
+     4956, 4867, 4559, 4559, 4867, 4559, 4952, 4952, 4952, 4952,
+     4952, 4952, 4952, 4952, 4867, 4559, 4867, 4952, 4952, 4952,
+
+     4952, 4952, 4952, 4952, 4952, 4952, 4952, 4952, 4952, 4952,
+     4952, 4559, 4559, 3018, 3373, 3663, 3373, 3373, 3018, 3018,
+     3664, 3018, 3373, 3018, 3018, 3665, 4600, 3373, 3667, 4957,
+     3669, 3373, 3018, 3018, 3373, 3018, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3373, 3018, 3373, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3018, 3018, 1196, 1673, 1673, 1673, 1673, 1196, 1196,
+     1890, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1892,
+     1196, 1891, 1196, 1196, 1196, 1196, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1196, 1196, 1196, 1890, 1890, 1890,
+
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1893, 1196, 1196, 1891, 1891, 1891, 1891, 1196, 1196,
+     2158, 1196, 1196, 1196, 1891, 1891, 1197, 1196, 1196, 1895,
+     1196, 1891, 1196, 1196, 1196, 1196, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 1196, 1196, 1196, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 1893, 1196, 2484, 3754, 3764, 3754, 3754, 2484, 2484,
+     4961, 2484, 2484, 2484, 3754, 3754, 2485, 2484, 2484, 3995,
+     4962, 3754, 2484, 2484, 2484, 2484, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 4961, 2484, 2484, 2484, 4961, 4961, 4961,
+
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 3756, 2484, 1458, 2850, 2203, 2850, 2850, 1458, 1458,
+     2511, 1458, 2512, 1458, 1458, 2852, 4064, 2512, 2516, 4967,
+     2518, 2855, 1458, 1458, 2512, 1458, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2512, 1458, 2512, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 1458, 1458, 1504, 2627, 3001, 2627, 2627, 1504, 1504,
+     3305, 1504, 2627, 1504, 1504, 2622, 3003, 2627, 3004, 3005,
+     3306, 2627, 1504, 1504, 2627, 1504, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 3305, 2627, 1504, 2627, 3305, 3305, 3305,
+
+     3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305,
+     3305, 1504, 1504, 1987, 3303, 3609, 3303, 3303, 1987, 1987,
+     3610, 1987, 3303, 1987, 1987, 3299, 3611, 3303, 3612, 4783,
+     3613, 3303, 1987, 1987, 3303, 1987, 3610, 3610, 3610, 3610,
+     3610, 3610, 3610, 3610, 3303, 1987, 3303, 3610, 3610, 3610,
+     3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610, 3610,
+     3610, 1987, 1987, 3002, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3006, 5143, 5143, 5143, 5143, 5143, 3002,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 5143, 5143, 5143,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+
+     3002, 3002, 3002, 3002, 2228, 3617, 3568, 3617, 3617, 2228,
+     2228, 3810, 2228, 3811, 2228, 2228, 3577, 4968, 3811, 3813,
+     4969, 3815, 3253, 2228, 2228, 3811, 2228, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3811, 2228, 3811, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 2228, 2228, 3315, 5143, 3316, 5143, 5143, 5143,
+     5143, 5143, 3317, 3317, 3317, 3317, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 3317, 3317, 3317, 3317, 3317, 5143, 3317,
+     5143, 5143, 5143, 5143, 5143, 5143, 3317, 3615, 4380, 4579,
+     4380, 4380, 3615, 3615, 4890, 3615, 4380, 3615, 3615, 4375,
+
+     4891, 4380, 4892, 4893, 4894, 4380, 3615, 3615, 4380, 3615,
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4380, 3615,
+     4380, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4890, 4890, 3615, 3615, 1461, 2238,  854,
+     2238, 2238, 1461, 1461, 2534, 1461, 2535, 1461, 1461, 2590,
+     4092, 2535, 2539, 4970, 2541, 2592, 1461, 1461, 2535, 1461,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2535, 1461,
+     2535, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 1461, 1461, 1970, 4899, 4973,
+     4899, 4899, 1970, 3283, 4170, 1970, 4171, 1970, 2963, 4209,
+
+     4173, 4171, 4174, 4974, 4176, 4214, 1970, 1970, 4171, 1970,
+     4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4171, 1970,
+     4171, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4975, 4975, 3283, 1970, 3558, 4342, 4516,
+     4342, 4342, 3558, 4517, 4518, 3558, 4519, 3558, 4520, 4521,
+     4976, 4519, 4523, 4977, 4525, 4526, 3558, 3558, 4519, 3558,
+     4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4519, 3558,
+     4519, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527,
+     4527, 4527, 4527, 4527, 4527, 4517, 3558, 3558, 4563, 4687,
+     4563, 4563, 3558, 3558, 4803, 3558, 4563, 3558, 3558, 4561,
+
+     4689, 4563, 4813, 4691, 4901, 4563, 3558, 3558, 4563, 3558,
+     4902, 4902, 4902, 4902, 4803, 4803, 4803, 4803, 4563, 3558,
+     4563, 4902, 4902, 4902, 4902, 4902, 4803, 4902, 4803, 4803,
+     4803, 4803, 4803, 4803, 4902, 3558, 3558,  599, 2897, 2897,
+     2897, 2897,  599, 1038, 1061,  599,  862,  599, 1039, 1040,
+     1062,  862, 1063, 3217, 1065, 1042,  599,  599,  862,  599,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,  862,  599,
+      862, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 1038,  599, 4690, 5143, 4804,
+     5143, 5143, 5143, 5143, 5143, 4803, 4803, 4803, 4803, 5143,
+
+     5143, 5143, 5143, 5143, 5143, 5143, 4803, 4803, 4803, 4803,
+     4803, 5143, 4803, 5143, 5143, 5143, 5143, 5143, 5143, 4803,
+     4096, 4801, 4903, 4801, 4801, 4096, 4096, 4904, 4096, 4801,
+     4096, 4096, 4797, 4905, 4801, 4906, 4978, 4907, 4801, 4096,
+     4096, 4801, 4096, 4904, 4904, 4904, 4904, 4904, 4904, 4904,
+     4904, 4801, 4096, 4801, 4904, 4904, 4904, 4904, 4904, 4904,
+     4904, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4096, 4096,
+     4688, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4692, 5143, 5143, 5143, 5143, 5143, 4688, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 5143, 5143, 5143, 4688, 4688, 4688,
+
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4813, 5143, 4814, 5143, 5143, 5143, 5143, 5143, 4815,
+     4815, 4815, 4815, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4815, 4815, 4815, 4815, 4815, 5143, 4815, 5143, 5143, 5143,
+     5143, 5143, 5143, 4815, 1841, 4912, 4979, 4912, 4912, 1841,
+     3449, 4180, 1841, 4181, 1841, 3447, 4203, 4182, 4181, 4183,
+     4980, 4185, 4205, 1841, 1841, 4181, 1841, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4181, 1841, 4181, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 3449, 1841, 4163, 4698, 3923, 4698, 4698, 4163,
+
+     4163, 4914, 4163, 4698, 4163, 4163, 4819, 4820, 4698, 4821,
+     4822, 4915, 4698, 4163, 4163, 4698, 4163, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4698, 4163, 4698, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4163, 4163, 4926, 5143, 4982, 5143, 5143, 5143,
+     5143, 5143, 4983, 4983, 4983, 4983, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4983, 4983, 4983, 4983, 4983, 5143, 4983,
+     5143, 5143, 5143, 5143, 5143, 5143, 4983, 4818, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4823, 5143, 5143,
+     5143, 5143, 5143, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+
+     4818, 5143, 5143, 5143, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4163, 4772,
+     4886, 4772, 4772, 4163, 4851, 4163, 4163, 4163, 4163, 4772,
+     4772, 4164, 4163, 4163, 4887, 4163, 4851, 4163, 4163, 4163,
+     4163, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4163,
+     4163, 4163, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851,
+     4851, 4851, 4851, 4851, 4851, 4851, 4851, 4163, 4554, 4984,
+     4985, 4984, 4984, 4554, 4554, 4986, 4554, 4984, 4554, 4554,
+     4987, 4988, 4984, 4989, 4822, 4990, 4984, 4554, 4554, 4984,
+     4554, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4984,
+
+     4554, 4984, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986,
+     4986, 4986, 4986, 4986, 4986, 4986, 4554, 4554, 1093, 4389,
+     4098, 4389, 4389, 1093, 1925, 2192, 1093, 1991, 1093, 1928,
+     1929, 4130, 1991, 2193, 4991, 2195, 1933, 1093, 1093, 1991,
+     1093, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 1991,
+     1093, 1991, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 1925, 1093, 4926, 5143,
+     4927, 5143, 5143, 5143, 5143, 5143, 4928, 4928, 4928, 4928,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4928, 4928, 4928,
+     4928, 4928, 5143, 4928, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     4928, 1479, 2362, 2563, 2362, 2362, 1479, 1479, 2575, 1479,
+     2576, 1479, 1479, 2701, 4144, 2576, 2580, 4993, 2582, 2703,
+     1479, 1479, 2576, 1479, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2576, 1479, 2576, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 1479,
+     1479, 1479, 4932, 4687, 4932, 4932, 1479, 2574, 2955, 1479,
+     2703, 1479, 2577, 2578, 2956, 2703, 2957, 4994, 2959, 2583,
+     1479, 1479, 2703, 1479, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 2703, 1479, 2703, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 2574,
+
+     1479, 1588, 4553, 3663, 4553, 4553, 1588, 1588, 4838, 1588,
+     4716, 1588, 1588, 2769, 4717, 4716, 4718, 4719, 4839, 2430,
+     1588, 1588, 4716, 1588, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4716, 1588, 4716, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 1588,
+     1588, 4847, 5143, 4935, 5143, 5143, 5143, 5143, 5143, 4936,
+     4936, 4936, 4936, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     4936, 4936, 4936, 4936, 4936, 5143, 4936, 5143, 5143, 5143,
+     5143, 5143, 5143, 4936, 4715, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4720, 5143, 5143, 5143, 5143, 5143,
+
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 5143, 5143,
+     5143, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 2094, 4937, 4192, 4937, 4937,
+     2094, 2094, 4938, 2094, 4939, 2094, 2094, 3438, 4940, 4939,
+     4941, 4998, 4942, 3435, 2094, 2094, 4939, 2094, 4938, 4938,
+     4938, 4938, 4938, 4938, 4938, 4938, 4939, 2094, 4939, 4938,
+     4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938,
+     4938, 4938, 4938, 2094, 2094, 4847, 5143, 4848, 5143, 5143,
+     5143, 5143, 5143, 4849, 4849, 4849, 4849, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 4849, 4849, 4849, 4849, 4849, 5143,
+
+     4849, 5143, 5143, 5143, 5143, 5143, 5143, 4849,  213, 1082,
+     1082, 1082, 1082,  213,  382,  337,  213,  338,  213,  381,
+     1256,  340,  338,  341, 1257,  343, 1258,  213,  213,  338,
+      213, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,  338,
+      213,  338, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259,  382,  213, 1760, 3343,
+     3344, 3343, 3343, 1760, 3345, 1760, 1760, 1760, 1760, 3343,
+     3343, 1761, 1760, 1760, 3346, 1760, 3345, 1760, 1760, 1760,
+     1760, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760,
+     1760, 1760, 3345, 3345, 3345, 3345, 3345, 3345, 3345, 3345,
+
+     3345, 3345, 3345, 3345, 3345, 3345, 3345, 1760, 1760, 3031,
+     3359, 3031, 3031, 1760, 1760, 3360, 1760, 3031, 1760, 1760,
+     3026, 3361, 3031, 3362, 3363, 3364, 3031, 1760, 1760, 3031,
+     1760, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3031,
+     1760, 3031, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 1760, 1760, 1760, 2668,
+     3001, 2668, 2668, 1760, 1760, 3341, 1760, 3025, 1760, 1760,
+     3026, 3027, 3025, 3028, 3029, 3342, 3031, 1760, 1760, 3025,
+     1760, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3025,
+     1760, 3025, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+
+     3341, 3341, 3341, 3341, 3341, 3341, 1760, 1760,  213, 1281,
+     1281, 1281, 1281,  213,  382,  398,  213,  344,  213,  381,
+     1256,  399,  344,  400, 1506,  402, 1258,  213,  213,  344,
+      213, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,  344,
+      213,  344, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507,  382,  213, 3646, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3647, 5143,
+     5143, 5143, 5143, 5143, 3646, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646, 5143, 5143, 5143, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3920,
+
+     4587, 4999, 4587, 4587, 3920, 3920, 5000, 3920, 4587, 3920,
+     3920, 4582, 5001, 4587, 5002, 5003, 5004, 4587, 3920, 3920,
+     4587, 3920, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     4587, 3920, 4587, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     5000, 5000, 5000, 5000, 5000, 5000, 5000, 3920, 3920, 3656,
+     5143, 3657, 5143, 5143, 5143, 5143, 5143, 3658, 3658, 3658,
+     3658, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3658, 3658,
+     3658, 3658, 3658, 5143, 3658, 5143, 5143, 5143, 5143, 5143,
+     5143, 3658,  561,  812,  812,  812,  812,  561,  561,  813,
+      561,  561,  561,  561,  561,  562,  561,  561,  984,  561,
+
+      561,  561,  561,  561,  561,  813,  813,  813,  813,  813,
+      813,  813,  813,  561,  561,  561,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      985,  561, 2484, 3754, 3764, 3754, 3754, 2484, 2484, 3994,
+     2484, 2484, 2484, 3754, 3754, 2485, 2484, 2484, 3995, 3996,
+     3754, 2484, 2484, 2484, 2484, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 2484, 2484, 2484, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3756, 2484, 4961, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 4962, 5143, 5143, 5143, 5143, 5143, 4961, 4961,
+
+     4961, 4961, 4961, 4961, 4961, 4961, 5143, 5143, 5143, 4961,
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 2937, 4311, 4312, 4311, 4311, 2937, 2937,
+     4313, 2937, 4314, 2937, 2937, 4126, 4315, 4314, 4316, 4512,
+     4317, 4123, 2937, 2937, 4314, 2937, 4313, 4313, 4313, 4313,
+     4313, 4313, 4313, 4313, 4314, 2937, 4314, 4313, 4313, 4313,
+     4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313, 4313,
+     4313, 2937, 2937,  248, 1460, 1460, 1460, 1460,  248,  377,
+      603,  248,  604,  248,  336, 1701,  606,  604,  607, 1702,
+      609, 1703,  248,  248,  604,  248, 1704, 1704, 1704, 1704,
+
+     1704, 1704, 1704, 1704,  604,  248,  604, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704,  377,  248, 1970, 3909, 3871, 3909, 3909, 1970, 1970,
+     4393, 1970, 4171, 1970, 1970, 4172, 4173, 4171, 4174, 4175,
+     4394, 3978, 1970, 1970, 4171, 1970, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4171, 1970, 4171, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 1970, 1970, 4167, 5014, 4773, 5014, 5014, 4167, 4167,
+     5015, 4167, 5016, 4167, 4167, 5017, 5018, 5016, 5019, 5020,
+     5021, 5022, 4167, 4167, 5016, 4167, 5015, 5015, 5015, 5015,
+
+     5015, 5015, 5015, 5015, 5016, 4167, 5016, 5015, 5015, 5015,
+     5015, 5015, 5015, 5015, 5015, 5015, 5015, 5015, 5015, 5015,
+     5015, 4167, 4167, 3558, 4342, 4516, 4342, 4342, 3558, 4517,
+     4518, 3558, 4519, 3558, 4520, 4521, 5023, 4519, 4523, 5024,
+     4525, 4526, 3558, 3558, 4519, 3558, 4527, 4527, 4527, 4527,
+     4527, 4527, 4527, 4527, 4519, 3558, 4519, 4527, 4527, 4527,
+     4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527, 4527,
+     4527, 4517, 3558,  255, 1478, 1478, 1478, 1478,  255,  469,
+      628,  255,  629,  255,  468, 1590,  630,  629,  631, 1721,
+      633, 1592,  255,  255,  629,  255, 1722, 1722, 1722, 1722,
+
+     1722, 1722, 1722, 1722,  629,  255,  629, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722,  469,  255, 1841, 3922, 3575, 3922, 3922, 1841, 1841,
+     4411, 1841, 4181, 1841, 1841, 3114, 4182, 4181, 4183, 4184,
+     4412, 2767, 1841, 1841, 4181, 1841, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4181, 1841, 4181, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 1841, 1841, 4163, 4698, 3923, 4698, 4698, 4163, 4163,
+     4914, 4163, 4698, 4163, 4163, 4819, 4820, 4698, 4926, 4822,
+     4982, 4698, 4163, 4163, 4698, 4163, 4983, 4983, 4983, 4983,
+
+     4914, 4914, 4914, 4914, 4698, 4163, 4698, 4983, 4983, 4983,
+     4983, 4983, 4914, 4983, 4914, 4914, 4914, 4914, 4914, 4914,
+     4983, 4163, 4163, 4818, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 4821, 5143, 4823, 5143, 5143, 5143, 5143, 5143, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 5143, 5143, 5143,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818,  784, 3660, 3660, 3660, 3660,  784,
+     1359, 2263,  784, 2264,  784, 1360, 1361, 2265, 2264, 2266,
+     3928, 2268, 1363,  784,  784, 2264,  784, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 2264,  784, 2264, 3929, 3929,
+
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 1359,  784, 4821, 5143, 4915, 5143, 5143, 5143,
+     5143, 5143, 4914, 4914, 4914, 4914, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 4914, 4914, 4914, 4914, 4914, 5143, 4914,
+     5143, 5143, 5143, 5143, 5143, 5143, 4914, 4163, 4772, 4886,
+     4772, 4772, 4163, 4851, 4163, 4163, 4163, 4163, 4772, 4772,
+     4164, 4163, 4163, 4887, 4163, 4851, 4163, 4163, 4163, 4163,
+     4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4163, 4163,
+     4163, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851,
+     4851, 4851, 4851, 4851, 4851, 4851, 4163, 4554, 4984, 4985,
+
+     4984, 4984, 4554, 4554, 4986, 4554, 4984, 4554, 4554, 4987,
+     4988, 4984, 4989, 5027, 4990, 4984, 4554, 4554, 4984, 4554,
+     4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4984, 4554,
+     4984, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986,
+     4986, 4986, 4986, 4986, 4986, 4554, 4554, 4926, 5143, 4927,
+     5143, 5143, 5143, 5143, 5143, 4928, 4928, 4928, 4928, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 4928, 4928, 4928, 4928,
+     4928, 5143, 4928, 5143, 5143, 5143, 5143, 5143, 5143, 4928,
+     2228, 4992, 4979, 4992, 4992, 2228, 3817, 3576, 2228, 3253,
+     2228, 3818, 3819, 3578, 3253, 3579, 5028, 3581, 3821, 2228,
+
+     2228, 3253, 2228, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 3253, 2228, 3253, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 3817, 2228,
+     1479, 2703, 2954, 2703, 2703, 1479, 1479, 3267, 1479, 2703,
+     1479, 1479, 2701, 2956, 2703, 2957, 2958, 3268, 2703, 1479,
+     1479, 2703, 1479, 3267, 3267, 3267, 3267, 3267, 3267, 3267,
+     3267, 2703, 1479, 2703, 3267, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 1479, 1479,
+     1588, 2421, 2753, 2421, 2421, 1588, 2754, 2755, 1588, 2430,
+     1588, 2756, 2757, 5033, 2430, 2759, 5034, 2761, 2762, 1588,
+
+     1588, 2430, 1588, 2763, 2763, 2763, 2763, 2763, 2763, 2763,
+     2763, 2430, 1588, 2430, 2763, 2763, 2763, 2763, 2763, 2763,
+     2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2754, 1588,
+      213, 1281, 1281, 1281, 1281,  213,  382,  398,  213,  344,
+      213,  381, 1256,  399,  344,  400, 1506,  402, 1258,  213,
+      213,  344,  213, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507,  344,  213,  344, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,  382,  213,
+     3646, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     3647, 5143, 5143, 5143, 5143, 5143, 3646, 3646, 3646, 3646,
+
+     3646, 3646, 3646, 3646, 5143, 5143, 5143, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646,
+     3646, 2286, 3643, 3913, 3643, 3643, 2286, 2286, 3914, 2286,
+     3643, 2286, 2286, 3639, 3915, 3643, 3916, 4955, 3917, 3643,
+     2286, 2286, 3643, 2286, 3914, 3914, 3914, 3914, 3914, 3914,
+     3914, 3914, 3643, 2286, 3643, 3914, 3914, 3914, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 3914, 2286,
+     2286, 3360, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3364, 5143, 5143, 5143, 5143, 5143, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 5143, 5143, 5143, 3360, 3360,
+
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3360, 1841, 3922, 3575, 3922, 3922, 1841, 1841, 4180,
+     1841, 4181, 1841, 1841, 3114, 5035, 4181, 4183, 5036, 4185,
+     2767, 1841, 1841, 4181, 1841, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4181, 1841, 4181, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     1841, 1841, 3656, 5143, 3657, 5143, 5143, 5143, 5143, 5143,
+     3658, 3658, 3658, 3658, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 3658, 3658, 3658, 3658, 3658, 5143, 3658, 5143, 5143,
+     5143, 5143, 5143, 5143, 3658, 3920, 4587, 4999, 4587, 4587,
+
+     3920, 3920, 5000, 3920, 4587, 3920, 3920, 4582, 5001, 4587,
+     5002, 5003, 5004, 4587, 3920, 3920, 4587, 3920, 5000, 5000,
+     5000, 5000, 5000, 5000, 5000, 5000, 4587, 3920, 4587, 5000,
+     5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     5000, 5000, 5000, 3920, 3920, 2501, 5007, 5037, 5007, 5007,
+     2501, 2501, 5038, 2501, 2501, 2501, 4021, 4021, 2502, 2501,
+     2501, 5039, 2501, 4021, 2501, 2501, 2501, 2501, 5038, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 2501, 2501, 2501, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038,
+     5038, 5038, 5038, 4026, 2501, 1726, 5008, 4973, 5008, 5008,
+
+     1726, 2961, 4049, 1726, 3885, 1726, 2585, 3800, 4050, 3885,
+     4051, 5040, 4053, 3805, 1726, 1726, 3885, 1726, 5041, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 3885, 1726, 3885, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041,
+     5041, 5041, 5041, 2961, 1726,  599, 2897, 2897, 2897, 2897,
+      599, 1038, 1061,  599,  862,  599, 1039, 1040, 1062,  862,
+     1063, 3217, 1065, 1042,  599,  599,  862,  599, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218,  862,  599,  862, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 1038,  599, 3558, 4392, 2573, 4392, 4392,
+
+     3558, 3558, 4518, 3558, 4519, 3558, 3558, 4561, 4522, 4519,
+     4523, 4562, 4525, 4563, 3558, 3558, 4519, 3558, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4519, 3558, 4519, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 3558, 3558, 4671, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4672, 5143, 5143, 5143, 5143,
+     5143, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 5143,
+     5143, 5143, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 3558, 4520, 4673, 4520,
+     4520, 3558, 4517, 3558, 3558, 3558, 3558, 4520, 4520, 3559,
+
+     3558, 3558, 4674, 3558, 4517, 3558, 3558, 3558, 3558, 4517,
+     4517, 4517, 4517, 4517, 4517, 4517, 4517, 3558, 3558, 3558,
+     4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517, 4517,
+     4517, 4517, 4517, 4517, 4517, 3558, 4096, 4794, 3531, 4794,
+     4794, 4096, 4096, 4795, 4096, 4796, 4096, 4096, 4797, 4798,
+     4796, 4799, 5045, 4800, 4801, 4096, 4096, 4796, 4096, 4795,
+     4795, 4795, 4795, 4795, 4795, 4795, 4795, 4796, 4096, 4796,
+     4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795, 4795,
+     4795, 4795, 4795, 4795, 4096, 4096, 1760, 4856, 4946, 4856,
+     4856, 1760, 3345, 3024, 1760, 3025, 1760, 3343, 4947, 4177,
+
+     3025, 3028, 5046, 3030, 4949, 1760, 1760, 3025, 1760, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 3025, 1760, 3025,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 3345, 1760, 4684, 5143, 4685, 5143,
+     5143, 5143, 5143, 5143, 4686, 4686, 4686, 4686, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 4686, 4686, 4686, 4686, 4686,
+     5143, 4686, 5143, 5143, 5143, 5143, 5143, 5143, 4686, 3558,
+     4563, 4687, 4563, 4563, 3558, 3558, 4688, 3558, 4563, 3558,
+     3558, 4561, 4689, 4563, 4690, 4691, 4692, 4563, 3558, 3558,
+     4563, 3558, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+
+     4563, 3558, 4563, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 3558, 3558, 4909,
+     5047, 5048, 5047, 5047, 4909, 4909, 5049, 4909, 5050, 4909,
+     4909, 5051, 5052, 5050, 5053, 5054, 5055, 5056, 4909, 4909,
+     5050, 4909, 5049, 5049, 5049, 5049, 5049, 5049, 5049, 5049,
+     5050, 4909, 5050, 5049, 5049, 5049, 5049, 5049, 5049, 5049,
+     5049, 5049, 5049, 5049, 5049, 5049, 5049, 4909, 4909, 4163,
+     4721, 4850, 4721, 4721, 4163, 4851, 4818, 4163, 4698, 4163,
+     4772, 4852, 5060, 4698, 4821, 5061, 4823, 4854, 4163, 4163,
+     4698, 4163, 4855, 4855, 4855, 4855, 4855, 4855, 4855, 4855,
+
+     4698, 4163, 4698, 4855, 4855, 4855, 4855, 4855, 4855, 4855,
+     4855, 4855, 4855, 4855, 4855, 4855, 4855, 4851, 4163, 2228,
+     3253, 3575, 3253, 3253, 2228, 2228, 3857, 2228, 3253, 2228,
+     2228, 3577, 3578, 3253, 3579, 3580, 3858, 3253, 2228, 2228,
+     3253, 2228, 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3253, 2228, 3253, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3857, 3857, 3857, 3857, 3857, 3857, 3857, 2228, 2228,  599,
+      862,  862,  862,  862,  599,  599, 1061,  599,  862,  599,
+      599,  857, 1062,  862, 1063, 1064, 1065,  862,  599,  599,
+      862,  599, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+
+      862,  599,  862, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061,  599,  599, 4712,
+     5064, 5065, 5064, 5064, 4712, 4712, 5066, 4712, 5064, 4712,
+     4712, 5067, 5068, 5064, 5069, 5070, 5071, 5064, 4712, 4712,
+     5064, 4712, 5066, 5066, 5066, 5066, 5066, 5066, 5066, 5066,
+     5064, 4712, 5064, 5066, 5066, 5066, 5066, 5066, 5066, 5066,
+     5066, 5066, 5066, 5066, 5066, 5066, 5066, 4712, 4712, 2427,
+     4590, 4124, 4590, 4590, 2427, 2427, 4591, 2427, 4592, 2427,
+     2427, 3723, 4593, 4592, 4594, 4733, 4595, 3720, 2427, 2427,
+     4592, 2427, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591,
+
+     4592, 2427, 4592, 4591, 4591, 4591, 4591, 4591, 4591, 4591,
+     4591, 4591, 4591, 4591, 4591, 4591, 4591, 2427, 2427,  324,
+     1904, 1904, 1904, 1904,  324,  324, 2168,  324,  324,  324,
+      681,  681,  325,  324,  324, 2169,  324,  681,  324,  324,
+      324,  324, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+      324,  324,  324, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168,  685,  324, 2501,
+     4021, 4022, 4021, 4021, 2501, 2501, 4260, 2501, 2501, 2501,
+     4021, 4021, 2502, 2501, 2501, 4024, 4261, 4021, 2501, 2501,
+     2501, 2501, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260,
+
+     2501, 2501, 2501, 4260, 4260, 4260, 4260, 4260, 4260, 4260,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 4026, 2501, 1726,
+     3885, 3871, 3885, 3885, 1726, 1726, 4284, 1726, 3885, 1726,
+     1726, 3883, 4050, 3885, 4051, 4052, 4285, 3885, 1726, 1726,
+     3885, 1726, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284,
+     3885, 1726, 3885, 4284, 4284, 4284, 4284, 4284, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284, 4284, 4284, 1726, 1726,  599,
+      854,  854,  854,  854,  599, 1038,  855,  599,  856,  599,
+     1039, 1040,  858,  856,  859, 1041,  861, 1042,  599,  599,
+      856,  599, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+
+      856,  599,  856, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1038,  599, 1841,
+     4912, 4979, 4912, 4912, 1841, 3449, 4180, 1841, 4181, 1841,
+     3447, 4203, 4731, 4181, 4183, 5078, 4185, 4205, 1841, 1841,
+     4181, 1841, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4181, 1841, 4181, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 3449, 1841, 4530,
+     5079, 5080, 5079, 5079, 4530, 4530, 5081, 4530, 5079, 4530,
+     4530, 5082, 5083, 5079, 5084, 5085, 5086, 5079, 4530, 4530,
+     5079, 4530, 5081, 5081, 5081, 5081, 5081, 5081, 5081, 5081,
+
+     5079, 4530, 5079, 5081, 5081, 5081, 5081, 5081, 5081, 5081,
+     5081, 5081, 5081, 5081, 5081, 5081, 5081, 4530, 4530, 1479,
+     2703, 2954, 2703, 2703, 1479, 1479, 2955, 1479, 2703, 1479,
+     1479, 2701, 2956, 2703, 2957, 2958, 2959, 2703, 1479, 1479,
+     2703, 1479, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2703, 1479, 2703, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 1479, 1479, 3267,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3268,
+     5143, 5143, 5143, 5143, 5143, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267, 3267, 5143, 5143, 5143, 3267, 3267, 3267, 3267,
+
+     3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267,
+     1479, 2577, 2897, 2577, 2577, 1479, 2574, 1479, 1479, 1479,
+     1479, 2577, 2577, 1480, 1479, 1479, 2941, 1479, 2574, 1479,
+     1479, 1479, 1479, 2574, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 1479, 1479, 1479, 2574, 2574, 2574, 2574, 2574, 2574,
+     2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 1479,
+     4832, 5090, 5091, 5090, 5090, 4832, 4832, 5092, 4832, 5090,
+     4832, 4832, 5093, 5094, 5090, 5095, 5096, 5097, 5090, 4832,
+     4832, 5090, 4832, 5092, 5092, 5092, 5092, 5092, 5092, 5092,
+     5092, 5090, 4832, 5090, 5092, 5092, 5092, 5092, 5092, 5092,
+
+     5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 4832, 4832,
+      536, 4714, 3359, 4714, 4714,  536, 1339, 1354,  536, 1142,
+      536, 1338, 3677, 3955, 1142, 1356, 5098, 1358, 3679,  536,
+      536, 1142,  536, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 1142,  536, 1142, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 1339,  536,
+     3277, 5143, 3278, 5143, 5143, 5143, 5143, 5143, 3279, 3279,
+     3279, 3279, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 3279,
+     3279, 3279, 3279, 3279, 5143, 3279, 5143, 5143, 5143, 5143,
+     5143, 5143, 3279, 4163, 4698, 3923, 4698, 4698, 4163, 4163,
+
+     4818, 4163, 4698, 4163, 4163, 4819, 4820, 4698, 4821, 4822,
+     4823, 4698, 4163, 4163, 4698, 4163, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4698, 4163, 4698, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4163, 4163,  784, 3660, 3660, 3660, 3660,  784, 1359,
+     2263,  784, 2264,  784, 1360, 1361, 2265, 2264, 2266, 3928,
+     2268, 1363,  784,  784, 2264,  784, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 2264,  784, 2264, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 1359,  784, 4914, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 4915, 5143, 5143, 5143, 5143, 5143, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 5143, 5143, 5143,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4163, 4772, 4886, 4772, 4772, 4163,
+     4851, 4163, 4163, 4163, 4163, 4772, 4772, 4164, 4163, 4163,
+     4887, 4163, 4851, 4163, 4163, 4163, 4163, 4851, 4851, 4851,
+     4851, 4851, 4851, 4851, 4851, 4163, 4163, 4163, 4851, 4851,
+     4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851, 4851,
+     4851, 4851, 4851, 4163, 4554, 4984, 4985, 4984, 4984, 4554,
+     4554, 4986, 4554, 4984, 4554, 4554, 4987, 4988, 4984, 4989,
+
+     5107, 4990, 4984, 4554, 4554, 4984, 4554, 4986, 4986, 4986,
+     4986, 4986, 4986, 4986, 4986, 4984, 4554, 4984, 4986, 4986,
+     4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986, 4986,
+     4986, 4986, 4554, 4554, 2228, 4992, 4979, 4992, 4992, 2228,
+     3817, 3576, 2228, 3253, 2228, 3818, 3819, 4533, 3253, 3579,
+     5108, 3581, 3821, 2228, 2228, 3253, 2228, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 3253, 2228, 3253, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 3817, 2228, 4926, 5143, 4927, 5143, 5143, 5143,
+     5143, 5143, 4928, 4928, 4928, 4928, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 4928, 4928, 4928, 4928, 4928, 5143, 4928,
+     5143, 5143, 5143, 5143, 5143, 5143, 4928, 1960, 3265, 3586,
+     3265, 3265, 1960, 1960, 3587, 1960, 3265, 1960, 1960, 3261,
+     3588, 3265, 3589, 5109, 3590, 3265, 1960, 1960, 3265, 1960,
+     3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3265, 1960,
+     3265, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587, 3587,
+     3587, 3587, 3587, 3587, 3587, 1960, 1960, 1588, 4553, 3663,
+     4553, 4553, 1588, 1588, 4715, 1588, 4716, 1588, 1588, 2769,
+     5110, 4716, 4718, 5111, 4720, 2430, 1588, 1588, 4716, 1588,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4716, 1588,
+
+     4716, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 1588, 1588, 1196, 1673, 1673,
+     1673, 1673, 1196, 1196, 1890, 1196, 1196, 1196, 1891, 1891,
+     1197, 1196, 1196, 1892, 1196, 1891, 1196, 1196, 1196, 1196,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1196, 1196,
+     1196, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1893, 1196, 4167, 5022, 5112,
+     5022, 5022, 4167, 4167, 5113, 4167, 5022, 4167, 4167, 5017,
+     5114, 5022, 5115, 5116, 5117, 5022, 4167, 4167, 5022, 4167,
+     5113, 5113, 5113, 5113, 5113, 5113, 5113, 5113, 5022, 4167,
+
+     5022, 5113, 5113, 5113, 5113, 5113, 5113, 5113, 5113, 5113,
+     5113, 5113, 5113, 5113, 5113, 4167, 4167, 1479, 4932, 4687,
+     4932, 4932, 1479, 2574, 2955, 1479, 2703, 1479, 2577, 2578,
+     5119, 2703, 2957, 5120, 2959, 2583, 1479, 1479, 2703, 1479,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 2703, 1479,
+     2703, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 2574, 1479, 2110, 5121, 4738,
+     5121, 5121, 2110, 2110, 5122, 2110, 5123, 2110, 2110, 4227,
+     5124, 5123, 5125, 5126, 5127, 4224, 2110, 2110, 5123, 2110,
+     5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5123, 2110,
+
+     5123, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5122, 5122, 5122, 5122, 2110, 2110, 4803, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4804, 5143, 5143,
+     5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 5143, 5143, 5143, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 4803, 4803, 4803, 4803, 4803, 4803, 4803, 4096, 4801,
+     4903, 4801, 4801, 4096, 4096, 4904, 4096, 4801, 4096, 4096,
+     4797, 4905, 4801, 4906, 5128, 4907, 4801, 4096, 4096, 4801,
+     4096, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4801,
+     4096, 4801, 4904, 4904, 4904, 4904, 4904, 4904, 4904, 4904,
+
+     4904, 4904, 4904, 4904, 4904, 4904, 4096, 4096, 1760, 4856,
+     4946, 4856, 4856, 1760, 3345, 3024, 1760, 3025, 1760, 3343,
+     4947, 4409, 3025, 3028, 5129, 3030, 4949, 1760, 1760, 3025,
+     1760, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 3025,
+     1760, 3025, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 3345, 1760, 4813, 5143,
+     4814, 5143, 5143, 5143, 5143, 5143, 4815, 4815, 4815, 4815,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 4815, 4815, 4815,
+     4815, 4815, 5143, 4815, 5143, 5143, 5143, 5143, 5143, 5143,
+     4815, 3592, 4364, 5130, 4364, 4364, 3592, 3592, 5131, 3592,
+
+     4364, 3592, 3592, 4359, 5132, 4364, 5133, 5134, 5135, 4364,
+     3592, 3592, 4364, 3592, 5131, 5131, 5131, 5131, 5131, 5131,
+     5131, 5131, 4364, 3592, 4364, 5131, 5131, 5131, 5131, 5131,
+     5131, 5131, 5131, 5131, 5131, 5131, 5131, 5131, 5131, 3592,
+     3592, 1588, 4553, 3663, 4553, 4553, 1588, 1588, 4838, 1588,
+     4716, 1588, 1588, 2769, 4717, 4716, 4718, 4719, 4839, 2430,
+     1588, 1588, 4716, 1588, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4716, 1588, 4716, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 1588,
+     1588, 2094, 4937, 4192, 4937, 4937, 2094, 2094, 4938, 2094,
+
+     4939, 2094, 2094, 3438, 4940, 4939, 4941, 5136, 4942, 3435,
+     2094, 2094, 4939, 2094, 4938, 4938, 4938, 4938, 4938, 4938,
+     4938, 4938, 4939, 2094, 4939, 4938, 4938, 4938, 4938, 4938,
+     4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 2094,
+     2094,  550, 3462, 3112, 3462, 3462,  550, 1390, 1156,  550,
+      967,  550, 1389, 3728, 3392,  967, 1159, 5137, 1161, 3730,
+      550,  550,  967,  550, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731,  967,  550,  967, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 1390,
+      550, 4717, 5143, 4847, 4719, 4848, 5143, 5143, 5143, 5143,
+
+     5143, 4849, 4849, 4849, 4849, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 4849, 4849, 4849, 4849, 4849, 5143, 4849, 5143,
+     5143, 5143, 5143, 5143, 5143, 4849, 3558, 4392, 2573, 4392,
+     4392, 3558, 3558, 4518, 3558, 4519, 3558, 3558, 4561, 5023,
+     4519, 4523, 5138, 4525, 4563, 3558, 3558, 4519, 3558, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4519, 3558, 4519,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 3558, 3558,  550, 3594, 3575, 3594,
+     3594,  550, 1390, 2076,  550, 2077,  550, 1389, 3728, 4200,
+     2077, 2079, 5140, 2081, 3730,  550,  550, 2077,  550, 3880,
+
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 2077,  550, 2077,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 1390,  550, 1588, 2430, 2768, 2430,
+     2430, 1588, 1588, 2755, 1588, 2430, 1588, 1588, 2769, 5033,
+     2430, 2759, 5141, 2761, 2430, 1588, 1588, 2430, 1588, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2430, 1588, 2430,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 1588, 1588,   59,   59,   59,   59,
+       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,   59,   59,   59,   61,   61,   61,   61,   61,   61,
+
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   82, 5143, 5143, 5143,
+     5143, 5143, 5143,   82, 5143,   82,   82,   88, 5143,   88,
+     5143,   88,  100, 5143, 5143, 5143, 5143, 5143, 5143,  100,
+     5143,  100,  100,  111,  111,  111, 5143, 5143,  111, 5143,
+
+      111, 5143,  111, 5143,  111, 5143, 5143,  111,  111,  115,
+      115,  115, 5143, 5143,  115,  115, 5143,  115,  115,  115,
+      115,  115, 5143,  115,  115,  125,  125,  125, 5143, 5143,
+      125, 5143, 5143, 5143, 5143, 5143,  125, 5143, 5143,  125,
+      125,  125,  130,  130,  130,  130,  130,  130,  130,  130,
+      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
+      132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
+     5143,  132,  132,  132,  132,  132,  132,  132,  134,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  134,  134,  140,  140,  140,  140,
+
+      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+      140,  140,  140,  140,  165, 5143, 5143, 5143, 5143, 5143,
+     5143,  165, 5143,  165,  165,  166,  166,  166, 5143, 5143,
+      166,  166, 5143,  166,  166,  166,  166,  166, 5143,  166,
+      166,  169,  169,  169, 5143,  169, 5143, 5143,  169,  169,
+     5143, 5143,  169, 5143, 5143,  169,  169,  169,  176,  176,
+      176, 5143, 5143,  176,  176, 5143,  176,  176,  176,  176,
+      176, 5143,  176,  176,  180,  180,  180,  180,  180,  180,
+      180,  180,  180,  180,  180,  180,  180,  180,  180,  180,
+      180,  180,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      184,  184,  184, 5143, 5143,  184, 5143, 5143, 5143, 5143,
+     5143,  184,  184, 5143,  184,  184,  184,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  213,
+
+      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
+      213,  213,  213,  213,  213,  213,  213,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  216,  216,  216, 5143, 5143,
+      216,  216, 5143,  216,  216,  216,  216,  216, 5143,  216,
+      216,  223,  223,  223,  223,  223,  223,  223,  223,  223,
+      223,  223,  223,  223,  223,  223,  223,  223,  223,  227,
+      227,  227,  227,  227,  227,  227,  227,  227,  227,  227,
+      227,  227,  227,  227,  227,  227,  227,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+
+      230,  230,  230,  230,  230,  232,  232,  232,  232,  232,
+      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
+      232,  232,  232,  246,  246,  246,  246,  246,  246,  246,
+      246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
+      246,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  251,  251,  251,
+      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
+      251,  251,  251,  251,  251,  255,  255,  255,  255,  255,
+
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  258,  258,  258,  258,  258,  258,  258,  258,  258,
+      258,  258,  258,  258,  258,  258,  258,  258,  258,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  262,  262,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262,  263,  263,  263,  263,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+
+      263,  263,  263,  267,  267,  267,  267,  267,  267,  267,
+      267,  267,  267,  267,  267,  267,  267,  267,  267,  267,
+      267,  272,  272, 5143,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  279,
+      279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
+      279,  279,  279,  279,  279,  279,  279,  281,  281,  281,
+      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
+      281,  281,  281,  281,  281,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  285,  285,  285,  285,  285,  285,  285,
+
+      285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+      285,  288,  288,  288,  288,  288,  288,  288,  288,  288,
+      288,  288,  288,  288,  288,  288,  288,  288,  288,  291,
+      291,  291, 5143, 5143,  291, 5143, 5143, 5143, 5143, 5143,
+      291, 5143, 5143,  291,  291,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  297, 5143, 5143, 5143, 5143,  297, 5143,
+     5143, 5143,  297, 5143, 5143, 5143, 5143,  297,  297,  300,
+      300, 5143,  300,  300,  300,  300,  300,  300,  300,  300,
+      300,  300,  300,  300,  300,  300,  300,  306,  306,  306,
+
+      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
+      306,  306,  306,  306,  306,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  320,  320,  320, 5143, 5143,  320, 5143,  320,  320,
+     5143, 5143,  320,  320, 5143,  320,  320,  320,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+
+      326,  326,  326,  326,  329, 5143, 5143, 5143, 5143, 5143,
+     5143,  329, 5143,  329,  329,  330, 5143,  330, 5143, 5143,
+      330, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,  330,
+      330,  360,  360,  360, 5143, 5143,  360, 5143,  360,  360,
+     5143, 5143,  360, 5143, 5143,  360,  360,  360,  361,  361,
+      361, 5143, 5143,  361, 5143,  361,  361, 5143, 5143,  361,
+      361, 5143,  361,  361,  361,  365,  365,  365,  365,  365,
+      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  370, 5143, 5143, 5143, 5143, 5143, 5143,
+      370, 5143,  370,  370,  371,  371, 5143,  371, 5143,  371,
+
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  372,  372, 5143,  372,  372,  372,  372,  372,
+      372,  372,  372,  372,  372,  372, 5143,  372,  372,  372,
+      111,  111,  111, 5143, 5143,  111, 5143, 5143, 5143,  111,
+     5143,  111, 5143, 5143,  111,  111,  258,  258,  258,  258,
+      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
+      258,  258,  258,  258,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  263,  263,  263,  263,  263,  263,  263,  263,
+      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
+
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  422,  422,
+      422, 5143, 5143,  422, 5143,  422,  422, 5143, 5143,  422,
+      422, 5143,  422,  422,  422,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  427,  427,  427,  427,  427,  427,  427,  427,  427,
+      427,  427,  427,  427,  427,  427,  427,  427,  427,  279,
+      279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
+
+      279,  279,  279,  279,  279,  279,  279,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  115,  115,  115, 5143, 5143,  115,  115,
+     5143,  115,  115,  115,  115,  115, 5143,  115,  115,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  255,  255,  255,  255,  255,
+
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  486,
+      486,  486,  486,  486,  486,  486,  486,  486,  486,  486,
+      486,  486,  486,  486,  486,  486,  486,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  491,  491,  491,  491,  491,
+      491,  491,  491,  491,  491,  491,  491,  491,  491,  491,
+
+      491,  491,  491,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  496,
+      496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+      496,  496,  496,  496,  496,  496,  496,  422,  422,  422,
+     5143, 5143,  422, 5143,  422,  422, 5143, 5143,  422,  422,
+     5143,  422,  422,  422,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  500,  500,  500,  500,  500,  500,  500,  500,
+
+      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  427,  427,  427,  427,
+      427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
+      427,  427,  427,  427,  294,  294,  294,  294,  294,  294,
+      294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
+      294,  294,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  508,  508,  508,  508,
+      508,  508,  508,  508,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  508,  306,  306,  306,  306,  306,  306,
+      306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
+      306,  306,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      514,  514,  514,  514,  514,  514,  514,  514,  514,  514,
+
+      514,  514,  514,  514,  514,  514,  514,  514,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  522,  522,  522,  522,  522,  522,  522,  522,
+      522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
+      115,  115,  115, 5143, 5143,  115,  115, 5143,  115,  115,
+      115,  115,  115, 5143,  115,  115,  533,  533,  533,  533,
+
+      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+      533,  533,  533,  533,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      176,  176,  176, 5143, 5143,  176,  176, 5143,  176,  176,
+      176,  176,  176, 5143,  176,  176,  309,  309,  309,  309,
+      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
+      309,  309,  309,  309,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+
+      550,  550,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  314,  314,  314,  314,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  314,
+      314,  314,  314,  314,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  561,  561,  561,  561,  561,  561,  561,  561,
+
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  568,  568,  568,  568,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  568,  568,  568,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  572,  572,  572,  572,  572,  572,  572,  572,
+      572,  572,  572,  572,  572,  572,  572,  572,  572,  572,
+
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  579,  579,
+      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
+      579,  579,  579,  579,  579,  579,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  583,  583,  583,  583,  583,  583,
+      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
+      583,  583,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+
+      434,  434,  434,  434,  434,  434,  434,  434,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  595,  595,  595,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  601,  601,
+
+      601,  601,  601,  601,  601,  601,  601,  601,  601,  601,
+      601,  601,  601,  601,  601,  601,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  611,  611,  611,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      611,  611,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+
+      617,  617,  617,  617,  617,  617,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  213,  213,  213,  213,  213,  213,
+      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
+      213,  213,  283,  283,  283,  283,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  636,  636,
+      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
+      636,  636,  636,  636,  636,  636,  639,  639,  639,  639,
+
+      639,  639,  639,  639,  639,  639,  639,  639,  639,  639,
+      639,  639,  639,  639,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
+      646,  646,  646,  646,  646,  646,  646,  646,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+
+      554,  554,  554,  554,  111,  111,  111, 5143, 5143,  111,
+     5143, 5143, 5143,  111, 5143,  111, 5143, 5143,  111,  111,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  653,  653,  653,  653,
+      653,  653,  653,  653,  653,  653,  653,  653,  653,  653,
+      653,  653,  653,  653,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  657,  657,  657,  657,  657,  657,  657,  657,
+
+      657,  657,  657,  657,  657,  657,  657,  657,  657,  657,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  666,  666,  666,  666,  666,  666,  666,  666,
+      666,  666,  666,  666,  666,  666,  666,  666,  666,  666,
+
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  572,  572,
+      572,  572,  572,  572,  572,  572,  572,  572,  572,  572,
+      572,  572,  572,  572,  572,  572,  125,  125,  125, 5143,
+     5143,  125, 5143, 5143, 5143, 5143, 5143,  125, 5143, 5143,
+      125,  125,  125,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  579,
+      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
+
+      579,  579,  579,  579,  579,  579,  579,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  688,  688,  688,  688,  688,  688,  688,  688,  688,
+      688,  688,  688,  688,  688,  688,  688,  688,  688,  232,
+      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
+      232,  232,  232,  232,  232,  232,  232,  206,  206,  206,
+
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+
+      701,  701,  701,  701,  701,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  707,  707,  707,  707,  707,  707,  707,
+      707,  707,  707,  707,  707,  707,  707,  707,  707,  707,
+      707,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  734,  734,  734,  734,  734,
+
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  115,
+      115,  115, 5143, 5143,  115,  115, 5143,  115,  115,  115,
+      115,  115, 5143,  115,  115,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+
+      255,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  788,  788,  788,  788,  788,  788,  788,  788,  788,
+
+      788,  788,  788,  788,  788,  788,  788,  788,  788,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  554,  554,  554,  554,  554,  554,  554,
+      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
+      554,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  559,
+
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  804,  804,  804,  804,  804,
+      804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
+      804,  804,  804,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      262,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+
+      660,  660,  660,  660,  660,  660,  660,  125,  125,  125,
+     5143, 5143,  125, 5143, 5143, 5143, 5143, 5143,  125, 5143,
+     5143,  125,  125,  125,  816,  816,  816,  816,  816,  816,
+      816,  816,  816,  816,  816,  816,  816,  816,  816,  816,
+      816,  816,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  666,  666,  666,  666,
+
+      666,  666,  666,  666,  666,  666,  666,  666,  666,  666,
+      666,  666,  666,  666,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  427,  427,
+      427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
+      427,  427,  427,  427,  427,  427,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+
+      838,  838,  838,  838,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      688,  688,  688,  688,  688,  688,  688,  688,  688,  688,
+      688,  688,  688,  688,  688,  688,  688,  688,  232,  232,
+      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
+      232,  232,  232,  232,  232,  232,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  434,  434,  434,  434,  434,  434,
+
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  169,  169,  169, 5143,
+      169, 5143, 5143,  169,  169, 5143, 5143,  169, 5143, 5143,
+      169,  169,  169,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+
+      250,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  874,  874,  874,
+      874,  874,  874,  874,  874,  874,  874,  874,  874,  874,
+      874,  874,  874,  874,  874,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  115,  115,  115, 5143, 5143,  115,  115, 5143,  115,
+      115,  115,  115,  115, 5143,  115,  115,  536,  536,  536,
+
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  176,  176,  176, 5143, 5143,
+      176,  176, 5143,  176,  176,  176,  176,  176, 5143,  176,
+      176,  944,  944,  944,  944,  944,  944,  944,  944,  944,
+      944,  944,  944,  944,  944,  944,  944,  944,  944,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+
+      257,  257,  257,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  957,  957,  957,  957,  957,  957,  957,  957,  957,
+      957,  957,  957,  957,  957,  957,  957,  957,  957,  959,
+      959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
+      959,  959,  959,  959,  959,  959,  959,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  550,  550,  550,  550,  550,  550,  550,
+
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  793,  793,  793,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  793,  793,  793,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  804,  804,  804,  804,  804,  804,  804,
+      804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
+
+      804,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  992,  992,  992,
+      992,  992,  992,  992,  992,  992,  992,  992,  992,  992,
+      992,  992,  992,  992,  992,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  994,  994,  994,  994,  994,  994,  994,
+      994,  994,  994,  994,  994,  994,  994,  994,  994,  994,
+      994,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+
+      494,  494,  494,  494,  494,  494,  494,  494,  494, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  424, 1014, 1014, 1014, 1014, 1014, 1014, 1014,
+     1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014,
+     1014, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,  838,
+
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838, 1019, 1019, 1019,
+     1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
+     1019, 1019, 1019, 1019, 1019,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  232,  232,  232,  232,  232,  232,  232,
+      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
+      232,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+
+      434,  434,  434,  434,  434,  434,  434,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  169,  169,  169, 5143,  169, 5143, 5143,  169,  169,
+     5143, 5143,  169, 5143, 5143,  169,  169,  169,  176,  176,
+      176, 5143, 5143,  176,  176, 5143,  176,  176,  176,  176,
+      176, 5143,  176,  176,  166,  166,  166, 5143, 5143,  166,
+
+      166, 5143,  166,  166,  166,  166,  166, 5143,  166,  166,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215, 1067, 1067, 1067, 1067,
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+     1067, 1067, 1067, 1067,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069,
+     1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069,
+
+     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078,
+     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+
+      946,  946,  946,  946,  946,  946,  946,  946,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  213,  213,  213,  213,
+      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
+      213,  213,  213,  213,  533,  533,  533,  533,  533,  533,
+      533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
+      533,  533, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+     1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133, 1133,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  784,  784,
+
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  959,  959,  959,  959,
+      959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
+      959,  959,  959,  959,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  962,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      793,  793,  793,  793,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  793,  793,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+
+      550,  550,  550,  550,  550,  550,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563, 1178, 1178, 1178, 1178,
+
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+
+      420,  420,  420,  420,  572,  572,  572,  572,  572,  572,
+      572,  572,  572,  572,  572,  572,  572,  572,  572,  572,
+      572,  572,  579,  579,  579,  579,  579,  579,  579,  579,
+      579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1017, 1017, 1017, 1017, 1017, 1017,
+
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+     1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838, 1206, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206,  230,  230,  230,  230,
+      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
+      230,  230,  230,  230,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+
+      503,  503,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      589,  589,  589,  589,  589,  589,  589,  589,  589,  589,
+      589,  589,  589,  589,  589,  589,  589,  589,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+      601,  601,  601,  601,  601,  601,  601,  601,  601,  601,
+      601,  601,  601,  601,  601,  601,  601,  601, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
+     1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
+
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784, 1252, 1252, 1252, 1252,
+     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
+     1252, 1252, 1252, 1252, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+     1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+
+      517,  517,  517,  517,  517,  517,  517,  517,  216,  216,
+      216, 5143, 5143,  216,  216, 5143,  216,  216,  216,  216,
+      216, 5143,  216,  216,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946, 1334, 1334, 1334, 1334,
+
+     1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
+     1334, 1334, 1334, 1334,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  182,  182,  182,  182,
+      182,  182,  182,  182,  182,  182,  182,  182,  182,  182,
+
+      182,  182,  182,  182,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  660, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406,  992,  992,  992,  992,
+      992,  992,  992,  992,  992,  992,  992,  992,  992,  992,
+      992,  992,  992,  992, 1409, 1409, 1409, 1409, 1409, 1409,
+
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
+     1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818, 1180, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180,  187,  187,  187,  187,  187,  187,
+      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+
+      187,  187,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      666,  666,  666,  666,  666,  666,  666,  666,  666,  666,
+      666,  666,  666,  666,  666,  666,  666,  666, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1422, 1422, 1422, 1422,
+     1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
+     1422, 1422, 1422, 1422, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426,
+
+     1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1430, 1430,
+     1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430,
+     1430, 1430, 1430, 1430, 1430, 1430, 1433, 1433, 1433, 1433,
+     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
+     1433, 1433, 1433, 1433,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+
+     1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+     1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838, 1206, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206,  291,  291,  291, 5143, 5143,  291,
+     5143, 5143, 5143, 5143, 5143,  291, 5143, 5143,  291,  291,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  688,  688,
+      688,  688,  688,  688,  688,  688,  688,  688,  688,  688,
+
+      688,  688,  688,  688,  688,  688,  503,  503,  503,  503,
+      503,  503,  503,  503,  503,  503,  503,  503,  503,  503,
+      503,  503,  503,  503,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
+      701,  701,  701,  701,  701,  701,  701,  701,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  710,  710,  710,  710,
+
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+
+     1234, 1234, 1234, 1234, 1466, 1466, 1466, 1466, 1466, 1466,
+     1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466,
+     1466, 1466, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+     1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876, 1249, 1249, 1249, 1249,
+     1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
+     1249, 1249, 1249, 1249,  784,  784,  784,  784,  784,  784,
+
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  959,  959,  959,  959,  959,  959,  959,  959,
+      959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1485, 1485,
+     1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485,
+     1485, 1485, 1485, 1485, 1485, 1485,  213,  213,  213,  213,
+      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
+      213,  213,  213,  213,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+
+      517,  517,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1521, 1521, 1521, 1521,
+     1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+     1521, 1521, 1521, 1521,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+
+     1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452, 1538, 1538,
+     1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538,
+     1538, 1538, 1538, 1538, 1538, 1538,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946, 1334, 1334, 1334, 1334, 1334, 1334,
+     1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
+     1334, 1334,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786,  786, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
+
+      804,  804,  804,  804,  804,  804,  804,  804,  559,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1628, 1628, 1628, 1628, 1628, 1628,
+     1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628,
+     1628, 1628, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634,
+     1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1178, 1178,
+
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1638, 1638, 1638, 1638,
+     1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+     1638, 1638, 1638, 1638,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647,
+     1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1649, 1649,
+     1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649,
+
+     1649, 1649, 1649, 1649, 1649, 1649,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494, 1653, 1653, 1653, 1653, 1653, 1653,
+     1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653,
+     1653, 1653, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657,
+     1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1664, 1664,
+     1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
+     1664, 1664, 1664, 1664, 1664, 1664, 1196, 1196, 1196, 1196,
+
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1433, 1433, 1433, 1433, 1433, 1433,
+     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
+     1433, 1433, 1671, 1671, 1671, 5143, 5143, 1671, 5143, 1671,
+     1671, 5143, 5143, 1671, 5143, 5143, 1671, 1671, 1671, 1678,
+     1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+     1678, 1678, 1678, 1678, 1678, 1678, 1678, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+
+     1017, 1017, 1017, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+     1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+     1440,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  208,  208,  208,  208,  208,  208,  208,
+
+      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
+      208, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1697,
+     1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697,
+     1697, 1697, 1697, 1697, 1697, 1697, 1697, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1705, 1705, 1705, 1705, 1705,
+     1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705,
+     1705, 1705, 1705, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+
+     1234, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1723,
+     1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723,
+     1723, 1723, 1723, 1723, 1723, 1723, 1723, 1249, 1249, 1249,
+     1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
+     1249, 1249, 1249, 1249, 1249, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485,
+     1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1733,
+
+     1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733,
+     1733, 1733, 1733, 1733, 1733, 1733, 1733, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
+     1735, 1735, 1735,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,
+     1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742,  213,
+      213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
+
+      213,  213,  213,  213,  213,  213,  213, 1756, 1756, 1756,
+     1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756,
+     1756, 1756, 1756, 1756, 1756, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
+     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  452,  452,  452,
+
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  617,  617,  617,  617,  617,
+      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
+      617,  617,  617, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+     1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535,
+     1535, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
+     1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946, 1798, 1798, 1798,
+     1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798,
+
+     1798, 1798, 1798, 1798, 1798, 1812, 1812, 1812, 1812, 1812,
+     1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
+     1812, 1812, 1812,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  959,  959,  959,  959,  959,  959,  959,  959,  959,
+      959,  959,  959,  959,  959,  959,  959,  959,  959, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1252, 1252, 1252,
+     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
+     1252, 1252, 1252, 1252, 1252, 1818, 1818, 1818, 1818, 1818,
+
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1823,
+     1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+     1823, 1823, 1823, 1823, 1823, 1823, 1823,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+
+      641,  641,  641,  962,  962,  962,  962,  962,  962,  962,
+      962,  962,  962,  962,  962,  962,  962,  962,  962,  962,
+      962, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1843,
+     1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843,
+     1843, 1843, 1843, 1843, 1843, 1843, 1843,  414,  414,  414,
+      414,  414,  414,  414,  414,  414,  414,  414,  414,  414,
+      414,  414,  414,  414,  414, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848,  260,  260,  260,  260,  260,  260,  260,  260,  260,
+      260,  260,  260,  260,  260,  260,  260,  260,  260, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+
+     1178, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+     1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,  125,
+      125,  125, 5143, 5143,  125, 5143, 5143, 5143, 5143, 5143,
+      125, 5143, 5143,  125,  125,  125,  189,  189,  189,  189,
+      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
+      189,  189,  189,  189,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  563,  563,  563,  563,  563,  563,  563,  563,
+      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868,
+
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1874, 1874, 1874, 1874,
+     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
+     1874, 1874, 1874, 1874, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
+     1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
+      360,  360,  360, 5143, 5143,  360, 5143,  360,  360, 5143,
+     5143,  360, 5143, 5143,  360,  360,  360,  426,  426,  426,
+
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  361,  361,  361, 5143, 5143,
+      361, 5143,  361,  361, 5143, 5143,  361,  361, 5143,  361,
+      361,  361, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1901, 1901, 1901, 1901,
+     1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901,
+
+     1901, 1901, 1901, 1901, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+      838,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  434,  434,
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434,  434, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1921, 1921, 1921, 1921, 1921, 1921,
+
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
+     1921, 1921,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+
+     1711, 1711,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
+      255,  255,  255,  255, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967,
+     1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876, 1485, 1485, 1485, 1485,
+     1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485,
+     1485, 1485, 1485, 1485, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+
+      601,  601,  601,  601,  601,  601,  601,  601,  601,  601,
+      601,  601,  601,  601,  601,  601,  601,  601, 1974, 1974,
+     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+     1974, 1974, 1974, 1974, 1974, 1974, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
+     1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      734,  734, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004,
+     2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1711, 1711,
+
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 2064, 2064,
+     2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
+
+     2064, 2064, 2064, 2064, 2064, 2064,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  776,  776,  776,  776,  776,  776,
+      776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
+      776,  776, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082,
+     2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 2088, 2088, 2088, 2088,
+
+     2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088,
+     2088, 2088, 2088, 2088, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+     2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+     2099, 2099, 2099, 2099, 2099, 2099, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+
+     1841, 1841, 1841, 1841, 2101, 2101, 2101, 2101, 2101, 2101,
+     2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101,
+     2101, 2101,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+     2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107,
+     2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2110, 2110,
+     2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+     2110, 2110, 2110, 2110, 2110, 2110, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1848, 1848, 1848, 1848, 1848, 1848,
+
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848, 1848,  125,  125,  125, 5143, 5143,  125, 5143, 5143,
+     5143, 5143, 5143,  125, 5143, 5143,  125,  125,  125, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 2128, 2128, 2128,
+     2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+     2128, 2128, 2128, 2128, 2128, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+
+     1409,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857,  262,  262,  262,
+      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
+      262,  262,  262,  262,  262, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
+     1180,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+
+      559,  559,  559,  559,  559,  559,  559,  559,  559, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1874, 1874, 1874,
+     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
+     1874, 1874, 1874, 1874, 1874, 2149, 2149, 2149, 2149, 2149,
+     2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149,
+     2149, 2149, 2149,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,  426,
+
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+      426,  426,  426,  426,  426,  426,  426, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 1433,
+     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
+
+     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 2165, 2165, 2165, 2165, 2165,
+     2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+     2165, 2165, 2165, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  838, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
+     1206, 1206, 1206, 1206, 1206, 1206, 1206,  434,  434,  434,
+
+      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
+      434,  434,  434,  434,  434, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
+     1921, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 2196,
+     2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196,
+     2196, 2196, 2196, 2196, 2196, 2196, 2196, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+
+     1726, 1726, 1726, 1726, 1726, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 2226, 2226, 2226, 2226, 2226,
+
+     2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226,
+     2226, 2226, 2226, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257, 2231, 2231, 2231,
+     2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+     2231, 2231, 2231, 2231, 2231, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+
+     1970, 1970, 1970, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
+     2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234,
+     2234, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1987, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  601,
+      601,  601,  601,  601,  601,  601,  601,  601,  601,  601,
+      601,  601,  601,  601,  601,  601,  601,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+     2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+
+     2286, 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,
+     2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310, 2310,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 2393, 2393, 2393, 2393, 2393, 2393, 2393,
+     2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393,
+     2393,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248, 1818,
+
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 2407, 2407, 2407,
+     2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+     2407, 2407, 2407, 2407, 2407, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+     2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+     2094,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+
+      784,  784,  784,  784,  784,  784,  784,  786,  786,  786,
+      786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
+      786,  786,  786,  786,  786, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 2427,
+     2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427,
+     2427, 2427, 2427, 2427, 2427, 2427, 2427, 1080, 1080, 1080,
+
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  992,
+      992,  992,  992,  992,  992,  992,  992,  992,  992,  992,
+      992,  992,  992,  992,  992,  992,  992, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+
+     2130, 2130, 2130, 2130, 2130, 2450, 2450, 2450, 2450, 2450,
+     2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450,
+     2450, 2450, 2450, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 2466,
+     2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+     2466, 2466, 2466, 2466, 2466, 2466, 2466, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 2475, 2475, 2475, 2475, 2475,
+
+     2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475,
+     2475, 2475, 2475, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
+     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+
+     2487, 2487, 2487, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+     2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 2165, 2165, 2165,
+     2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+     2165, 2165, 2165, 2165, 2165,  324,  324,  324,  324,  324,
+      324,  324,  324,  324,  324,  324,  324,  324,  324,  324,
+      324,  324,  324, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+     1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2505, 2505, 2505,
+     2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505,
+     2505, 2505, 2505, 2505, 2505, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+     1458,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599, 1067,
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067,
+     1067, 1067, 1067, 1067, 1067, 1067, 1067, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1476,
+     1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+     1476, 1476, 1476, 1476, 1476, 1476, 1476, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2571, 2571, 2571, 2571, 2571,
+     2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571,
+     2571, 2571, 2571, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+     2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 1970,
+
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 2586, 2586, 2586,
+     2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+     2586, 2586, 2586, 2586, 2586, 2604, 2604, 2604, 2604, 2604,
+     2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+     2604, 2604, 2604,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+
+     1504, 1504, 1504, 1504, 1504, 1504, 1504,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 2665, 2665, 2665, 2665, 2665, 2665, 2665,
+     2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665, 2665,
+     2665, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2286,
+     2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+     2286, 2286, 2286, 2286, 2286, 2286, 2286, 1291, 1291, 1291,
+
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+     2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2688,
+     2688, 2688, 2688, 2688, 2688, 2688, 2688, 2688, 2688, 2688,
+     2688, 2688, 2688, 2688, 2688, 2688, 2688,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+
+      876,  876,  876,  876,  876, 2694, 2694, 2694, 2694, 2694,
+     2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694,
+     2694, 2694, 2694, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2698, 2698, 2698, 2698, 2698, 2698, 2698, 2698, 2698,
+     2698, 2698, 2698, 2698, 2698, 2698, 2698, 2698, 2698,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946, 2715, 2715, 2715,
+     2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715,
+     2715, 2715, 2715, 2715, 2715,  536,  536,  536,  536,  536,
+
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393,
+     2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 2746, 2746, 2746,
+     2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746, 2746,
+     2746, 2746, 2746, 2746, 2746, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+
+     1970, 1970, 1970, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+     2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,  250,
+      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
+      250,  250,  250,  250,  250,  250,  250, 2094, 2094, 2094,
+     2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+     2094, 2094, 2094, 2094, 2094, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 2427, 2427, 2427, 2427, 2427, 2427, 2427,
+
+     2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427,
+     2427, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779,
+     2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
+
+     1001, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788,
+     2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1638, 1638, 1638, 1638, 1638,
+     1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
+     1638, 1638, 1638,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802,
+
+     2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1657, 1657, 1657,
+     1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657,
+     1657, 1657, 1657, 1657, 1657, 1664, 1664, 1664, 1664, 1664,
+     1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
+     1664, 1664, 1664, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2813,
+
+     2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813, 2813,
+     2813, 2813, 2813, 2813, 2813, 2813, 2813, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2819, 2819, 2819, 2819, 2819,
+     2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819,
+     2819, 2819, 2819, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
+     2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2832,
+     2832, 2832, 2832, 2832, 2832, 2832, 2832, 2832, 2832, 2832,
+
+     2832, 2832, 2832, 2832, 2832, 2832, 2832, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2836, 2836, 2836, 2836, 2836,
+     2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836,
+     2836, 2836, 2836, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840,
+     2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2844,
+     2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
+     2844, 2844, 2844, 2844, 2844, 2844, 2844, 1458, 1458, 1458,
+
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+
+     1234, 1234, 1234, 1234, 1234, 2903, 2903, 2903, 2903, 2903,
+     2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903, 2903,
+     2903, 2903, 2903, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946, 2937,
+     2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937,
+     2937, 2937, 2937, 2937, 2937, 2937, 2937, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1970, 1970, 1970, 1970, 1970,
+
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+     2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+     2586, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 2969, 2969, 2969,
+     2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+     2969, 2969, 2969, 2969, 2969, 2979, 2979, 2979, 2979, 2979,
+     2979, 2979, 2979, 2979, 2979, 2979, 2979, 2979, 2979, 2979,
+
+     2979, 2979, 2979, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 3016, 3016, 3016, 3016, 3016, 3016, 3016, 3016, 3016,
+     3016, 3016, 3016, 3016, 3016, 3016, 3016, 3016, 3016, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 2286, 2286, 2286,
+     2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+     2286, 2286, 2286, 2286, 2286, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093,  517,  517,  517,  517,  517,  517,  517,
+
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756,
+     1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1762,
+     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
+     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+
+      215, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037,
+     3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946, 3051, 3051, 3051,
+     3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051,
+     3051, 3051, 3051, 3051, 3051,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
+     1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
+     1812, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 3061,
+     3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061,
+     3061, 3061, 3061, 3061, 3061, 3061, 3061, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
+     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1818,
+
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 2427, 2427, 2427, 2427, 2427, 2427, 2427,
+     2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427, 2427,
+     2427, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+
+      257,  257,  257,  257,  257,  257,  257, 3122, 3122, 3122,
+     3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122,
+     3122, 3122, 3122, 3122, 3122, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2788,
+     2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788,
+     2788, 2788, 2788, 2788, 2788, 2788, 2788, 1409, 1409, 1409,
+
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857,
+     1857, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475,
+     2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 1868,
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868,
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+
+     1420, 1420, 1420, 1420, 1420, 1874, 1874, 1874, 1874, 1874,
+     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
+     1874, 1874, 1874, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,  424,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
+      424,  424,  424,  424,  424,  424,  424, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 3146, 3146, 3146, 3146, 3146,
+
+     3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
+     3146, 3146, 3146, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
+     2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 1671,
+     1671, 1671, 5143, 5143, 1671, 5143, 1671, 1671, 5143, 5143,
+     1671, 5143, 5143, 1671, 1671, 1671,  326,  326,  326,  326,
+      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
+      326,  326,  326,  326, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+
+     1680, 1680, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+     1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 3159, 3159,
+     3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159,
+     3159, 3159, 3159, 3159, 3159, 3159, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 3164, 3164, 3164, 3164, 3164, 3164,
+     3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164,
+     3164, 3164, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
+     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
+
+     2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+     2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215, 3242, 3242, 3242, 3242,
+     3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242,
+     3242, 3242, 3242, 3242, 3250, 3250, 3250, 3250, 3250, 3250,
+     3250, 3250, 3250, 3250, 3250, 3250, 3250, 3250, 3250, 3250,
+     3250, 3250, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937,
+
+     2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1458, 1458,
+
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288,
+     3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+
+     1504, 1504, 1504, 1504, 1504, 1504,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
+     3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3323, 3323,
+     3323, 3323, 3323, 3323, 3323, 3323, 3323, 3323, 3323, 3323,
+     3323, 3323, 3323, 3323, 3323, 3323, 2228, 2228, 2228, 2228,
+
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+     3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370,
+     3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+
+      946,  946,  946,  946, 2064, 2064, 2064, 2064, 2064, 2064,
+     2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
+     2064, 2064, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1818, 1818, 1818, 1818, 1818, 1818,
+
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     3428, 3428, 3428, 3428, 3428, 3428, 3428, 3428, 3428, 3428,
+     3428, 3428, 3428, 3428, 3428, 3428, 3428, 3428, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 2110, 2110, 2110, 2110,
+     2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+     2110, 2110, 2110, 2110, 2094, 2094, 2094, 2094, 2094, 2094,
+     2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
+
+     2094, 2094, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
+     3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2802, 2802, 2802, 2802,
+     2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802,
+     2802, 2802, 2802, 2802, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 3477, 3477, 3477, 3477, 3477, 3477, 3477, 3477,
+
+     3477, 3477, 3477, 3477, 3477, 3477, 3477, 3477, 3477, 3477,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 1671, 1671, 1671, 5143, 5143, 1671, 5143, 1671,
+     1671, 5143, 5143, 1671, 5143, 5143, 1671, 1671, 1671, 1909,
+
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 3490, 3490, 3490,
+     3490, 3490, 3490, 3490, 3490, 3490, 3490, 3490, 3490, 3490,
+     3490, 3490, 3490, 3490, 3490, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
+     3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,  426,
+      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
+
+      426,  426,  426,  426,  426,  426,  426, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2165, 2165, 2165, 2165, 2165,
+     2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
+     2165, 2165, 2165, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 3164,
+     3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164,
+     3164, 3164, 3164, 3164, 3164, 3164, 3164, 3517, 3517, 3517,
+
+     3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517,
+     3517, 3517, 3517, 3517, 3517, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 3520, 3520, 3520, 3520, 3520, 3520, 3520,
+     3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520,
+     3520, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 3524,
+     3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524,
+     3524, 3524, 3524, 3524, 3524, 3524, 3524, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+     1093, 1093, 1093, 1093, 1093, 3538, 3538, 3538, 3538, 3538,
+     3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
+     3538, 3538, 3538, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+     2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+     2969, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599, 3554, 3554, 3554,
+     3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554,
+     3554, 3554, 3554, 3554, 3554, 3558, 3558, 3558, 3558, 3558,
+
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711,
+     1711, 1711, 1711, 1711, 1711, 1711, 1711, 3242, 3242, 3242,
+     3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242, 3242,
+     3242, 3242, 3242, 3242, 3242, 3061, 3061, 3061, 3061, 3061,
+     3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061,
+
+     3061, 3061, 3061, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+     3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+     3592, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 2231,
+     2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231,
+     2231, 2231, 2231, 2231, 2231, 2231, 2231, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+     2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 3602,
+     3602, 3602, 3602, 3602, 3602, 3602, 3602, 3602, 3602, 3602,
+     3602, 3602, 3602, 3602, 3602, 3602, 3602, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 3615, 3615, 3615, 3615, 3615, 3615, 3615,
+     3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615,
+
+     3615, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  710,  710,  710,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
+      710,  710,  710,  710,  710, 3370, 3370, 3370, 3370, 3370,
+     3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370,
+     3370, 3370, 3370, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
+     3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622,
+     3622, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 2393,
+
+     2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393,
+     2393, 2393, 2393, 2393, 2393, 2393, 2393, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 2407, 2407, 2407, 2407, 2407,
+     2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407,
+     2407, 2407, 2407, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+     2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 3122,
+     3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122,
+
+     3122, 3122, 3122, 3122, 3122, 3122, 3122,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1848, 1848, 1848,
+
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848, 1848, 1848, 1848, 1848, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130,  818,  818,  818,  818,  818,  818,  818,
+      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
+      818,  494,  494,  494,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  494,  494,  494,  494,  494,  494, 3744,
+     3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744,
+     3744, 3744, 3744, 3744, 3744, 3744, 3744, 3749, 3749, 3749,
+     3749, 3749, 3749, 3749, 3749, 3749, 3749, 3749, 3749, 3749,
+
+     3749, 3749, 3749, 3749, 3749, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
+     1196, 1196, 1196, 1196, 1196, 1196, 1196, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
+     1899, 1899, 1899, 1899, 1899, 3492, 3492, 3492, 3492, 3492,
+
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3761, 3761, 3761, 3761, 3761, 3761, 3761,
+     3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3761,
+     3761, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 3779, 3779, 3779,
+     3779, 3779, 3779, 3779, 3779, 3779, 3779, 3779, 3779, 3779,
+     3779, 3779, 3779, 3779, 3779, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+
+     2501, 2501, 2501, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
+     3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
+     3789, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1921,
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
+     1921, 1921, 1921, 1921, 1921, 1921, 1921, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 3321, 3321, 3321, 3321, 3321,
+     3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
+     3321, 3321, 3321, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937,
+     1937, 1937, 1937, 1937, 1937, 3837, 3837, 3837, 3837, 3837,
+     3837, 3837, 3837, 3837, 3837, 3837, 3837, 3837, 3837, 3837,
+     3837, 3837, 3837,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+
+      876, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228,  257,  257,  257,  257,  257,  257,  257,
+      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
+      257, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 2586, 2586, 2586,
+     2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+     2586, 2586, 2586, 2586, 2586, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
+      517, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 3520,
+
+     3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520,
+     3520, 3520, 3520, 3520, 3520, 3520, 3520, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1987, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987,
+     1987, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+
+      215,  215,  215,  215,  215,  215,  215, 3615, 3615, 3615,
+     3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615,
+     3615, 3615, 3615, 3615, 3615, 2937, 2937, 2937, 2937, 2937,
+     2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937, 2937,
+     2937, 2937, 2937, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906,
+     3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 3906, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 3920, 3920, 3920,
+
+     3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+     3920, 3920, 3920, 3920, 3920,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957,
+     3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 3961, 3961, 3961,
+     3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961,
+
+     3961, 3961, 3961, 3961, 3961, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 3288, 3288, 3288, 3288, 3288, 3288, 3288,
+     3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288,
+     3288, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 3975,
+     3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975, 3975,
+     3975, 3975, 3975, 3975, 3975, 3975, 3975, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841,  550,  550,  550,  550,  550,
+
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788,
+     2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  559,  559,  559,  559,  559, 3985, 3985, 3985,
+     3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985,
+     3985, 3985, 3985, 3985, 3985, 3988, 3988, 3988, 3988, 3988,
+     3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988, 3988,
+
+     3988, 3988, 3988, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1848,
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848,
+     1848, 1848, 1848, 1848, 1848, 1848, 1848, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1657, 1657, 1657, 1657, 1657,
+     1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657,
+     1657, 1657, 1657, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
+     1909, 1909, 1909, 1909, 1909, 1909, 1909, 4000, 4000, 4000,
+     4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+     4000, 4000, 4000, 4000, 4000, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+
+     2163, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823,
+     2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 2823, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2844, 2844, 2844, 2844, 2844,
+     2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
+     2844, 2844, 2844, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,  641,
+
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4101, 4101, 4101, 4101, 4101,
+     4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101, 4101,
+     4101, 4101, 4101, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 4116,
+     4116, 4116, 4116, 4116, 4116, 4116, 4116, 4116, 4116, 4116,
+
+     4116, 4116, 4116, 4116, 4116, 4116, 4116, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148,
+     4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 4148, 3370,
+     3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370, 3370,
+     3370, 3370, 3370, 3370, 3370, 3370, 3370, 4163, 4163, 4163,
+
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167,
+     4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 2286, 2286, 2286,
+     2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
+
+     2286, 2286, 2286, 2286, 2286, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018,  784,  784,  784,  784,  784,  784,  784,
+      784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
+      784, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037,
+     3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3051,
+     3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051,
+     3051, 3051, 3051, 3051, 3051, 3051, 3051,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  536,  536,  536,  536,  536,
+
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393,
+     2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080,
+     1080, 1080, 1080, 1080, 1080, 1080, 1080, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588,  641,  641,  641,  641,  641,
+      641,  641,  641,  641,  641,  641,  641,  641,  641,  641,
+
+      641,  641,  641, 3957, 3957, 3957, 3957, 3957, 3957, 3957,
+     3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957,
+     3957, 4237, 4237, 4237, 4237, 4237, 4237, 4237, 4237, 4237,
+     4237, 4237, 4237, 4237, 4237, 4237, 4237, 4237, 4237, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130,
+     2130, 2130, 2130, 2130, 2130, 2130, 2130, 4240, 4240, 4240,
+     4240, 4240, 4240, 4240, 4240, 4240, 4240, 4240, 4240, 4240,
+     4240, 4240, 4240, 4240, 4240, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
+     1178, 1178, 1178, 2475, 2475, 2475, 2475, 2475, 2475, 2475,
+
+     2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475, 2475,
+     2475, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561, 1868, 1868, 1868,
+     1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868,
+     1868, 1868, 1868, 1868, 1868, 4245, 4245, 4245, 4245, 4245,
+     4245, 4245, 4245, 4245, 4245, 4245, 4245, 4245, 4245, 4245,
+     4245, 4245, 4245, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+
+     2484, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 4000, 4000, 4000,
+     4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+     4000, 4000, 4000, 4000, 4000, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
+     3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146, 3146,
+     3146, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
+
+     3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3159,
+     3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159,
+     3159, 3159, 3159, 3159, 3159, 3159, 3159, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 3164, 3164, 3164, 3164, 3164,
+     3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164, 3164,
+     3164, 3164, 3164, 4266, 4266, 4266, 4266, 4266, 4266, 4266,
+     4266, 4266, 4266, 4266, 4266, 4266, 4266, 4266, 4266, 4266,
+     4266, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 4281,
+
+     4281, 4281, 4281, 4281, 4281, 4281, 4281, 4281, 4281, 4281,
+     4281, 4281, 4281, 4281, 4281, 4281, 4281, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320, 4320,
+     4320, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 4323,
+     4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
+
+     4323, 4323, 4323, 4323, 4323, 4323, 4323, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 4339, 4339, 4339, 4339, 4339,
+     4339, 4339, 4339, 4339, 4339, 4339, 4339, 4339, 4339, 4339,
+     4339, 4339, 4339, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 2677, 2677, 2677,
+
+     2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677, 2677,
+     2677, 2677, 2677, 2677, 2677,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
+     2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 4346,
+     4346, 4346, 4346, 4346, 4346, 4346, 4346, 4346, 4346, 4346,
+     4346, 4346, 4346, 4346, 4346, 4346, 4346, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+     1093, 1093, 1093, 1093, 1093, 4350, 4350, 4350, 4350, 4350,
+     4350, 4350, 4350, 4350, 4350, 4350, 4350, 4350, 4350, 4350,
+     4350, 4350, 4350, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 4365, 4365, 4365, 4365, 4365, 4365, 4365, 4365, 4365,
+     4365, 4365, 4365, 4365, 4365, 4365, 4365, 4365, 4365, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1974, 1974, 1974,
+     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+     1974, 1974, 1974, 1974, 1974, 4368, 4368, 4368, 4368, 4368,
+
+     4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368, 4368,
+     4368, 4368, 4368, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4386, 4386, 4386,
+     4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386, 4386,
+     4386, 4386, 4386, 4386, 4386, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+
+     1841, 1841, 1841, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 4423, 4423, 4423,
+     4423, 4423, 4423, 4423, 4423, 4423, 4423, 4423, 4423, 4423,
+     4423, 4423, 4423, 4423, 4423,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  550,  550,  550,  550,  550,  550,  550,
+
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,  512,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      512,  512,  512,  512,  512,  512,  512, 4462, 4462, 4462,
+     4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462, 4462,
+     4462, 4462, 4462, 4462, 4462, 4467, 4467, 4467, 4467, 4467,
+     4467, 4467, 4467, 4467, 4467, 4467, 4467, 4467, 4467, 4467,
+     4467, 4467, 4467, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+
+     1406, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
+     3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
+     1409, 1409, 1409, 1409, 1409, 1409, 1409,  561,  561,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
+      561,  561,  561,  561,  561, 2802, 2802, 2802, 2802, 2802,
+     2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802, 2802,
+     2802, 2802, 2802, 4474, 4474, 4474, 4474, 4474, 4474, 4474,
+     4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474,
+     4474, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 4490, 4490, 4490, 4490, 4490,
+     4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490, 4490,
+     4490, 4490, 4490, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501,  838,  838,  838,  838,  838,  838,  838,  838,  838,
+      838,  838,  838,  838,  838,  838,  838,  838,  838, 1458,
+
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 3520, 3520, 3520,
+     3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520,
+     3520, 3520, 3520, 3520, 3520, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 3524, 3524, 3524, 3524, 3524, 3524, 3524,
+     3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524,
+     3524, 4505, 4505, 4505, 4505, 4505, 4505, 4505, 4505, 4505,
+     4505, 4505, 4505, 4505, 4505, 4505, 4505, 4505, 4505, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 3538, 3538, 3538, 3538, 3538,
+     3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538,
+     3538, 3538, 3538, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
+     1461, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969,
+     2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 3554, 3554, 3554,
+
+     3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554, 3554,
+     3554, 3554, 3554, 3554, 3554, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4530,
+     4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530,
+     4530, 4530, 4530, 4530, 4530, 4530, 4530, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+
+     1479, 1479, 1479, 1479, 1479, 3061, 3061, 3061, 3061, 3061,
+     3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061, 3061,
+     3061, 3061, 3061,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592,
+     3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3592, 3524,
+     3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524,
+     3524, 3524, 3524, 3524, 3524, 3524, 3524, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 4550, 4550, 4550, 4550, 4550,
+
+     4550, 4550, 4550, 4550, 4550, 4550, 4550, 4550, 4550, 4550,
+     4550, 4550, 4550, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554,
+     4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4559,
+     4559, 4559, 4559, 4559, 4559, 4559, 4559, 4559, 4559, 4559,
+     4559, 4559, 4559, 4559, 4559, 4559, 4559, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 4575, 4575, 4575, 4575, 4575,
+     4575, 4575, 4575, 4575, 4575, 4575, 4575, 4575, 4575, 4575,
+
+     4575, 4575, 4575, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  599,  599,  599,  599, 3321,
+     3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321, 3321,
+     3321, 3321, 3321, 3321, 3321, 3321, 3321,  876,  876,  876,
+      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
+      876,  876,  876,  876,  876,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946, 4604, 4604, 4604, 4604, 4604, 4604, 4604,
+
+     4604, 4604, 4604, 4604, 4604, 4604, 4604, 4604, 4604, 4604,
+     4604, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 4615,
+     4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615, 4615,
+     4615, 4615, 4615, 4615, 4615, 4615, 4615, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 4620, 4620, 4620, 4620, 4620,
+     4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620, 4620,
+     4620, 4620, 4620, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+
+     1588, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122,
+     3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122, 3122,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
+     2422, 2422, 2422, 4626, 4626, 4626, 4626, 4626, 4626, 4626,
+     4626, 4626, 4626, 4626, 4626, 4626, 4626, 4626, 4626, 4626,
+     4626, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744,
+
+     3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+     1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1017,
+
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
+     1017, 1017, 1017, 1017, 1017, 1017, 1017, 4643, 4643, 4643,
+     4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643,
+     4643, 4643, 4643, 4643, 4643, 4648, 4648, 4648, 4648, 4648,
+     4648, 4648, 4648, 4648, 4648, 4648, 4648, 4648, 4648, 4648,
+     4648, 4648, 4648, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4653, 4653, 4653,
+     4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
+     4653, 4653, 4653, 4653, 4653, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 4554, 4554, 4554,
+
+     4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554,
+     4554, 4554, 4554, 4554, 4554,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712,
+     4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712, 4712, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 2064, 2064, 2064,
+     2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
+
+     2064, 2064, 2064, 2064, 2064, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+     3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+     3920, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727,
+     4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4734,
+     4734, 4734, 4734, 4734, 4734, 4734, 4734, 4734, 4734, 4734,
+     4734, 4734, 4734, 4734, 4734, 4734, 4734, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 4745, 4745, 4745, 4745, 4745,
+
+     4745, 4745, 4745, 4745, 4745, 4745, 4745, 4745, 4745, 4745,
+     4745, 4745, 4745, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 3957,
+     3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957,
+     3957, 3957, 3957, 3957, 3957, 3957, 3957, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 3961, 3961, 3961, 3961, 3961,
+     3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961,
+
+     3961, 3961, 3961, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
+     1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 3288,
+     3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288,
+     3288, 3288, 3288, 3288, 3288, 3288, 3288, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3492, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+
+     4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000, 4000,
+     4000, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+     1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 4760,
+     4760, 4760, 4760, 4760, 4760, 4760, 4760, 4760, 4760, 4760,
+     4760, 4760, 4760, 4760, 4760, 4760, 4760, 4763, 4763, 4763,
+     4763, 4763, 4763, 4763, 4763, 4763, 4763, 4763, 4763, 4763,
+     4763, 4763, 4763, 4763, 4763, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+
+     2484, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
+     3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2844, 2844, 2844,
+     2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844,
+     2844, 2844, 2844, 2844, 2844, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554,
+
+     4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 4832,
+
+     4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832,
+     4832, 4832, 4832, 4832, 4832, 4832, 4832,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 4167, 4167, 4167,
+     4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167,
+     4167, 4167, 4167, 4167, 4167, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3037, 3037, 3037,
+
+     3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037,
+     3037, 3037, 3037, 3037, 3037, 3051, 3051, 3051, 3051, 3051,
+     3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051, 3051,
+     3051, 3051, 3051, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
+     1815, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 4875,
+     4875, 4875, 4875, 4875, 4875, 4875, 4875, 4875, 4875, 4875,
+     4875, 4875, 4875, 4875, 4875, 4875, 4875, 3492, 3492, 3492,
+     3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+
+     3492, 3492, 3492, 3492, 3492, 4878, 4878, 4878, 4878, 4878,
+     4878, 4878, 4878, 4878, 4878, 4878, 4878, 4878, 4878, 4878,
+     4878, 4878, 4878, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+     2163, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789,
+     3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 3789, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 3159, 3159, 3159,
+     3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159, 3159,
+     3159, 3159, 3159, 3159, 3159, 4883, 4883, 4883, 4883, 4883,
+
+     4883, 4883, 4883, 4883, 4883, 4883, 4883, 4883, 4883, 4883,
+     4883, 4883, 4883, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727,
+     4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 4909, 4909, 4909, 4909, 4909,
+     4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909,
+
+     4909, 4909, 4909,  452,  452,  452,  452,  452,  452,  452,
+      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,
+      452, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
+     1960, 1960, 1960, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+
+      946, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 4958,
+     4958, 4958, 4958, 4958, 4958, 4958, 4958, 4958, 4958, 4958,
+     4958, 4958, 4958, 4958, 4958, 4958, 4958, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
+     1420, 1420, 1420, 1420, 1420, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 4474, 4474, 4474, 4474, 4474, 4474, 4474,
+     4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474, 4474,
+     4474, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+
+     2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018, 4018,
+     4018, 4018, 4018, 4018, 4018, 4018, 4018, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
+     1291, 1291, 1291, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
+     4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 1234,
+
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
+     1234, 1234, 1234, 1234, 1234, 1234, 1234, 4530, 4530, 4530,
+     4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530,
+     4530, 4530, 4530, 4530, 4530,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,  215,
+      215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
+
+      215,  215,  215,  215,  215,  215,  215, 4554, 4554, 4554,
+     4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554, 4554,
+     4554, 4554, 4554, 4554, 4554, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406,
+     1406, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744,
+     3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 3744, 4643,
+     4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643,
+     4643, 4643, 4643, 4643, 4643, 4643, 4643, 2484, 2484, 2484,
+
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 4653, 4653, 4653, 4653, 4653,
+     4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
+     4653, 4653, 4653, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 5009, 5009, 5009,
+     5009, 5009, 5009, 5009, 5009, 5009, 5009, 5009, 5009, 5009,
+
+     5009, 5009, 5009, 5009, 5009, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+     1970, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+     1093, 1093, 1093, 1093, 1093, 1093, 1093, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 5030, 5030, 5030, 5030, 5030,
+
+     5030, 5030, 5030, 5030, 5030, 5030, 5030, 5030, 5030, 5030,
+     5030, 5030, 5030, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167,
+     4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 4167, 5042,
+     5042, 5042, 5042, 5042, 5042, 5042, 5042, 5042, 5042, 5042,
+     5042, 5042, 5042, 5042, 5042, 5042, 5042, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+     1726, 1726, 1726, 1726, 1726, 5057, 5057, 5057, 5057, 5057,
+     5057, 5057, 5057, 5057, 5057, 5057, 5057, 5057, 5057, 5057,
+
+     5057, 5057, 5057, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228,
+     2228, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832,
+     4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 4832, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841,
+     1841, 1841, 1841, 1841, 1841, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+     2501, 2501, 2501, 4727, 4727, 4727, 4727, 4727, 4727, 4727,
+
+     4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727, 4727,
+     4727, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504,
+     1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 4909,
+     4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909, 4909,
+     4909, 4909, 4909, 4909, 4909, 4909, 4909, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163, 4163,
+     4163, 4163, 4163, 4163, 4163, 5087, 5087, 5087, 5087, 5087,
+     5087, 5087, 5087, 5087, 5087, 5087, 5087, 5087, 5087, 5087,
+     5087, 5087, 5087, 5099, 5099, 5099, 5099, 5099, 5099, 5099,
+     5099, 5099, 5099, 5099, 5099, 5099, 5099, 5099, 5099, 5099,
+
+     5099, 5102, 5102, 5102, 5102, 5102, 5102, 5102, 5102, 5102,
+     5102, 5102, 5102, 5102, 5102, 5102, 5102, 5102, 5102, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
+     1458, 1458, 1458, 1458, 1458, 1458, 1458, 4530, 4530, 4530,
+     4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530, 4530,
+     4530, 4530, 4530, 4530, 4530,  536,  536,  536,  536,  536,
+      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
+      536,  536,  536, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484,
+     2484, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643,
+
+     4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4643, 4653,
+     4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653, 4653,
+     4653, 4653, 4653, 4653, 4653, 4653, 4653, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
+     1588, 1588, 1588, 1588, 1588, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
+     1479, 1479, 1479, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
+     1760,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+      946,  946,  946,  946,  946,  946,  946,  946,  946, 3558,
+
+     3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558,
+     3558, 3558, 3558, 3558, 3558, 3558, 3558,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018, 3018,
+     3018, 3018, 3018,   19, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143
+    } ;
+
+static yyconst flex_int16_t yy_chk[123505] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        2,    3,    2,    2,    3, 5132,    4,    2,    4,    4,
+     5052,   17,   18,    4,    9,    9,    9,    9,   10,   10,
+       10,   10,   17,   18,    9,   57,    9,   57,   10,    9,
+       10,    4, 4723,   10,    4,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,   11,   11,   11,   11,   12,
+       12,   12,   12,   13,   14,   15,   13,   14,   16,   25,
+       11,   25,   25,   15,   12,   50,   16,   21,   21,   21,
+       21,   23,   23,   23,   23,   27,   27,   33,   58, 4423,
+       33, 3831,   58,   13,   14,   15,   65,   68,   16,   65,
+       68,   81,   11,   81,   81, 3758,   12,   48,   48,   48,
+       48,   49,   49,   49,   49,   50,   50,   60,   60,   60,
+
+       60, 3511,   60,   62,   62,   62,   62,   63,   63,   63,
+       63, 1031,   60,   62,  102,   62, 3496,   63,   62,   63,
+      102,  352,   63,   64,   64,   64,   64,   67,   67,   67,
+       67,   64,  352,   77,   64,   64,   64,   64,   64,   64,
+       64,  359,   67,   64,   77,  507, 1031,   77,   78,   78,
+       78,   78,  359,   64, 1216,   64,   80,   80,   80,   80,
+       92,   92,   92,   92,   95,   95,   95,   95,  507,  104,
+       92,  104,  104, 3490,   67,   92,   96,   96,   96,   96,
+      106,  106,  106,  106,  107,  106,  107,  107,  108, 1216,
+      109,  108,  109,  109,  113,  106,  119,  113,  126,  119,
+
+      109,  126,  376,  134,  104,  117,  117,  117,  117,  146,
+      104, 3489,  146,  376,  134,  117,  117,  134,  170, 3321,
+      117,  170,  107,  112,  112,  112,  112,  124,  124,  124,
+      124,  112, 3320, 3154,  112,  112,  112,  112,  112,  112,
+      112,  178,  124,  112,  178,  125,  125,  125,  125,  181,
+      374,  136,  181,  112, 3143,  112,  115,  115,  115,  115,
+      125,  506,  136,  185,  115,  136,  185,  115,  115,  115,
+      115,  115,  115,  115,  124,  374,  115,  138,  138,  138,
+      138,  139,  139,  139,  139,  506,  115,  188,  115,  120,
+      188,  120,  125,  149,  149,  149,  149,  120,  120,  120,
+
+      120, 3016, 2965,  144,  144,  144,  144,  587,  120,  120,
+      120,  120,  120,  144,  120, 2832, 2750,  157,  144,  157,
+      157,  120,  121,  121,  121,  121,  150,  150,  150,  150,
+      121, 2746,  587,  121,  121,  121,  121,  121,  121,  121,
+      394,  161,  121,  161,  161,  168,  168,  168,  168,  588,
+      207,  394,  121,  207,  121,  168,  168, 2742, 2528, 2524,
+      168,  183,  183,  183,  183,  199, 2449,  199,  199,  184,
+      184,  184,  184,  588,  414,  200,  183,  200,  200,  161,
+      166,  166,  166,  166,  184,  414,  214,  224,  166,  214,
+      224,  166,  166,  166,  166,  166,  166,  166,  228, 2397,
+
+      166,  228,  205,  231,  205,  205,  231,  419,  183, 2226,
+      166,  235,  166,  167,  235,  167,  184,  237,  419,  237,
+      237,  167,  167,  167,  167,  229,  229,  229,  229, 2200,
+     2196,  695,  167,  167,  167,  167,  167,  205,  167,  240,
+      229,  240,  240,  205,  420,  167,  176,  176,  176,  176,
+      243, 2188,  243,  243,  176,  420,  695,  176,  176,  176,
+      176,  176,  176,  176,  247,  249,  176,  247,  249,  252,
+      256,  259,  252,  256,  259, 2145,  176, 2134,  176,  177,
+      177,  177,  177,  261, 2128,  264,  261,  177,  264, 2127,
+      177,  177,  177,  177,  177,  177,  177, 2125, 2106,  177,
+
+      265,  265,  265,  265,  266,  268,  430,  266,  268,  177,
+     2099,  177,  179,  270,  179,  265,  270,  430,  434,  437,
+      179,  179,  179,  179,  271,  270,  271,  271, 2003,  434,
+      437,  179,  179,  179,  179,  179,  274,  179,  274,  274,
+      275, 1992,  275,  275,  179,  216,  216,  216,  216,  280,
+     1925,  282,  280,  216,  282, 1909,  216,  216,  216,  216,
+      216,  216,  216,  284,  286,  216,  284,  286,  289,  295,
+      307,  289,  295,  307,  441,  216, 1899,  216,  217,  299,
+      217,  299,  299, 1893,  452,  441,  217,  217,  217,  217,
+      301,  310,  301,  301,  310,  452,  462,  217,  217,  217,
+
+      217,  217,  303,  217,  303,  303,  313,  462, 1889,  313,
+      217,  239,  239, 1888,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+      287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+      287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+      287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+
+      287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
+      287,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  290,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  291,  291,  291,  291,  302, 1887,  302,  302,  302,
+      315,  291,  291,  315, 1878, 1865,  291,  291,  291, 1862,
+      305,  305,  305,  305,  302,  305,  317,  321,  325,  317,
+      321,  325,  305,  328,  335,  305,  328,  335,  342,  351,
+
+      356,  342,  351,  356,  358, 1854, 1822,  358,  291,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  311,
+      366,  479, 1741,  366,  331,  311,  331,  331,  331,  311,
+      368,  375,  479,  368,  375,  311,  311,  311,  311,  311,
+      311,  311,  311,  331, 1733, 1720,  311,  311,  311,  311,
+      311,  311,  311,  311,  311,  311,  311,  311,  311,  311,
+
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
+
+      319,  319,  319,  319,  327,  327,  327,  327, 1694,  378,
+      319,  319,  378, 1686,  327,  319,  327,  319,  334,  327,
+      334,  334,  350,  350,  350,  350,  353,  353,  353,  353,
+      334, 1678,  383,  393,  350,  383,  393,  350,  353, 1670,
+     1647,  353,  354,  354,  354,  354, 1643,  319,  320,  320,
+      320,  320,  401, 1633,  354,  401,  334,  354,  320,  320,
+      413,  415, 1476,  320,  320,  320,  373,  407,  373,  373,
+      407,  413,  415,  353,  413,  415,  416,  418,  373,  416,
+      418,  425,  428,  429,  425,  428,  429,  436, 1465,  354,
+      436,  421, 1452, 1450, 1433,  320,  322,  322,  322,  322,
+
+     1430, 1359,  421,  435,  373,  421,  322,  322,  451,  453,
+     1291,  322,  322,  322,  435,  440,  484,  435,  440,  451,
+      453,  461,  451,  453,  461,  470,  478,  484,  470,  478,
+      486,  489,  492,  501,  489,  492,  501,  515, 1288,  534,
+      515,  486,  534,  322,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  336,  336,  336,  337,  487,  490,  494,  540,  562,
+
+      564,  540,  562,  564,  337, 1287,  487,  490,  494,  487,
+      337,  337,  337,  337,  337,  337,  337,  337, 1252, 1198,
+     1196,  337,  337,  337,  337,  337,  337,  337,  337,  337,
+      337,  337,  337,  337,  337,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  339,  339,  339,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  340,  340,  340,  340,  340,
+      340,  340,  340,  340,  340,  343,  495,  343,  496, 1184,
+      503, 1146,  508,  343,  343,  343,  343,  495,  498,  496,
+      495,  503,  504,  508,  343,  343,  343,  343,  343,  498,
+      343,  566,  498,  504,  566, 1099,  504,  343,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+
+      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  344,  344,  344,  345,  345,
+      345,  345,  345,  345,  345,  345,  345,  345,  345,  345,
+      345,  345,  345,  345,  345,  345,  345,  345,  345,  345,
+      345,  345,  345,  345,  345,  345,  345,  345,  345,  345,
+      345,  345,  345,  345,  345,  345,  345,  345,  345,  345,
+      345,  345,  345,  345,  345,  345,  345,  345,  347,  347,
+      347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
+      347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
+      347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
+
+      347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
+      347,  347,  347,  347,  347,  347,  347,  347,  349,  349,
+      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
+      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
+      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
+      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
+      349,  349,  349,  349,  349,  349,  349,  349,  360,  360,
+      360,  360,  580, 1093,  505,  580,  505,  505,  360,  360,
+     1078, 1067, 1038,  360,  360,  360,  505,  433, 1037,  433,
+      433,  509,  509,  509,  509, 1036,  509,  510,  512,  433,
+
+     1014,  517,  520,  509,  582, 1001,  509,  582,  510,  512,
+      513,  510,  517,  520,  522,  360,  361,  361,  361,  361,
+      600,  513,  433,  600,  513,  522,  361,  361,  433,  518,
+      523,  361,  361,  361,  511,  511,  511,  511,  992,  511,
+      518,  523,  532,  518,  523,  989,  536,  537,  541,  511,
+      985,  549,  602,  532,  983,  602,  532,  536,  537,  541,
+      550,  537,  549,  361,  380,  549,  380,  551,  553,  554,
+      982,  550,  380,  380,  380,  380,  981,  555,  551,  553,
+      554,  551,  553,  380,  380,  380,  380,  380,  555,  380,
+      608,  555,  632,  608,  959,  632,  380,  388,  388,  388,
+
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  388,  388,  388,
+      388,  388,  388,  388,  388,  388,  388,  390,  390,  390,
+      390,  957,  952,  640,  558,  390,  640,  944,  390,  390,
+      390,  390,  390,  390,  390,  558,  919,  390,  558,  556,
+      556,  556,  556,  915,  559,  560,  568,  390,  894,  390,
+      398,  556,  572,  583,  556,  559,  560,  568,  658,  560,
+      398,  658,  874,  572,  583,  589,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  849,  842,  589,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
+      399,  402,  570,  402,  574,  832,  595,  829,  611,  402,
+      402,  402,  402,  570,  577,  574,  570,  595,  574,  611,
+      402,  402,  402,  402,  402,  577,  402,  661,  577,  664,
+
+      661,  823,  664,  402,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  404,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
+      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
+
+      404,  404,  404,  404,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
+      405,  405,  405,  405,  406,  816,  815,  809,  593,  593,
+      593,  593,  786,  784,  406,  575,  575,  575,  575,  750,
+      406,  406,  406,  406,  406,  406,  406,  406,  710,  707,
+      575,  406,  406,  406,  406,  406,  406,  406,  406,  406,
+      406,  406,  406,  406,  406,  408,  593,  408,  584,  584,
+
+      584,  584,  705,  408,  408,  408,  408,  700,  584,  692,
+      584,  585,  575,  584,  408,  408,  408,  408,  408,  685,
+      408,  683,  585,  686,  683,  585,  686,  408,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  409,  409,  409,
+      409,  409,  409,  409,  409,  409,  409,  409,  410,  410,
+      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+
+      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  410,  410,  410,  410,
+      410,  410,  410,  410,  410,  410,  410,  410,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  411,  411,
+      411,  411,  411,  411,  411,  411,  411,  411,  422,  422,
+      422,  422,  698,  679,  569,  569,  569,  569,  422,  422,
+      677,  672,  660,  422,  422,  422,  569,  591, 1215,  569,
+
+      586,  586,  586,  586,  590,  590,  590,  590,  591,  590,
+      586,  591,  617,  634,  708,  586,  590,  708,  698,  590,
+      657,  594,  636,  617,  634,  422,  423,  423,  423,  423,
+      645,  569,  594,  636, 1215,  594,  423,  423,  639,  597,
+      613,  423,  423,  423,  592,  592,  592,  592,  635,  592,
+      597,  613,  616,  597,  613,  601,  618,  624,  637,  592,
+      599,  579,  578,  616,  641,  642,  616,  618,  624,  637,
+      618,  624,  637,  423,  442,  641,  642,  644,  646,  642,
+      711,  567,  442,  711,  442, 1032,  563,  650,  644,  646,
+      442,  442,  442,  442,  442,  442,  442,  442,  650,  561,
+
+      533,  442,  442,  442,  442,  442,  442,  442,  442,  442,
+      442,  442,  442,  442,  442,  443,  647,  443,  649, 1032,
+      653,  521,  665,  443,  443,  443,  443,  647,  655,  649,
+      647,  653,  649,  665,  443,  443,  443,  443,  443,  655,
+      443,  724,  655,  732,  724,  514,  732,  443,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
+      445,  445,  445,  445,  445,  445,  445,  445,  446,  446,
+
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  446,  446,
+      446,  446,  446,  446,  446,  446,  446,  446,  448,  666,
+      448,  668,  671,  678,  500,  491,  448,  448,  448,  448,
+      666,  676,  668,  671,  678,  668,  671,  448,  448,  448,
+      448,  448,  676,  448,  771,  676,  785,  771,  485,  785,
+      448,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+      449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+
+      449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+      449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+      449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+      449,  454,  469,  787,  810,  687,  787,  810,  427,  426,
+      424,  454,  656,  656,  656,  656,  687,  454,  454,  454,
+      454,  454,  454,  454,  454,  417,  382,  656,  454,  454,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  454,
+      454,  454,  455,  688,  455,  689,  689,  689,  689,  377,
+      455,  455,  455,  455,  688,  689,  372,  689,  690,  656,
+      689,  455,  455,  455,  455,  455,  371,  455,  814,  690,
+
+      817,  814,  690,  817,  455,  457,  457,  457,  457,  457,
+      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
+      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
+      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
+      457,  457,  457,  457,  457,  457,  457,  457,  457,  457,
+      457,  457,  457,  457,  457,  459,  459,  459,  459,  659,
+      659,  659,  659,  459,  367, 1457,  459,  459,  459,  459,
+      459,  459,  459,  699,  659,  459,  691,  691,  691,  691,
+      365,  693,  701,  725,  699,  459,  691,  459,  460,  364,
+      460,  691,  693,  701,  725,  693,  460,  460,  460,  460,
+
+      694, 1457,  694,  694,  703,  706,  659,  460,  460,  460,
+      460,  460,  694,  460,  831,  703,  706,  831,  703,  706,
+      460,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
+      466,  467,  836,  467,  851,  836,  734,  851,  745,  467,
+      467,  467,  467,  696,  696,  696,  696,  734,  696,  745,
+      467,  467,  467,  467,  467,  696,  467,  860,  696,  875,
+
+      860,  363,  875,  467,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  468,  471,  736,  772,  776,  885,  936,
+      938,  885,  936,  938,  471,  357,  736,  772,  776,  736,
+      471,  471,  471,  471,  471,  471,  471,  471,  326,  324,
+      318,  471,  471,  471,  471,  471,  471,  471,  471,  471,
+      471,  471,  471,  471,  471,  474,  474,  474,  474,  474,
+
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
+      474,  474,  474,  474,  474,  476,  476,  476,  476,  669,
+      669,  669,  669,  476,  314,  309,  476,  476,  476,  476,
+      476,  476,  476,  788,  669,  476,  697,  697,  697,  697,
+      741,  744,  793,  940,  788,  476,  940,  476,  477,  751,
+      477,  741,  744,  793,  741,  744,  477,  477,  477,  477,
+      751,  758,  306,  751,  304,  761,  669,  477,  477,  477,
+
+      477,  477,  758,  477,  697,  758,  761,  296,  294,  761,
+      477,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+      488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+      488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+      488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+
+      488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
+      488,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+      493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+      493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+      493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+      493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+      493,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  499,  499,  499,  499,  499,  499,  499,  499,  499,
+      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
+      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
+      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
+      499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
+      499,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+
+      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
+      502,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+      519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+      519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+      519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+
+      519,  519,  519,  519,  519,  519,  519,  519,  519,  519,
+      519,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+
+      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
+      525,  527,  777,  527,  704,  704,  704,  704,  293,  527,
+      527,  527,  527,  777,  704,  704,  777,  782,  790,  704,
+      527,  527,  527,  527,  527,  292,  527,  945,  782,  790,
+      945,  782,  790,  527,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  529,  288,  958,  960,  804,  958,
+
+      960,  285,  283,  281,  529,  674,  674,  674,  674,  804,
+      529,  529,  529,  529,  529,  529,  529,  529,  279,  278,
+      674,  529,  529,  529,  529,  529,  529,  529,  529,  529,
+      529,  529,  529,  529,  529,  530,  792,  530,  818,  277,
+      822,  276,  827,  530,  530,  530,  530,  792,  794,  818,
+      792,  822,  674,  827,  530,  530,  530,  530,  530,  794,
+      530,  984,  794,  988,  984,  269,  988,  530,  531,  531,
+      531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+      531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+      531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+
+      531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
+      531,  531,  531,  531,  531,  531,  531,  531,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  538,  538,
+      538,  538,  538,  538,  538,  538,  538,  538,  542,  798,
+      828,  837,  990,  267,  993,  990,  542,  993,  542,  263,
+      798,  828,  837,  798,  542,  542,  542,  542,  542,  542,
+      542,  542,  262,  260,  258,  542,  542,  542,  542,  542,
+
+      542,  542,  542,  542,  542,  542,  542,  542,  542,  543,
+      803,  543,  806,  257,  838,  255,  841,  543,  543,  543,
+      543,  803,  808,  806,  803,  838,  806,  841,  543,  543,
+      543,  543,  543,  808,  543, 1010,  808, 1015, 1010,  251,
+     1015,  543,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
+      544,  544,  545,  545,  545,  545,  545,  545,  545,  545,
+
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  545,  545,  545,  545,  545,  545,  545,  545,
+      545,  545,  547,  819,  547,  826,  250,  848,  248,  876,
+      547,  547,  547,  547,  819,  839,  826,  819,  848,  826,
+      876,  547,  547,  547,  547,  547,  839,  547,  246,  839,
+     1030, 1030, 1030, 1030,  547,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  565,  565,  565,  565,  565,
+      565,  565,  565,  565,  565,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
+      571,  571,  571,  571,  571,  573,  573,  573,  573,  573,
+      573,  573,  573,  573,  573,  573,  573,  573,  573,  573,
+      573,  573,  573,  573,  573,  573,  573,  573,  573,  573,
+
+      573,  573,  573,  573,  573,  573,  573,  573,  573,  573,
+      573,  573,  573,  573,  573,  573,  573,  573,  573,  573,
+      573,  573,  573,  573,  573,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  576,  576,  576,  576,  576,
+      576,  576,  576,  576,  576,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
+      581,  581,  581,  581,  581,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  598,  598,  598,  598,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  604,  845,  886,  893, 1041,
+     1046, 1056, 1041, 1046, 1056,  604,  245,  845,  886,  893,
+      845,  604,  604,  604,  604,  604,  604,  604,  604,  244,
+
+      242,  241,  604,  604,  604,  604,  604,  604,  604,  604,
+      604,  604,  604,  604,  604,  604,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,
+      606,  606,  606,  606,  606,  606,  609,  914,  609,  840,
+      840,  840,  840,  236,  609,  609,  609,  609,  914,  840,
+      234,  840,  873,  877,  840,  609,  609,  609,  609,  609,
+      233,  609, 1064,  873,  877, 1064,  873,  877,  609,  610,
+
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  610,  610,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  612,  612,  612,  612,  614,
+
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  614,
+      614,  614,  614,  614,  614,  614,  614,  614,  614,  615,
+      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
+      615,  615,  615,  615,  615,  615,  615,  615,  615,  619,
+
+      619,  619,  619,  232,  230, 1066,  901,  619, 1066,  227,
+      619,  619,  619,  619,  619,  619,  619,  901, 1068,  619,
+      901, 1068, 1079, 1094, 1152, 1079, 1094, 1152,  226,  619,
+      225,  619,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
+      620,  620,  621,  909,  918,  933, 1155, 1173, 1175, 1155,
+     1173, 1175,  621,  223,  909,  918,  933,  909,  621,  621,
+
+      621,  621,  621,  621,  621,  621,  219,  218,  215,  621,
+      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
+      621,  621,  621,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  622,  622,  622,  622,  622,  622,  622,
+      622,  622,  622,  625, 1183,  625, 1197, 1183,  946, 1197,
+      962,  625,  625,  625,  625,  843,  843,  843,  843,  946,
+      843,  962,  625,  625,  625,  625,  625,  843,  625, 1199,
+
+      843, 1201, 1199,  213, 1201,  625,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  626,  626,  626,  626,
+      626,  626,  626,  626,  626,  626,  627,  627,  627,  627,
+      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
+      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
+      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
+      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
+
+      627,  627,  627,  627,  627,  627,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
+      628,  628,  628,  628,  628,  628,  629,  932,  966,  980,
+     1219, 1223, 1243, 1219, 1223, 1243,  629,  212,  932,  966,
+      980,  932,  629,  629,  629,  629,  629,  629,  629,  629,
+      211,  208,  206,  629,  629,  629,  629,  629,  629,  629,
+      629,  629,  629,  629,  629,  629,  629,  630,  630,  630,
+
+      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  630,  630,  630,  630,  630,  633,  943,  633,
+      850,  850,  850,  850,  204,  633,  633,  633,  633,  943,
+      850,  850,  943,  947,  953,  850,  633,  633,  633,  633,
+      633,  203,  633, 1253,  947,  953, 1253,  947,  953,  633,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
+      643,  643,  643,  643,  643,  643,  643,  643,  643,  643,
+      643,  643,  643,  643,  643,  643,  643,  643,  643,  643,
+      643,  643,  643,  643,  643,  643,  643,  643,  643,  643,
+      643,  643,  643,  643,  643,  643,  643,  643,  643,  643,
+      643,  643,  643,  643,  643,  643,  643,  643,  643,  643,
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+      648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
+      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
+      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
+      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
+      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
+      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
+      654,  654,  654,  654,  844,  844,  844,  844,  964,  965,
+      991,  202,  654,  994,  996,  654,  844,  201,  999,  964,
+      965,  991,  964,  965,  994,  996, 1000, 1004,  996,  999,
+      198,  197,  999, 1005, 1007, 1011, 1257, 1000, 1004, 1257,
+     1362, 1004,  844, 1362, 1005, 1007, 1011,  654,  662,  662,
+      662,  662,  662,  662,  662,  662,  662,  662,  662,  662,
+      662,  662,  662,  662,  662,  662,  662,  662,  662,  662,
+
+      662,  662,  662,  662,  662,  662,  662,  662,  662,  662,
+      662,  662,  662,  662,  662,  662,  662,  662,  662,  662,
+      662,  662,  662,  662,  662,  662,  662,  662,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
+      663,  663,  663,  663,  663,  663,  663,  663,  667,  667,
+      667,  667,  846,  846,  846,  846, 1006, 1017, 1018,  196,
+      667,  195, 1019,  667, 1021, 1024, 1029, 1006, 1017, 1018,
+
+     1006,  194, 1018, 1019, 1025, 1021, 1024, 1029, 1021, 1023,
+     1023, 1023, 1023, 1367,  193, 1025, 1367,  846, 1025, 1023,
+      192, 1023,  190,  846, 1023,  667,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  670,  670,  670,  670,
+      670,  670,  670,  670,  670,  670,  673,  673,  673,  673,
+      673,  673,  673,  673,  673,  673,  673,  673,  673,  673,
+      673,  673,  673,  673,  673,  673,  673,  673,  673,  673,
+
+      673,  673,  673,  673,  673,  673,  673,  673,  673,  673,
+      673,  673,  673,  673,  673,  673,  673,  673,  673,  673,
+      673,  673,  673,  673,  673,  673,  675,  675,  675,  675,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  675,  675,  675,  675,  675,  675,  675,
+      675,  675,  675,  675,  675,  675,  680,  680,  680,  680,
+      680,  680,  680,  680,  680,  680,  680,  680,  680,  680,
+      680,  680,  680,  680,  680,  680,  680,  680,  680,  680,
+
+      680,  680,  680,  680,  680,  680,  680,  680,  680,  680,
+      680,  680,  680,  680,  680,  680,  680,  680,  680,  680,
+      680,  680,  680,  680,  680,  680,  681,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  681,  681,  681,  681,
+      681,  681,  681,  681,  681,  681,  682, 1375, 1416, 1431,
+     1375, 1416, 1431,  189, 1434,  187,  682, 1434, 1026, 1026,
+     1026, 1026,  682,  682,  682,  682,  682,  682,  682,  682,
+
+     1026,  182,  180,  682,  682,  682,  682,  682,  682,  682,
+      682,  682,  682,  682,  682,  682,  682,  684, 1028, 1034,
+     1057, 1438, 1477,  172, 1438, 1477, 1026,  684,  171, 1028,
+     1034, 1057, 1028,  684,  684,  684,  684,  684,  684,  684,
+      684,  164,  163,  162,  684,  684,  684,  684,  684,  684,
+      684,  684,  684,  684,  684,  684,  684,  684,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
+
+      702,  702,  702,  702,  702,  702,  702,  702,  709,  709,
+      709,  709,  160,  709,  709, 1035,  709,  159,  709,  709,
+      709,  709,  709,  709,  709,  709, 1035,  158,  709, 1035,
+      709,  709,  709,  709,  709,  709,  709,  709,  709,  156,
+      709,  709,  709,  709,  709,  709,  709,  709,  709,  709,
+      709,  709,  709,  709,  709,  709,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+      712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
+
+      712,  712,  712,  712,  712,  712,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  713,  713,  714, 1487,  714,  155,
+     1487, 1027, 1069, 1080,  714,  714,  714,  714,  805,  805,
+      805,  805, 1027, 1069, 1080,  714,  714,  714,  714,  714,
+      805,  714, 1070,  805, 1077,  154,  153,  152,  714,  715,
+     1081, 1098, 1106, 1070,  151, 1077, 1070, 1027, 1077,  715,
+
+      148, 1081, 1098, 1106, 1081,  715,  715,  715,  715,  715,
+      715,  715,  715,  147,  143,  805,  715,  715,  715,  715,
+      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      721,  721,  721,  721, 1506,  142, 1088, 1506, 1107,  140,
+      721,  721,  721,  132,  129,  721,  722, 1088,  722, 1107,
+
+     1088, 1133, 1107, 1145,  722,  722,  722,  722,  128, 1125,
+      123, 1131, 1133, 1134, 1145,  722,  722,  722,  722,  722,
+     1125,  722, 1131, 1125, 1134, 1131,  122, 1134,  722,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  723,  723,  729,
+     1140, 1172, 1174, 1456, 1456, 1456, 1456, 1543,  105,  729,
+     1543, 1140, 1172, 1174, 1140,  729,  729,  729,  729,  729,
+
+      729,  729,  729,  103,  101,   99,  729,  729,  729,  729,
+      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
+      733, 1160,  733, 1169,   98, 1176,   94, 1178,  733,  733,
+      733,  733, 1160, 1171, 1169, 1160, 1176, 1169, 1178,  733,
+      733,  733,  733,  733, 1171,  733, 1575, 1171, 1579, 1575,
+
+       93, 1579,  733,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
+      735,  735,  735,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
+
+      737,  737,  737,  738, 1179, 1180, 1189, 1591, 1632, 1648,
+     1591, 1632, 1648,  738,   91, 1179, 1180, 1189, 1179,  738,
+      738,  738,  738,  738,  738,  738,  738,   90,   87,   75,
+      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
+      738,  738,  738,  738,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  742, 1182,  742, 1188,   73, 1191,
+
+       56, 1193,  742,  742,  742,  742, 1182, 1190, 1188, 1182,
+     1191, 1188, 1193,  742,  742,  742,  742,  742, 1190,  742,
+     1672, 1190, 1675, 1672,   52, 1675,  742,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
+      743,  743,  743,  743,  743,  743,  743,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
+
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
+      746,  746,  746,  746,  746,  746,  746,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  748, 1192,  748,
+     1194,   51, 1202,   45, 1206,  748,  748,  748,  748, 1192,
+     1195, 1194, 1192, 1202, 1204, 1206,  748,  748,  748,  748,
+
+      748, 1195,  748, 1679, 1195, 1204, 1679,   44, 1204,  748,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      752, 1208, 1213, 1218, 1702, 1718, 1721, 1702, 1718, 1721,
+      752,   43, 1208, 1213, 1218, 1208,  752,  752,  752,  752,
+      752,  752,  752,  752,   42,   41,   39,  752,  752,  752,
+      752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
+
+      752,  755,  755,  755,  755, 1209, 1209, 1209, 1209,  755,
+       32, 1211,  755,  755,  755,  755,  755,  755,  755, 1220,
+     1209,  755, 1211, 1734, 1745, 1211, 1734, 1745,   19, 1788,
+     1220,  755, 1788,  755,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  757,    8, 1826, 1855, 1224, 1826,
+     1855,    7,    0,    0,  757,  807,  807,  807,  807, 1224,
+
+      757,  757,  757,  757,  757,  757,  757,  757,    0,    0,
+      807,  757,  757,  757,  757,  757,  757,  757,  757,  757,
+      757,  757,  757,  757,  757,  759, 1212,  759, 1234,    0,
+     1244,    0, 1249,  759,  759,  759,  759, 1212, 1217, 1234,
+     1212, 1244,  807, 1249,  759,  759,  759,  759,  759, 1217,
+      759, 1892, 1217, 1895, 1892,    0, 1895,  759,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+
+      760,  760,  760,  760,  760,  760,  760,  760,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  763,    0,
+      763,    0, 1214, 1214, 1214, 1214,  763,  763,  763,  763,
+      979,  979,  979,  979, 1214, 1233, 1254,  763,  763,  763,
+      763,  763,  979,  763, 1235,  979, 1233, 1254, 1248, 1233,
+      763,  764,    0, 1264, 1277, 1235,    0, 1214, 1235, 1248,
+
+        0,  764, 1248, 1214, 1264, 1277,    0,  764,  764,  764,
+      764,  764,  764,  764,  764,    0,    0,  979,  764,  764,
+      764,  764,  764,  764,  764,  764,  764,  764,  764,  764,
+      764,  764,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  769,  769,  769,  769,    0,    0, 1897, 1250,
+      769, 1897,    0,  769,  769,  769,  769,  769,  769,  769,
+
+     1250, 1900,  769, 1250, 1900, 1255,    0, 1265,    0, 1295,
+     1935, 1316,  769, 1935,  769,  770, 1255,  770, 1265, 1255,
+     1295, 1265, 1316,  770,  770,  770,  770,    0, 1276,    0,
+     1285,    0, 1294,    0,  770,  770,  770,  770,  770, 1276,
+      770, 1285, 1276, 1294, 1285,    0, 1294,  770,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  779, 1306,
+
+     1331, 1334, 1958, 1993, 2059, 1958, 1993, 2059,  779,    0,
+     1306, 1331, 1334, 1306,  779,  779,  779,  779,  779,  779,
+      779,  779,    0,    0,    0,  779,  779,  779,  779,  779,
+      779,  779,  779,  779,  779,  779,  779,  779,  779,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  783,
+     1315,  783, 1321,    0, 1339,    0, 1376,  783,  783,  783,
+
+      783, 1315, 1330, 1321, 1315, 1339, 1321, 1376,  783,  783,
+      783,  783,  783, 1330,  783, 2086, 1330, 2100, 2086,    0,
+     2100,  783,  789,  789,  789,  789,  789,  789,  789,  789,
+      789,  789,  789,  789,  789,  789,  789,  789,  789,  789,
+      789,  789,  789,  789,  789,  789,  789,  789,  789,  789,
+      789,  789,  789,  789,  789,  789,  789,  789,  789,  789,
+      789,  789,  789,  789,  789,  789,  789,  789,  789,  789,
+      789,  789,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  791,  791,  791,  791,  791,  791,  791,  791,
+      791,  791,  795,  795,  795,  795,    0,    0, 2129, 1333,
+      795, 2129,    0,  795,  795,  795,  795,  795,  795,  795,
+     1333, 2159,  795, 1333, 2159, 2161, 2169, 2197, 2161, 2169,
+     2197,    0,  795,    0,  795,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  796,
+      796,  796,  796,  796,  796,  796,  796,  796,  796,  796,
+
+      796,  796,  796,  796,  796,  797, 1335, 1390, 1405, 2215,
+     2217, 2220, 2215, 2217, 2220,  797,    0, 1335, 1390, 1405,
+     1335,  797,  797,  797,  797,  797,  797,  797,  797,    0,
+        0,    0,  797,  797,  797,  797,  797,  797,  797,  797,
+      797,  797,  797,  797,  797,  797,  799, 1340,  799, 1357,
+        0, 1406,    0, 1409,  799,  799,  799,  799, 1340, 1385,
+     1357, 1340, 1406, 1357, 1409,  799,  799,  799,  799,  799,
+     1385,  799, 2227, 1385, 2267, 2227,    0, 2267,  799,  800,
+      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
+      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
+
+      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
+      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
+      800,  800,  800,  800,  800,  800,  800,  800,  800,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  801,
+      801,  801,  801,  801,  801,  801,  801,  801,  801,  802,
+      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
+      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
+
+      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
+      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
+      802,  802,  802,  802,  802,  802,  802,  802,  802,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
+      812,  812,  812,  812,  812,  812,  812,  812,  812,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
+      813,  813,  813,  813,  813,  813,  813,  813,  813,  820,
+      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
+      820,  820,  820,  820,  820,  820,  820,  820,  820,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
+      821,  821,  821,  821,  821,  821,  821,  821,  821,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  824,
+      824,  824,  824,  824,  824,  824,  824,  824,  824,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  825,
+      825,  825,  825,  825,  825,  825,  825,  825,  825,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
+      830,  830,  830,  830,  830,  830,  830,  830,  830,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
+      833,  833,  833,  833,  833,  833,  833,  833,  833,  834,
+     1391, 1411, 1417, 2340, 2343, 2346, 2340, 2343, 2346,  834,
+        0, 1391, 1411, 1417, 1391,  834,  834,  834,  834,  834,
+      834,  834,  834,    0,    0,    0,  834,  834,  834,  834,
+      834,  834,  834,  834,  834,  834,  834,  834,  834,  834,
+      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
+      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
+      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
+
+      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
+      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,
+      852,  852,  852,  852,    0,    0, 2405, 1404,  852, 2405,
+        0,  852,  852,  852,  852,  852,  852,  852, 1404, 2494,
+      852, 1404, 2494,    0,    0,    0, 1407, 1419, 1410,    0,
+      852,    0,  852,  853,  853,  853,  853, 1407, 1419, 1410,
+     1407,  853, 1410, 1413,  853,  853,  853,  853,  853,  853,
+      853, 1420, 2637,  853, 1413, 2637, 2656, 1413, 2659, 2656,
+        0, 2659, 1420,  853,    0,  853,  854,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  854,  854,  854,  854,
+
+      854,  854,  854,  854,  854,  854,  854,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  854,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  854,  854,  854,  854,
+      854,  854,  854,  854,  854,  854,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  855,  855,  855,  855,
+      855,  855,  855,  855,  855,  855,  856, 1418, 1422, 1426,
+     2661, 2700, 2730, 2661, 2700, 2730,  856,    0, 1418, 1422,
+
+     1426, 1418,  856,  856,  856,  856,  856,  856,  856,  856,
+        0,    0,    0,  856,  856,  856,  856,  856,  856,  856,
+      856,  856,  856,  856,  856,  856,  856,  857,  857,  857,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
+      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
+      857,  857,  857,  857,  857,  857,  857,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
+      858,  858,  858,  858,  858,  858,  858,  861, 1421,  861,
+     1424,    0, 1439,    0, 1440,  861,  861,  861,  861, 1421,
+     1428, 1424, 1421, 1439, 1424, 1440,  861,  861,  861,  861,
+      861, 1428,  861, 2732, 1428, 2734, 2732,    0, 2734,  861,
+      862,  862,  862,  862,  862,  862,  862,  862,  862,  862,
+      862,  862,  862,  862,  862,  862,  862,  862,  862,  862,
+      862,  862,  862,  862,  862,  862,  862,  862,  862,  862,
+      862,  862,  862,  862,  862,  862,  862,  862,  862,  862,
+
+      862,  862,  862,  862,  862,  862,  862,  862,  862,  862,
+      863,  863,  863,  863,  863,  863,  863,  863,  863,  863,
+      863,  863,  863,  863,  863,  863,  863,  863,  863,  863,
+      863,  863,  863,  863,  863,  863,  863,  863,  863,  863,
+      863,  863,  863,  863,  863,  863,  863,  863,  863,  863,
+      863,  863,  863,  863,  863,  863,  863,  863,  863,  863,
+      865, 1442, 1451, 1458, 2747,    0, 2768, 2747,  865, 2768,
+      865,    0, 1442, 1451, 1458, 1442,  865,  865,  865,  865,
+      865,  865,  865,  865,    0,    0,    0,  865,  865,  865,
+      865,  865,  865,  865,  865,  865,  865,  865,  865,  865,
+
+      865,  866, 1444,  866, 1448, 1453, 1453, 1453, 1453,  866,
+      866,  866,  866, 1444, 1459, 1448, 1444, 1453, 1448, 1461,
+      866,  866,  866,  866,  866, 1459,  866,    0, 1459, 2780,
+     1461,    0, 2780,  866,  868,  868,  868,  868,  868,  868,
+      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
+      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
+      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
+      868,  868,  868,  868,  868,  868,  868,  868,  868,  868,
+      868,  868,  868,  868,  869,  869,  869,  869,  869,  869,
+      869,  869,  869,  869,  869,  869,  869,  869,  869,  869,
+
+      869,  869,  869,  869,  869,  869,  869,  869,  869,  869,
+      869,  869,  869,  869,  869,  869,  869,  869,  869,  869,
+      869,  869,  869,  869,  869,  869,  869,  869,  869,  869,
+      869,  869,  869,  869,  871, 1462,  871, 1464,    0, 1466,
+        0, 1479,  871,  871,  871,  871, 1462, 1467, 1464, 1462,
+     1466, 1475, 1479,  871,  871,  871,  871,  871, 1467,  871,
+     2818, 1467, 1475, 2818,    0, 1475,  871,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+
+      872,  872,  872,  872,  872,  872,  872,  872,  872,  872,
+      872,  872,  872,  872,  872,  872,  872,  878, 1480, 2833,
+     1482, 3017, 2833, 3144, 3017, 3217, 3144,  878, 3217, 1480,
+     1454, 1482, 1480,  878,  878,  878,  878,  878,  878,  878,
+      878, 1454,    0,    0,  878,  878,  878,  878,  878,  878,
+      878,  878,  878,  878,  878,  878,  878,  878,  879, 1481,
+      879, 1484,    0, 1485,    0, 1454,  879,  879,  879,  879,
+     1481, 1486, 1484, 1481, 1485, 1484, 1488,  879,  879,  879,
+      879,  879, 1486,  879,    0, 1486, 3296, 1488,    0, 3296,
+      879,  881,  881,  881,  881,  881,  881,  881,  881,  881,
+
+      881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
+      881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
+      881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
+      881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
+      881,  883,  883,  883,  883, 3307,    0, 1455, 3307, 1491,
+     1492,  883,  883,  883,    0,    0,  883,  884, 1455,  884,
+     1491, 1492, 1504, 1491, 1517,  884,  884,  884,  884,    0,
+        0,    0, 1503, 1504, 1505, 1517,  884,  884,  884,  884,
+      884, 1455,  884, 1503, 3322, 1505, 1503, 3322, 1505,  884,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      892, 3329,  892, 3378, 3329, 1521, 3378, 1535,  892,  892,
+
+      892,  892,  986,  986,  986,  986, 1521, 1516, 1535,  892,
+      892,  892,  892,  892,  986,  892, 1523,  986, 1516,    0,
+     1534, 1516,  892,  895, 1536, 1538, 1546, 1523,    0, 3491,
+     1523, 1534, 3491,  895, 1534, 1536, 1538, 1546, 1536,  895,
+      895,  895,  895,  895,  895,  895,  895,    0,    0,  986,
+      895,  895,  895,  895,  895,  895,  895,  895,  895,  895,
+      895,  895,  895,  895,  898,  898,  898,  898,    0,  898,
+      898, 1539,  898,    0,  898,  898,  898,  898,  898,  898,
+      898,  898, 1539,    0,  898, 1539,  898,  898,  898,  898,
+      898,  898,  898,  898,  898,    0,  898,  898,  898,  898,
+
+      898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
+      898,  898,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+      899,  899,  900, 1545, 1551, 1571, 3544, 3628, 3685, 3544,
+     3628, 3685,  900,    0, 1545, 1551, 1571, 1545,  900,  900,
+      900,  900,  900,  900,  900,  900,    0,    0,    0,  900,
+      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
+
+      900,  900,  900,  902, 1550,  902, 1561,    0, 1576,    0,
+     1580,  902,  902,  902,  902, 1550, 1570, 1561, 1550, 1576,
+     1561, 1580,  902,  902,  902,  902,  902, 1570,  902, 3898,
+     1570, 3913, 3898,    0, 3913,  902,  903,  903,  903,  903,
+      903,  903,  903,  903,  903,  903,  903,  903,  903,  903,
+      903,  903,  903,  903,  903,  903,  903,  903,  903,  903,
+      903,  903,  903,  903,  903,  903,  903,  903,  903,  903,
+      903,  903,  903,  903,  903,  903,  903,  903,  903,  903,
+      903,  903,  903,  903,  903,  903,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
+      904,  904,  904,  904,  904,  904,  905, 1587, 1588, 1598,
+     3928, 4106, 4109, 3928, 4106, 4109,  905,    0, 1587, 1588,
+     1598, 1587,  905,  905,  905,  905,  905,  905,  905,  905,
+        0,    0,    0,  905,  905,  905,  905,  905,  905,  905,
+      905,  905,  905,  905,  905,  905,  905,  906,  906,  906,
+      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
+      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
+
+      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
+      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
+      906,  906,  906,  906,  906,  906,  906,  907,  907,  907,
+      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
+      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
+      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
+      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
+      907,  907,  907,  907,  907,  907,  907,  910, 1589,  910,
+     1599,    0, 1609,    0, 1616,  910,  910,  910,  910, 1589,
+     1608, 1599, 1589, 1609, 1599, 1616,  910,  910,  910,  910,
+
+      910, 1608,  910, 4112, 1608, 4186, 4112,    0, 4186,  910,
+      911,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      911,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      911,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      911,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      911,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      916,  916,  916,  916,  916,  916,  916,  916,  916,  916,
+      917, 4192,  917, 4299, 4192, 1628, 4299, 1634,  917,  917,
+      917,  917, 1002, 1002, 1002, 1002, 1628, 1615, 1634,  917,
+      917,  917,  917,  917, 1002,  917, 1625, 1002, 1615,    0,
+     1627, 1615,  917,  920, 1630, 1638, 1646, 1625,    0, 4302,
+
+     1625, 1627, 4302,  920, 1627, 1630, 1638, 1646, 1630,  920,
+      920,  920,  920,  920,  920,  920,  920,    0,    0, 1002,
+      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
+      920,  920,  920,  920,  924, 1636, 1649, 1653, 4305, 4328,
+     4330, 4305, 4328, 4330,  924,    0, 1636, 1649, 1653, 1636,
+      924,  924,  924,  924,  924,  924,  924,  924,    0,    0,
+        0,  924,  924,  924,  924,  924,  924,  924,  924,  924,
+      924,  924,  924,  924,  924,  926,  926,  926,  926,  926,
+      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
+      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
+
+      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
+      926,  926,  926,  926,  926,  926,  926,  926,  926,  926,
+      926,  926,  926,  926,  926,  927,  927,  927,  927,  927,
+      927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+      927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+      927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+      927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
+      927,  927,  927,  927,  927,  929,  929,  929,  929,  929,
+      929,  929,  929,  929,  929,  929,  929,  929,  929,  929,
+      929,  929,  929,  929,  929,  929,  929,  929,  929,  929,
+
+      929,  929,  929,  929,  929,  929,  929,  929,  929,  929,
+      929,  929,  929,  929,  929,  929,  929,  929,  929,  929,
+      929,  929,  929,  929,  929,  930, 1640,  930, 1642,    0,
+     1657,    0, 1663,  930,  930,  930,  930, 1640, 1645, 1642,
+     1640, 1657, 1642, 1663,  930,  930,  930,  930,  930, 1645,
+      930, 4333, 1645, 4355, 4333,    0, 4355,  930,  931,  931,
+      931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+      931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+      931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+      931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
+
+      931,  931,  931,  931,  931,  931,  931,  931,  934,  934,
+      934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+      934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+      934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+      934,  934,  934,  934,  934,  934,  934,  934,  934,  934,
+      934,  934,  934,  934,  934,  934,  934,  934,  937, 1651,
+      937, 1655,    0, 1664,    0, 1680,  937,  937,  937,  937,
+     1651, 1659, 1655, 1651, 1664, 1655, 1680,  937,  937,  937,
+      937,  937, 1659,  937, 4358, 1659, 4361, 4358,    0, 4361,
+      937,  939,  939,  939,  939,  939,  939,  939,  939,  939,
+
+      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
+      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
+      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
+      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
+      939,  941,    0,  941,  941,  941, 1662, 1666, 1685,    0,
+        0,  941,  941,  941,  941,    0, 1669, 1662, 1666, 1685,
+     1662, 1666,  941,  941,  941,  941,  941, 1669,  941, 4424,
+     1669, 4438, 4424,    0, 4438,  941,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  948,  948,  948,  948,
+      948,  948,  948,  948,  948,  948,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  949,  949,  949,  949,
+      949,  949,  949,  949,  949,  949,  950, 1681,  950, 1689,
+        0, 1693,    0, 1697,  950,  950,  950,  950, 1681, 1699,
+     1689, 1681, 1693, 1689, 1697,  950,  950,  950,  950,  950,
+
+     1699,  950, 4590, 1699, 4592, 4590,    0, 4592,  950,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  954,
+     1705, 1711, 1719, 1723, 4594, 4748,    0, 4594, 4748,  954,
+        0, 1705, 1711, 1719, 1723,  954,  954,  954,  954,  954,
+      954,  954,  954,    0,    0,    0,  954,  954,  954,  954,
+      954,  954,  954,  954,  954,  954,  954,  954,  954,  954,
+
+      961,  961,  961,  961,  961,  961,  961,  961,  961,  961,
+      961,  961,  961,  961,  961,  961,  961,  961,  961,  961,
+      961,  961,  961,  961,  961,  961,  961,  961,  961,  961,
+      961,  961,  961,  961,  961,  961,  961,  961,  961,  961,
+      961,  961,  961,  961,  961,  961,  961,  961,  961,  961,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+      963,  963,  963,  963,  963,  963,  963,  963,  963,  963,
+
+      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
+      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
+      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
+      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
+      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
+
+      969, 4783,  969, 4830, 4783, 1695, 4830, 1696,  969,  969,
+      969,  969, 1170, 1170, 1170, 1170, 1695, 1707, 1696,  969,
+      969,  969,  969,  969, 1170,  969, 1710, 1170, 1707,    0,
+        0, 1707,  969,  970, 1712, 1726, 1728, 1710,    0,    0,
+     1710, 1695, 1696,  970,    0, 1712, 1726, 1728, 1712,  970,
+      970,  970,  970,  970,  970,  970,  970,    0,    0, 1170,
+      970,  970,  970,  970,  970,  970,  970,  970,  970,  970,
+      970,  970,  970,  970,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  974,  974,  974,  974,  974,  974,
+      974,  974,  974,  974,  974,  974,  974,  974,  974,  974,
+      974,  974,  974,  974,  974,  974,  974,  974,  974,  974,
+      974,  974,  974,  974,  974,  974,  974,  974,  974,  974,
+      974,  974,  974,  974,  974,  974,  974,  974,  974,  974,
+      974,  974,  974,  974,  975,  975,  975,  975,  975,  975,
+      975,  975,  975,  975,  975,  975,  975,  975,  975,  975,
+      975,  975,  975,  975,  975,  975,  975,  975,  975,  975,
+
+      975,  975,  975,  975,  975,  975,  975,  975,  975,  975,
+      975,  975,  975,  975,  975,  975,  975,  975,  975,  975,
+      975,  975,  975,  975,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  977,  977,  977,  977,  977,  977,
+      977,  977,  977,  977,  978,  978,  978,  978,  978,  978,
+      978,  978,  978,  978,  978,  978,  978,  978,  978,  978,
+      978,  978,  978,  978,  978,  978,  978,  978,  978,  978,
+
+      978,  978,  978,  978,  978,  978,  978,  978,  978,  978,
+      978,  978,  978,  978,  978,  978,  978,  978,  978,  978,
+      978,  978,  978,  978,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  987,  987,  987,  987,  987,  987,
+      987,  987,  987,  987,  995,  995,  995,  995,  995,  995,
+      995,  995,  995,  995,  995,  995,  995,  995,  995,  995,
+      995,  995,  995,  995,  995,  995,  995,  995,  995,  995,
+
+      995,  995,  995,  995,  995,  995,  995,  995,  995,  995,
+      995,  995,  995,  995,  995,  995,  995,  995,  995,  995,
+      995,  995,  995,  995,  997,  997,  997,  997,  997,  997,
+      997,  997,  997,  997,  997,  997,  997,  997,  997,  997,
+      997,  997,  997,  997,  997,  997,  997,  997,  997,  997,
+      997,  997,  997,  997,  997,  997,  997,  997,  997,  997,
+      997,  997,  997,  997,  997,  997,  997,  997,  997,  997,
+      997,  997,  997,  997,  998,  998,  998,  998,  998,  998,
+      998,  998,  998,  998,  998,  998,  998,  998,  998,  998,
+      998,  998,  998,  998,  998,  998,  998,  998,  998,  998,
+
+      998,  998,  998,  998,  998,  998,  998,  998,  998,  998,
+      998,  998,  998,  998,  998,  998,  998,  998,  998,  998,
+      998,  998,  998,  998, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
+     1003, 1003, 1003, 1003, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+
+     1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008,
+     1008, 1008, 1008, 1008, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
+     1012, 1012, 1012, 1012, 1016, 1016, 1016, 1016, 1016, 1016,
+     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
+     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
+
+     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
+     1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
+     1016, 1016, 1016, 1016, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020,
+     1020, 1020, 1020, 1020, 1022, 1022, 1022, 1022, 1022, 1022,
+     1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+     1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+
+     1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+     1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+     1022, 1022, 1022, 1022, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+     1033, 1033, 1033, 1033, 1039, 1039, 1039, 1039, 1039, 1039,
+     1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+     1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+
+     1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+     1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,
+     1039, 1039, 1039, 1039, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
+     1042, 1042, 1042, 1042, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
+     1043, 1043, 1043, 1043, 1045, 4955, 1045, 5045, 4955, 1731,
+     5045, 1735, 1045, 1045, 1045, 1045, 1185, 1185, 1185, 1185,
+     1731, 1715, 1735, 1045, 1045, 1045, 1045, 1045, 1185, 1045,
+     1724, 1185, 1715,    0, 1727, 1715, 1045, 1047, 1729, 1740,
+     1742, 1724,    0, 5077, 1724, 1727, 5077, 1047, 1727, 1729,
+     1740, 1742, 1729, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+     1047,    0,    0, 1185, 1047, 1047, 1047, 1047, 1047, 1047,
+     1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1051, 1051,
+
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+     1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1053, 1053,
+     1053, 1053,    0, 1053, 1053, 1730, 1053,    0, 1053, 1053,
+     1053, 1053, 1053, 1053, 1053, 1053, 1730,    0, 1053, 1730,
+     1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053,    0,
+     1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053,
+     1053, 1053, 1053, 1053, 1053, 1053, 1054, 5107, 1054, 5121,
+
+     5107, 1746, 5121, 1756, 1054, 1054, 1054, 1054, 1186, 1186,
+     1186, 1186, 1746, 1737, 1756, 1054, 1054, 1054, 1054, 1054,
+     1186, 1054, 1743, 1186, 1737,    0, 1755, 1737, 1054, 1061,
+     1758, 1760, 1762, 1743,    0, 5123, 1743, 1755, 5123, 1061,
+     1755, 1758, 1760, 1762, 1758, 1061, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061,    0,    0, 1186, 1061, 1061, 1061, 1061,
+     1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+     1065, 1761, 1065, 1764,    0, 1798,    0, 1812, 1065, 1065,
+     1065, 1065, 1761, 1771, 1764, 1761, 1798, 1764, 1812, 1065,
+     1065, 1065, 1065, 1065, 1771, 1065, 5125, 1771, 5139, 5125,
+        0, 5139, 1065, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+     1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071,
+
+     1071, 1071, 1071, 1073, 1775, 1073, 1783,    0, 1815,    0,
+     1818, 1073, 1073, 1073, 1073, 1775, 1791, 1783, 1775, 1815,
+     1783, 1818, 1073, 1073, 1073, 1073, 1073, 1791, 1073,    0,
+     1791,    0,    0,    0,    0, 1073, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
+     1074, 1074, 1074, 1074, 1074, 1074, 1075,    0,    0,    0,
+     1821,    0,    0,    0,    0,    0, 1075, 1639, 1639, 1639,
+
+     1639, 1821, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
+        0,    0, 1639, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
+     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1076, 1796, 1076,
+     1823,    0, 1827,    0, 1831, 1076, 1076, 1076, 1076, 1796,
+     1800, 1823, 1796, 1827, 1639, 1831, 1076, 1076, 1076, 1076,
+     1076, 1800, 1076,    0, 1800,    0,    0,    0,    0, 1076,
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+
+     1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
+     1084, 1811, 1841, 1843,    0,    0,    0,    0,    0,    0,
+     1084,    0, 1811, 1841, 1843, 1811, 1084, 1084, 1084, 1084,
+     1084, 1084, 1084, 1084,    0,    0,    0, 1084, 1084, 1084,
+     1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084,
+
+     1084, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+     1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
+     1085, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+     1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
+
+     1086, 1089, 1813, 1089, 1816,    0, 1848,    0, 1856, 1089,
+     1089, 1089, 1089, 1813, 1819, 1816, 1813, 1848, 1816, 1856,
+     1089, 1089, 1089, 1089, 1089, 1819, 1089,    0, 1819,    0,
+        0,    0,    0, 1089, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
+     1090, 1090, 1090, 1090, 1091, 1091, 1091, 1091, 1091, 1091,
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
+
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
+     1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091,
+     1091, 1091, 1091, 1091, 1095, 1095, 1095, 1095,    0,    0,
+        0, 1824, 1095,    0,    0, 1095, 1095, 1095, 1095, 1095,
+     1095, 1095, 1824,    0, 1095, 1824,    0,    0,    0,    0,
+        0,    0,    0,    0, 1095,    0, 1095, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
+     1096, 1096, 1096, 1096, 1096, 1096, 1096, 1097,    0, 1097,
+        0,    0, 1857,    0, 1864, 1097, 1097, 1097, 1097, 1415,
+     1415, 1415, 1415, 1857, 1830, 1864, 1097, 1097, 1097, 1097,
+     1097, 1415, 1097, 1840, 1415, 1830,    0, 1842, 1830, 1097,
+     1100, 1845, 1867, 1868, 1840,    0,    0, 1840, 1842,    0,
+     1100, 1842, 1845, 1867, 1868, 1845, 1100, 1100, 1100, 1100,
+     1100, 1100, 1100, 1100,    0,    0, 1415, 1100, 1100, 1100,
+     1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,
+     1100, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103,
+     1103, 1104, 1850, 1104, 1853,    0, 1873,    0, 1874, 1104,
+     1104, 1104, 1104, 1850, 1859, 1853, 1850, 1873, 1853, 1874,
+     1104, 1104, 1104, 1104, 1104, 1859, 1104,    0, 1859,    0,
+        0,    0,    0, 1104, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
+     1105, 1105, 1105, 1105, 1108, 1861, 1882, 1886,    0,    0,
+        0,    0,    0,    0, 1108,    0, 1861, 1882, 1886, 1861,
+     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,    0,    0,
+        0, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108,
+     1108, 1108, 1108, 1108, 1108, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+
+     1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109,
+     1109, 1109, 1109, 1109, 1109, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
+     1113, 1113, 1113, 1113, 1113, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+
+     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
+     1115, 1115, 1115, 1115, 1115, 1116, 1866, 1116, 1870,    0,
+     1898,    0, 1901, 1116, 1116, 1116, 1116, 1866, 1872, 1870,
+     1866, 1898, 1870, 1901, 1116, 1116, 1116, 1116, 1116, 1872,
+     1116,    0, 1872,    0,    0,    0,    0, 1116, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+     1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1122, 1876,
+
+     1914, 1916,    0,    0,    0,    0,    0,    0, 1122,    0,
+     1876, 1914, 1916, 1876, 1122, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122,    0,    0,    0, 1122, 1122, 1122, 1122, 1122,
+     1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123,
+     1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1126,
+     1877, 1126, 1881, 1919, 1919, 1919, 1919, 1126, 1126, 1126,
+
+     1126, 1877, 1903, 1881, 1877, 1919, 1881, 1921, 1126, 1126,
+     1126, 1126, 1126, 1903, 1126,    0, 1903,    0, 1921,    0,
+        0, 1126, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127,
+     1127, 1127, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
+     1129, 1129, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
+     1130, 1130, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+     1132, 1132, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135,
+     1135, 1135, 1136, 1906, 1936, 1937,    0,    0,    0,    0,
+        0,    0, 1136,    0, 1906, 1936, 1937, 1906, 1136, 1136,
+     1136, 1136, 1136, 1136, 1136, 1136,    0,    0,    0, 1136,
+
+     1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
+     1136, 1136, 1136, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
+     1137, 1137, 1137, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+
+     1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+     1138, 1138, 1138, 1141, 1912, 1141, 1915,    0, 1954,    0,
+     1959, 1141, 1141, 1141, 1141, 1912, 1923, 1915, 1912, 1954,
+     1915, 1959, 1141, 1141, 1141, 1141, 1141, 1923, 1141,    0,
+     1923,    0,    0,    0,    0, 1141, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
+     1142, 1142, 1142, 1142, 1142, 1142, 1143, 1143, 1143, 1143,
+
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
+     1143, 1143, 1143, 1143, 1143, 1143, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
+     1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148,
+
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+     1148, 1148, 1148, 1148, 1148, 1148, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1149, 1149, 1149, 1149, 1150, 1150, 1150, 1150,
+
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
+     1150, 1150, 1150, 1150, 1150, 1150, 1151,    0,    0,    0,
+     1960,    0,    0,    0,    0,    0, 1151, 1641, 1641, 1641,
+     1641, 1960, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+        0,    0, 1641, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
+     1151, 1151, 1151, 1151, 1151, 1151, 1151, 1153, 1931, 1153,
+     1967,    0, 1970,    0, 1972, 1153, 1153, 1153, 1153, 1931,
+
+     1939, 1967, 1931, 1970, 1641, 1972, 1153, 1153, 1153, 1153,
+     1153, 1939, 1153,    0, 1939,    0,    0,    0,    0, 1153,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+     1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
+     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
+     1159,    0,    0,    0, 1974,    0,    0,    0,    0,    0,
+     1159, 1656, 1656, 1656, 1656, 1974, 1159, 1159, 1159, 1159,
+     1159, 1159, 1159, 1159,    0,    0, 1656, 1159, 1159, 1159,
+     1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+     1159, 1161, 1942, 1161, 1987,    0, 2002,    0, 2004, 1161,
+     1161, 1161, 1161, 1942, 1953, 1987, 1942, 2002, 1656, 2004,
+     1161, 1161, 1161, 1161, 1161, 1953, 1161,    0, 1953,    0,
+        0,    0,    0, 1161, 1162, 1162, 1162, 1162, 1162, 1162,
+
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162,
+     1162, 1162, 1162, 1162, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+     1164, 1164, 1164, 1164, 1165, 1165, 1165, 1165, 1165, 1165,
+
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165,
+     1165, 1165, 1165, 1165, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
+     1166, 1166, 1166, 1166, 1167, 1167, 1167, 1167, 1167, 1167,
+
+     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
+     1167, 1167, 1167, 1167, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
+     1177, 1177, 1177, 1177, 1181, 1181, 1181, 1181, 1181, 1181,
+
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
+     1181, 1181, 1181, 1181, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
+     1187, 1187, 1187, 1187, 1200, 1200, 1200, 1200, 1200, 1200,
+
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
+     1200, 1200, 1200, 1200, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
+     1203, 1203, 1203, 1203, 1205, 1205, 1205, 1205, 1205, 1205,
+
+     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+     1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205,
+     1205, 1205, 1205, 1205, 1207, 1207, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
+     1207, 1207, 1207, 1207, 1210, 1210, 1210, 1210, 1210, 1210,
+
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1210,
+     1210, 1210, 1210, 1210, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
+     1221, 1221, 1221, 1221, 1225,    0,    0,    0, 2021,    0,
+
+        0,    0, 1225,    0, 1225, 1658, 1658, 1658, 1658, 2021,
+     1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225,    0,    0,
+     1658, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225,
+     1225, 1225, 1225, 1225, 1225, 1226, 1957, 1226, 2036,    0,
+     2064,    0, 2082, 1226, 1226, 1226, 1226, 1957, 1961, 2036,
+     1957, 2064, 1658, 2082, 1226, 1226, 1226, 1226, 1226, 1961,
+     1226,    0, 1961,    0,    0,    0,    0, 1226, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
+
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
+     1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
+     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1231, 1964,
+     1231, 1969,    0, 2088,    0, 2094, 1231, 1231, 1231, 1231,
+     1964, 1971, 1969, 1964, 2088, 1969, 2094, 1231, 1231, 1231,
+     1231, 1231, 1971, 1231,    0, 1971,    0,    0,    0,    0,
+
+     1231, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
+     1232, 1236,    0,    0,    0, 2101,    0,    0,    0,    0,
+        0, 1236, 1660, 1660, 1660, 1660, 2101, 1236, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236,    0,    0, 1660, 1236, 1236,
+     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,
+     1236, 1236, 1237, 1973, 1237, 2105,    0, 2107,    0, 2110,
+
+     1237, 1237, 1237, 1237, 1973, 1976, 2105, 1973, 2107, 1660,
+     2110, 1237, 1237, 1237, 1237, 1237, 1976, 1237,    0, 1976,
+        0,    0,    0,    0, 1237, 1239, 1239, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
+     1239, 1239, 1239, 1239, 1239, 1241, 1241, 1241, 1241,    0,
+     1241, 1241, 1982, 1241,    0, 1241, 1241, 1241, 1241, 1241,
+     1241, 1241, 1241, 1982,    0, 1241, 1982, 1241, 1241, 1241,
+
+     1241, 1241, 1241, 1241, 1241, 1241,    0, 1241, 1241, 1241,
+     1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
+     1241, 1241, 1241, 1242, 1986, 1242, 1988,    0, 2126,    0,
+     2130, 1242, 1242, 1242, 1242, 1986, 1990, 1988, 1986, 2126,
+     1988, 2130, 1242, 1242, 1242, 1242, 1242, 1990, 1242,    0,
+     1990,    0,    0,    0,    0, 1242, 1251, 1251, 1251, 1251,
+     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
+     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
+     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
+     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
+
+     1251, 1251, 1251, 1251, 1251, 1251, 1256, 1256, 1256, 1256,
+     1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
+     1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
+     1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
+     1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
+     1256, 1256, 1256, 1256, 1256, 1256, 1258, 1258, 1258, 1258,
+     1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
+     1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
+     1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
+     1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
+
+     1258, 1258, 1258, 1258, 1258, 1258, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
+     1259, 1259, 1259, 1259, 1259, 1259, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+
+     1260, 1260, 1260, 1260, 1260, 1260, 1261, 2000, 1261, 2005,
+        0, 2133,    0, 2138, 1261, 1261, 1261, 1261, 2000, 2020,
+     2005, 2000, 2133, 2005, 2138, 1261, 1261, 1261, 1261, 1261,
+     2020, 1261,    0, 2020,    0,    0,    0,    0, 1261, 1262,
+     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
+     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
+     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
+     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
+     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1266,
+     2029, 2142, 2144,    0,    0,    0,    0,    0,    0, 1266,
+
+        0, 2029, 2142, 2144, 2029, 1266, 1266, 1266, 1266, 1266,
+     1266, 1266, 1266,    0,    0,    0, 1266, 1266, 1266, 1266,
+     1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266,
+     1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+     1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+     1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+     1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+     1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
+     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
+     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
+
+     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
+     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
+     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
+     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
+     1274, 2032, 1274, 2037,    0, 2148,    0, 2149, 1274, 1274,
+     1274, 1274, 2032, 2052, 2037, 2032, 2148, 2037, 2149, 1274,
+
+     1274, 1274, 1274, 1274, 2052, 1274,    0, 2052,    0,    0,
+        0,    0, 1274, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
+     1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
+     1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
+     1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
+     1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
+     1275, 1275, 1275, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
+     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
+     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
+     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
+
+     1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281,
+     1281, 1281, 1281, 1282, 2065, 2155, 2160,    0,    0,    0,
+        0,    0,    0, 1282,    0, 2065, 2155, 2160, 2065, 1282,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282,    0,    0,    0,
+     1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+     1282, 1282, 1282, 1282, 1283, 1283, 1283, 1283, 1283, 1283,
+     1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
+     1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
+     1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
+     1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
+
+     1283, 1283, 1283, 1283, 1286, 2071, 1286, 2074,    0, 2162,
+        0, 2163, 1286, 1286, 1286, 1286, 2071, 2080, 2074, 2071,
+     2162, 2074, 2163, 1286, 1286, 1286, 1286, 1286, 2080, 1286,
+        0, 2080,    0,    0,    0,    0, 1286, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1292, 1292, 1292,
+     1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
+
+     1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
+     1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
+     1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292, 1292,
+     1292, 1292, 1292, 1292, 1292, 1292, 1292, 1296, 2084,    0,
+     2165,    0,    0,    0,    0, 1296,    0, 1296,    0, 2084,
+     1920, 2165, 2084, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
+     1296, 1920,    0,    0, 1296, 1296, 1296, 1296, 1296, 1296,
+     1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1297,    0,
+        0,    0, 2175,    0,    0,    0, 1920,    0, 1297, 1851,
+     1851, 1851, 1851, 2175, 1297, 1297, 1297, 1297, 1297, 1297,
+
+     1297, 1297,    0,    0, 1851, 1297, 1297, 1297, 1297, 1297,
+     1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1298,
+     2090, 1298, 2177,    0, 2182,    0, 2187, 1298, 1298, 1298,
+     1298, 2090, 2093, 2177, 2090, 2182, 1851, 2187, 1298, 1298,
+     1298, 1298, 1298, 2093, 1298,    0, 2093,    0,    0,    0,
+        0, 1298, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+
+     1300, 1300, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
+     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
+     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
+     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
+     1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
+     1301, 1301, 1303, 2095, 1303, 2097,    0, 2199,    0, 2204,
+     1303, 1303, 1303, 1303, 2095, 2103, 2097, 2095, 2199, 2097,
+     2204, 1303, 1303, 1303, 1303, 1303, 2103, 1303,    0, 2103,
+        0,    0,    0,    0, 1303, 1304, 1304, 1304, 1304, 1304,
+     1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+
+     1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+     1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+     1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+     1304, 1304, 1304, 1304, 1304, 1307,    0,    0,    0, 2225,
+        0,    0,    0,    0,    0, 1307, 1860, 1860, 1860, 1860,
+     2225, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,    0,
+        0, 1860, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+     1307, 1307, 1307, 1307, 1307, 1307, 1308, 2108, 1308, 2228,
+        0, 2231,    0, 2234, 1308, 1308, 1308, 1308, 2108, 2112,
+     2228, 2108, 2231, 1860, 2234, 1308, 1308, 1308, 1308, 1308,
+
+     2112, 1308,    0, 2112,    0,    0,    0,    0, 1308, 1311,
+     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1313,
+     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313,
+     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313,
+     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313,
+     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313,
+
+     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1314,
+     2117, 1314, 2120,    0, 2251,    0, 2261, 1314, 1314, 1314,
+     1314, 2117, 2124, 2120, 2117, 2251, 2120, 2261, 1314, 1314,
+     1314, 1314, 1314, 2124, 1314,    0, 2124,    0,    0,    0,
+        0, 1314, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+     1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+     1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+     1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+     1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+     1320, 1320, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
+
+     1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
+     1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
+     1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
+     1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
+     1326, 1326, 1328, 2131, 1328, 2137,    0, 2282,    0, 2286,
+     1328, 1328, 1328, 1328, 2131, 2141, 2137, 2131, 2282, 2137,
+     2286, 1328, 1328, 1328, 1328, 1328, 2141, 1328,    0, 2141,
+        0,    0,    0,    0, 1328, 1329, 1329, 1329, 1329, 1329,
+     1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
+     1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
+
+     1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
+     1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
+     1329, 1329, 1329, 1329, 1329, 1332, 1332, 1332, 1332, 1332,
+     1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332,
+     1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332,
+     1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332,
+     1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332,
+     1332, 1332, 1332, 1332, 1332, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
+     1336, 1336, 1336, 1336, 1336, 1337, 2147, 1337, 2151,    0,
+     2310,    0, 2322, 1337, 1337, 1337, 1337, 2147, 2154, 2151,
+     2147, 2310, 2151, 2322, 1337, 1337, 1337, 1337, 1337, 2154,
+     1337,    0, 2154,    0,    0,    0,    0, 1337, 1338, 1338,
+     1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
+     1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
+     1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
+     1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
+
+     1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1341, 2164,
+     2339, 2352,    0,    0,    0,    0,    0,    0, 1341,    0,
+     2164, 2339, 2352, 2164, 1341, 1341, 1341, 1341, 1341, 1341,
+     1341, 1341,    0,    0,    0, 1341, 1341, 1341, 1341, 1341,
+     1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1345,
+     1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345,
+     1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345,
+     1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345,
+     1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345,
+     1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1347,
+
+     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
+     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
+     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
+     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
+     1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1348,
+     2167, 1348, 2173,    0, 2375,    0, 2393, 1348, 1348, 1348,
+     1348, 2167, 2176, 2173, 2167, 2375, 2173, 2393, 1348, 1348,
+     1348, 1348, 1348, 2176, 1348,    0, 2176,    0,    0,    0,
+        0, 1348, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+
+     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+     1349, 1349, 1354, 2181, 2406, 2407,    0,    0,    0,    0,
+        0,    0, 1354,    0, 2181, 2406, 2407, 2181, 1354, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354,    0,    0,    0, 1354,
+     1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
+     1354, 1354, 1354, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
+     1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
+     1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
+
+     1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
+     1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
+     1355, 1355, 1355, 1358, 2186, 1358, 2194,    0, 2420,    0,
+     2422, 1358, 1358, 1358, 1358, 2186, 2202, 2194, 2186, 2420,
+     2194, 2422, 1358, 1358, 1358, 1358, 1358, 2202, 1358,    0,
+     2202,    0,    0,    0,    0, 1358, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+     1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
+
+     1360, 1360, 1360, 1360, 1360, 1360, 1363, 1363, 1363, 1363,
+     1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
+     1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
+     1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
+     1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
+     1363, 1363, 1363, 1363, 1363, 1363, 1364,    0,    0,    0,
+     2427,    0,    0,    0,    0,    0, 1364, 1879, 1879, 1879,
+     1879, 2427, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+        0,    0, 1879, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
+     1364, 1364, 1364, 1364, 1364, 1364, 1364, 1366, 2211, 1366,
+
+     2440,    0, 2447,    0, 2448, 1366, 1366, 1366, 1366, 2211,
+     2224, 2440, 2211, 2447, 1879, 2448, 1366, 1366, 1366, 1366,
+     1366, 2224, 1366,    0, 2224,    0,    0,    0,    0, 1366,
+     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
+     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
+     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
+     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
+     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
+     1373, 1373, 1373, 1373,    0, 1373, 1373, 2229, 1373,    0,
+     1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 2229,    0,
+
+     1373, 2229, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
+     1373,    0, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
+     1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1374, 2233,
+     1374, 2236,    0, 2450,    0, 2456, 1374, 1374, 1374, 1374,
+     2233, 2250, 2236, 2233, 2450, 2236, 2456, 1374, 1374, 1374,
+     1374, 1374, 2250, 1374,    0, 2250,    0,    0,    0,    0,
+     1374, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+     1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+     1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+     1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+
+     1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
+     1380, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
+     1381, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+     1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+     1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+     1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+
+     1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+     1382, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+     1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+     1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+     1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+     1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
+     1383, 1384,    0,    0,    0, 2461,    0,    0,    0,    0,
+        0, 1384, 2122, 2122, 2122, 2122, 2461, 1384, 1384, 1384,
+     1384, 1384, 1384, 1384, 1384,    0,    0, 2122, 1384, 1384,
+     1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384,
+
+     1384, 1384, 1386, 2258, 1386, 2463,    0, 2465,    0, 2466,
+     1386, 1386, 1386, 1386, 2258, 2260, 2463, 2258, 2465, 2122,
+     2466, 1386, 1386, 1386, 1386, 1386, 2260, 1386,    0, 2260,
+        0,    0,    0,    0, 1386, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+     1387, 1387, 1387, 1387, 1387, 1388, 2270, 1388, 2281,    0,
+     2472,    0, 2474, 1388, 1388, 1388, 1388, 2270, 2287, 2281,
+
+     2270, 2472, 2281, 2474, 1388, 1388, 1388, 1388, 1388, 2287,
+     1388,    0, 2287,    0,    0,    0,    0, 1388, 1389, 1389,
+     1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
+     1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
+     1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
+     1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389,
+     1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1392, 2292,
+     2475, 2481,    0,    0,    0,    0,    0,    0, 1392,    0,
+     2292, 2475, 2481, 2292, 1392, 1392, 1392, 1392, 1392, 1392,
+     1392, 1392,    0,    0,    0, 1392, 1392, 1392, 1392, 1392,
+
+     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1393,
+     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
+     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
+     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
+     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
+     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1396,
+     1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
+     1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
+     1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
+     1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
+
+     1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1398,
+     1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398,
+     1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398,
+     1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398,
+     1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398,
+     1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1399,
+     2296, 1399, 2309,    0, 2484,    0, 2487, 1399, 1399, 1399,
+     1399, 2296, 2312, 2309, 2296, 2484, 2309, 2487, 1399, 1399,
+     1399, 1399, 1399, 2312, 1399,    0, 2312,    0,    0,    0,
+        0, 1399, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
+
+     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
+     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
+     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
+     1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403,
+     1403, 1403, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+     1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+     1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+     1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+     1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+     1408, 1408, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+
+     1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+     1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+     1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+     1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+     1412, 1412, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+     1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+     1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+     1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+     1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
+     1414, 1414, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
+
+     1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
+     1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
+     1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
+     1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
+     1425, 1425, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
+     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
+     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
+     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
+     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
+     1427, 1427, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
+
+     1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
+     1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
+     1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
+     1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
+     1429, 1429, 1432, 1432, 1432, 1432,    0, 2321,    0, 2338,
+        0, 2350, 1432, 1432,    0, 2351, 2361, 1432, 2321, 1432,
+     2338, 2321, 2350, 2338, 2374, 2350, 2351, 2361, 2380, 2351,
+     2361,    0, 2395, 2401, 2409, 2374,    0,    0, 2374, 2380,
+        0,    0, 2380, 2395, 2401, 2409, 2395, 2401, 2409, 1432,
+     1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
+
+     1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
+     1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
+     1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
+     1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
+     1436, 2411, 2489, 2495,    0,    0,    0,    0,    0,    0,
+     1436,    0, 2411, 2489, 2495, 2411, 1436, 1436, 1436, 1436,
+     1436, 1436, 1436, 1436,    0,    0,    0, 1436, 1436, 1436,
+     1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
+     1436, 1437, 2419, 2500, 2501,    0,    0,    0,    0,    0,
+        0, 1437,    0, 2419, 2500, 2501, 2419, 1437, 1437, 1437,
+
+     1437, 1437, 1437, 1437, 1437,    0,    0,    0, 1437, 1437,
+     1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
+     1437, 1437, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+     1441, 1441, 1443, 2424, 2505, 2510,    0,    0,    0,    0,
+        0,    0, 1443,    0, 2424, 2505, 2510, 2424, 1443, 1443,
+     1443, 1443, 1443, 1443, 1443, 1443,    0,    0,    0, 1443,
+
+     1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443,
+     1443, 1443, 1443, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
+     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
+     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
+     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
+     1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
+     1445, 1445, 1445, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+     1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+     1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+     1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+
+     1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+     1446, 1446, 1446, 1447, 2426, 2523, 2527,    0,    0,    0,
+        0,    0,    0, 1447,    0, 2426, 2523, 2527, 2426, 1447,
+     1447, 1447, 1447, 1447, 1447, 1447, 1447,    0,    0,    0,
+     1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
+     1447, 1447, 1447, 1447, 1449, 2428, 2533, 2546,    0,    0,
+        0,    0,    0,    0, 1449,    0, 2428, 2533, 2546, 2428,
+     1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,    0,    0,
+        0, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
+     1449, 1449, 1449, 1449, 1449, 1460, 1460, 1460, 1460, 1460,
+
+     1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460,
+     1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460,
+     1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460,
+     1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460,
+     1460, 1460, 1460, 1460, 1460, 1463, 1463, 1463, 1463, 1463,
+     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+     1463, 1463, 1463, 1463, 1463, 1468, 1468, 1468, 1468, 1468,
+
+     1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+     1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+     1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+     1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468,
+     1468, 1468, 1468, 1468, 1468, 1469, 1469, 1469, 1469, 1469,
+     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
+     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
+     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
+     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
+     1469, 1469, 1469, 1469, 1469, 1471, 2429, 1471, 2439,    0,
+
+     2571,    0, 2574, 1471, 1471, 1471, 1471, 2429, 2446, 2439,
+     2429, 2571, 2439, 2574, 1471, 1471, 1471, 1471, 1471, 2446,
+     1471,    0, 2446,    0,    0,    0,    0, 1471, 1472, 1472,
+     1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472,
+     1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472,
+     1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472,
+     1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472,
+     1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1473,    0,
+        0,    0, 2586,    0,    0,    0,    0,    0, 1473, 2139,
+     2139, 2139, 2139, 2586, 1473, 1473, 1473, 1473, 1473, 1473,
+
+     1473, 1473,    0,    0, 2139, 1473, 1473, 1473, 1473, 1473,
+     1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1474,
+     2452, 1474, 2604,    0, 2615,    0, 2638, 1474, 1474, 1474,
+     1474, 2452, 2455, 2604, 2452, 2615, 2139, 2638, 1474, 1474,
+     1474, 1474, 1474, 2455, 1474,    0, 2455,    0,    0,    0,
+        0, 1474, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+     1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+     1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+     1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+     1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+
+     1478, 1478, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+     1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+     1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+     1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+     1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+     1483, 1483, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489,
+     1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489,
+     1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489,
+     1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489,
+     1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489,
+
+     1489, 1489, 1493, 2460, 2653, 2665,    0,    0,    0,    0,
+     1493,    0, 1493,    0, 2460, 2653, 2665, 2460, 1493, 1493,
+     1493, 1493, 1493, 1493, 1493, 1493,    0,    0,    0, 1493,
+     1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493,
+     1493, 1493, 1493, 1494, 1494, 1494, 1494, 1494, 1494, 1494,
+     1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494,
+     1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494,
+     1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494,
+     1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494,
+     1494, 1494, 1494, 1495, 2462, 1495, 2464,    0, 2675,    0,
+
+     2677, 1495, 1495, 1495, 1495, 2462, 2468, 2464, 2462, 2675,
+     2464, 2677, 1495, 1495, 1495, 1495, 1495, 2468, 1495,    0,
+     2468,    0,    0,    0,    0, 1495, 1497, 1497, 1497, 1497,
+     1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+     1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+     1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+     1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+     1497, 1497, 1497, 1497, 1497, 1497, 1498, 1498, 1498, 1498,
+     1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+     1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+
+     1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+     1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+     1498, 1498, 1498, 1498, 1498, 1498, 1500, 2471, 1500, 2473,
+        0, 2688,    0, 2694, 1500, 1500, 1500, 1500, 2471, 2477,
+     2473, 2471, 2688, 2473, 2694, 1500, 1500, 1500, 1500, 1500,
+     2477, 1500,    0, 2477,    0,    0,    0,    0, 1500, 1501,
+     1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
+     1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
+     1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
+     1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501,
+
+     1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
+     1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1508,
+        0,    0,    0, 2698,    0,    0,    0,    0,    0, 1508,
+     2146, 2146, 2146, 2146, 2698, 1508, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508,    0,    0, 2146, 1508, 1508, 1508, 1508,
+     1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508,
+
+     1509, 2480, 1509, 2715,    0, 2741,    0, 2749, 1509, 1509,
+     1509, 1509, 2480, 2485, 2715, 2480, 2741, 2146, 2749, 1509,
+     1509, 1509, 1509, 1509, 2485, 1509,    0, 2485,    0,    0,
+        0,    0, 1509, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
+     1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
+     1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
+     1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
+     1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510,
+     1510, 1510, 1510, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+     1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+
+     1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+     1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+     1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+     1512, 1512, 1512, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+     1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+     1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+     1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+     1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
+     1514, 1514, 1514, 1515, 2488, 1515, 2491,    0, 2754,    0,
+     2766, 1515, 1515, 1515, 1515, 2488, 2499, 2491, 2488, 2754,
+
+     2491, 2766, 1515, 1515, 1515, 1515, 1515, 2499, 1515,    0,
+     2499,    0,    0,    0,    0, 1515, 1522, 1522, 1522, 1522,
+     1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+     1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+     1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+     1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1522,
+     1522, 1522, 1522, 1522, 1522, 1522, 1524, 1524, 1524, 1524,
+     1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
+     1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
+     1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
+
+     1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524,
+     1524, 1524, 1524, 1524, 1524, 1524, 1525, 1525, 1525, 1525,
+     1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+     1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+     1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+     1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
+     1525, 1525, 1525, 1525, 1525, 1525, 1526, 1526, 1526, 1526,
+     1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+     1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+     1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+
+     1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
+     1526, 1526, 1526, 1526, 1526, 1526, 1528, 1528, 1528, 1528,
+     1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+     1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+     1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+     1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528,
+     1528, 1528, 1528, 1528, 1528, 1528, 1529, 2502, 1529, 2507,
+        0, 2779,    0, 2785, 1529, 1529, 1529, 1529, 2502, 2517,
+     2507, 2502, 2779, 2507, 2785, 1529, 1529, 1529, 1529, 1529,
+     2517, 1529,    0, 2517,    0,    0,    0,    0, 1529, 1530,
+
+     1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530,
+     1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530,
+     1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530,
+     1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530,
+     1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1531,
+        0,    0,    0, 2787,    0,    0,    0,    0,    0, 1531,
+     2150, 2150, 2150, 2150, 2787, 1531, 1531, 1531, 1531, 1531,
+     1531, 1531, 1531,    0,    0, 2150, 1531, 1531, 1531, 1531,
+     1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+     1532, 2540, 1532, 2788,    0, 2795,    0, 2797, 1532, 1532,
+
+     1532, 1532, 2540, 2544, 2788, 2540, 2795, 2150, 2797, 1532,
+     1532, 1532, 1532, 1532, 2544, 1532,    0, 2544,    0,    0,
+        0,    0, 1532, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+     1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+     1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+     1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+     1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533,
+     1533, 1533, 1533, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+     1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+     1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+
+     1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+     1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+     1541, 1541, 1541, 1542,    0,    0,    0, 2799,    0,    0,
+        0,    0,    0, 1542, 2476, 2476, 2476, 2476, 2799, 1542,
+     1542, 1542, 1542, 1542, 1542, 1542, 1542,    0,    0, 2476,
+     1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542,
+     1542, 1542, 1542, 1542, 1544, 2545, 1544, 2801,    0, 2802,
+        0, 2809, 1544, 1544, 1544, 1544, 2545, 2549, 2801, 2545,
+     2802, 2476, 2809, 1544, 1544, 1544, 1544, 1544, 2549, 1544,
+        0, 2549,    0,    0,    0,    0, 1544, 1547, 1547, 1547,
+
+     1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+     1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+     1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+     1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+     1547, 1547, 1547, 1547, 1547, 1547, 1547, 1548, 1548, 1548,
+     1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+     1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+     1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+     1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548,
+     1548, 1548, 1548, 1548, 1548, 1548, 1548, 1552, 2567, 2811,
+
+     2813,    0,    0,    0,    0, 1552,    0, 1552,    0, 2567,
+     2811, 2813, 2567, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
+     1552,    0,    0,    0, 1552, 1552, 1552, 1552, 1552, 1552,
+     1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1553, 2570,
+     1553, 2572,    0, 2819,    0, 2823, 1553, 1553, 1553, 1553,
+     2570, 2581, 2572, 2570, 2819, 2572, 2823, 1553, 1553, 1553,
+     1553, 1553, 2581, 1553,    0, 2581,    0,    0,    0,    0,
+     1553, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555,
+     1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555,
+     1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555,
+
+     1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555,
+     1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555,
+     1555, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
+     1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
+     1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
+     1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
+     1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556,
+     1556, 1558, 2588, 1558, 2589,    0, 2831,    0, 2836, 1558,
+     1558, 1558, 1558, 2588, 2591, 2589, 2588, 2831, 2589, 2836,
+     1558, 1558, 1558, 1558, 1558, 2591, 1558,    0, 2591,    0,
+
+        0,    0,    0, 1558, 1559, 1559, 1559, 1559, 1559, 1559,
+     1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+     1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+     1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+     1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559,
+     1559, 1559, 1559, 1559, 1562, 2603, 2840, 2844,    0,    0,
+        0,    0,    0,    0, 1562,    0, 2603, 2840, 2844, 2603,
+     1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,    0,    0,
+        0, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562,
+     1562, 1562, 1562, 1562, 1562, 1563, 2606, 1563, 2614,    0,
+
+     2868,    0, 2893, 1563, 1563, 1563, 1563, 2606, 2625, 2614,
+     2606, 2868, 2614, 2893, 1563, 1563, 1563, 1563, 1563, 2625,
+     1563,    0, 2625,    0,    0,    0,    0, 1563, 1566, 1566,
+     1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+     1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+     1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+     1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+     1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1568, 1568,
+     1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568,
+     1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568,
+
+     1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568,
+     1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568,
+     1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1569, 2652,
+     1569, 2664,    0, 2903,    0, 2909, 1569, 1569, 1569, 1569,
+     2652, 2667, 2664, 2652, 2903, 2664, 2909, 1569, 1569, 1569,
+     1569, 1569, 2667, 1569,    0, 2667,    0,    0,    0,    0,
+     1569, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577,
+     1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577,
+     1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577,
+     1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577,
+
+     1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577,
+     1577, 1581, 2674, 2929, 2936,    0,    0,    0,    0, 1581,
+        0, 1581,    0, 2674, 2929, 2936, 2674, 1581, 1581, 1581,
+     1581, 1581, 1581, 1581, 1581,    0,    0,    0, 1581, 1581,
+     1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
+     1581, 1581, 1582, 2679, 1582, 2687,    0, 2937,    0, 2961,
+     1582, 1582, 1582, 1582, 2679, 2690, 2687, 2679, 2937, 2687,
+     2961, 1582, 1582, 1582, 1582, 1582, 2690, 1582,    0, 2690,
+        0,    0,    0,    0, 1582, 1583, 1583, 1583, 1583, 1583,
+     1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583,
+
+     1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583,
+     1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583,
+     1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583,
+     1583, 1583, 1583, 1583, 1583, 1584, 1584, 1584, 1584, 1584,
+     1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584,
+     1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584,
+     1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584,
+     1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584,
+     1584, 1584, 1584, 1584, 1584, 1586, 2693, 1586, 2696,    0,
+     2964,    0, 2967, 1586, 1586, 1586, 1586, 2693, 2699, 2696,
+
+     2693, 2964, 2696, 2967, 1586, 1586, 1586, 1586, 1586, 2699,
+     1586,    0, 2699,    0,    0,    0,    0, 1586, 1590, 1590,
+     1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+     1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+     1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+     1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590,
+     1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1592, 1592,
+     1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+     1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+     1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+
+     1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+     1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1593, 2702,
+     2969, 2979,    0,    0,    0,    0,    0,    0, 1593,    0,
+     2702, 2969, 2979, 2702, 1593, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593,    0,    0,    0, 1593, 1593, 1593, 1593, 1593,
+     1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+
+     1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1595,
+     2714, 1595, 2717,    0, 2986,    0, 3018, 1595, 1595, 1595,
+     1595, 2714, 2737, 2717, 2714, 2986, 2717, 3018, 1595, 1595,
+     1595, 1595, 1595, 2737, 1595,    0, 2737,    0,    0,    0,
+        0, 1595, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+     1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596,
+     1596, 1596, 1600, 2752, 3037, 3051,    0,    0,    0,    0,
+
+        0,    0, 1600,    0, 2752, 3037, 3051, 2752, 1600, 1600,
+     1600, 1600, 1600, 1600, 1600, 1600,    0,    0,    0, 1600,
+     1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600,
+     1600, 1600, 1600, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+     1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+     1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+     1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+     1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601,
+     1601, 1601, 1601, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+     1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+
+     1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+     1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+     1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604,
+     1604, 1604, 1604, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+     1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+     1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+     1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+     1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+     1606, 1606, 1606, 1607, 2760, 1607, 2765,    0, 3059,    0,
+     3061, 1607, 1607, 1607, 1607, 2760, 2770, 2765, 2760, 3059,
+
+     2765, 3061, 1607, 1607, 1607, 1607, 1607, 2770, 1607,    0,
+     2770,    0,    0,    0,    0, 1607, 1613, 1613, 1613, 1613,
+     1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+     1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+     1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+     1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613,
+     1613, 1613, 1613, 1613, 1613, 1613, 1617, 2778, 3069, 3083,
+        0,    0,    0,    0, 1617,    0, 1617,    0, 2778, 3069,
+     3083, 2778, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617,
+        0,    0,    0, 1617, 1617, 1617, 1617, 1617, 1617, 1617,
+
+     1617, 1617, 1617, 1617, 1617, 1617, 1617, 1619, 2781, 1619,
+     2784,    0, 3095,    0, 3120, 1619, 1619, 1619, 1619, 2781,
+     2786, 2784, 2781, 3095, 2784, 3120, 1619, 1619, 1619, 1619,
+     1619, 2786, 1619,    0, 2786,    0,    0,    0,    0, 1619,
+     1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
+     1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
+     1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
+     1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
+     1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620,
+     1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+
+     1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+     1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+     1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+     1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+     1623, 2790, 1623, 2794,    0, 3122,    0, 3126, 1623, 1623,
+     1623, 1623, 2790, 2796, 2794, 2790, 3122, 2794, 3126, 1623,
+     1623, 1623, 1623, 1623, 2796, 1623,    0, 2796,    0,    0,
+        0,    0, 1623, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+     1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+     1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+
+     1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+     1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
+     1626, 1626, 1626, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+     1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+     1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+     1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+     1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
+     1629, 1629, 1629, 1631, 1631, 1631, 1631, 1631, 1631, 1631,
+     1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631,
+     1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631,
+
+     1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631,
+     1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631,
+     1631, 1631, 1631, 1635, 1635, 1635, 1635,    0, 2798, 2800,
+     2804,    0,    0,    0, 2808, 1635, 2810,    0, 1635, 2798,
+     2800, 2804, 2798, 2800, 2804, 2808, 2815, 2810, 2808,    0,
+     2810, 2821, 2825, 2828,    0,    0,    0, 2815, 3129,    0,
+     2815,    0, 2821, 2825, 2828, 2821, 2825, 2828,    0, 3129,
+     1635, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+     1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+     1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+
+     1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+     1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
+     1637, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+     1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+     1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+     1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+     1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644,
+     1644, 1650, 1650, 1650, 1650,    0, 2830, 2838, 2842,    0,
+        0,    0, 2846, 1650, 2849,    0, 1650, 2830, 2838, 2842,
+     2830, 2838, 2842, 2846, 2853, 2849, 2846,    0, 2849, 2856,
+
+     2867, 2875,    0,    0,    0, 2853, 3133,    0, 2853,    0,
+     2856, 2867, 2875, 2856, 2867, 2875,    0, 3133, 1650, 1652,
+     1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
+     1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
+     1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
+     1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652,
+     1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1654,
+     1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+     1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+     1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+
+     1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
+     1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661,
+     1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1665,
+     1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+     1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+     1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+
+     1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+     1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1667,
+     1667, 1667, 1667,    0, 2882,    0, 2892,    0, 2901, 1667,
+     1667,    0, 2905, 2908, 1667, 2882, 1667, 2892, 2882, 2901,
+     2892, 2919, 2901, 2905, 2908, 2928, 2905, 2908,    0, 2934,
+     2935, 2938, 2919,    0,    0, 2919, 2928,    0,    0, 2928,
+     2934, 2935, 2938, 2934, 2935, 2938, 1667, 1668, 1668, 1668,
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+     1668, 1668, 1668, 1668, 1668, 1668, 1668, 1671, 1671, 1671,
+     1671,    0,    0,    0, 2941, 2958, 2962, 1671, 1671,    0,
+     2966, 2971, 1671, 1671, 1671, 2941, 2958, 2962, 2941, 2958,
+     2962, 2966, 2971, 2978, 2966, 2971,    0, 2981, 2987, 3005,
+        0,    0,    0,    0, 2978,    0,    0, 2978, 2981, 2987,
+     3005, 2981, 2987, 3005, 1671, 1673, 1673, 1673, 1673, 1673,
+     1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+     1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+     1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+
+     1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+     1673, 1673, 1673, 1673, 1673, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674,
+     1674, 1674, 1674, 1674, 1674, 1676, 3015, 3135, 3136,    0,
+        0,    0,    0,    0,    0, 1676,    0, 3015, 3135, 3136,
+     3015, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,    0,
+        0,    0, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+
+     1676, 1676, 1676, 1676, 1676, 1676, 1682, 1682, 1682, 1682,
+     1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+     1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+     1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+     1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+     1682, 1682, 1682, 1682, 1682, 1682, 1683, 3019, 3145, 3146,
+        0,    0,    0,    0,    0,    0, 1683,    0, 3019, 3145,
+     3146, 3019, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+        0,    0,    0, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+     1683, 1683, 1683, 1683, 1683, 1683, 1683, 1684, 3022, 3153,
+
+     3158,    0,    0,    0,    0,    0,    0, 1684,    0, 3022,
+     3153, 3158, 3022, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+     1684,    0,    0,    0, 1684, 1684, 1684, 1684, 1684, 1684,
+     1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1687, 1687,
+     1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687,
+     1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687,
+     1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687,
+     1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687,
+     1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1688, 1688,
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+     1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1690, 1690,
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+     1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1691, 3029,
+     3159, 3164,    0,    0,    0,    0,    0,    0, 1691,    0,
+
+     3029, 3159, 3164, 3029, 1691, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691,    0,    0,    0, 1691, 1691, 1691, 1691, 1691,
+     1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1698,
+     1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+     1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+     1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+     1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+     1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1700,
+     1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,
+     1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,
+
+     1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,
+     1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700,
+     1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701,
+     1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1703,
+     1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703,
+     1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703,
+
+     1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703,
+     1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703,
+     1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704,
+     1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1706,
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
+
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1708,
+     1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
+     1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
+     1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
+     1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708,
+     1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1709,
+     1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
+     1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
+
+     1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
+     1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709,
+     1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1713,
+     1713, 1713, 1713,    0, 1713, 1713, 3035, 1713,    0, 1713,
+     1713, 1713, 1713, 1713, 1713, 1713, 1713, 3035,    0, 1713,
+     3035, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
+        0, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713,
+     1713, 1713, 1713, 1713, 1713, 1713, 1713, 1714, 1714, 1714,
+     1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
+     1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
+
+     1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
+     1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714,
+     1714, 1714, 1714, 1714, 1714, 1714, 1714, 1716, 1716, 1716,
+     1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+     1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+     1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+     1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
+     1716, 1716, 1716, 1716, 1716, 1716, 1716, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717,
+     1717, 1717, 1717, 1717, 1717, 1717, 1717, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
+     1722, 1722, 1722, 1722, 1722, 1722, 1722, 1725, 1725, 1725,
+     1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+     1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+
+     1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+     1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725,
+     1725, 1725, 1725, 1725, 1725, 1725, 1725, 1732, 1732, 1732,
+     1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+     1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+     1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+     1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732,
+     1732, 1732, 1732, 1732, 1732, 1732, 1732, 1738, 1738, 1738,
+     1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+     1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+
+     1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+     1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+     1738, 1738, 1738, 1738, 1738, 1738, 1738, 1739, 1739, 1739,
+     1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
+     1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
+     1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
+     1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739,
+     1739, 1739, 1739, 1739, 1739, 1739, 1739, 1744, 1744, 1744,
+     1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+     1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+
+     1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+     1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744,
+     1744, 1744, 1744, 1744, 1744, 1744, 1744, 1747, 1747, 1747,
+     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
+     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1749, 1749, 1749,
+     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+
+     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1750, 3039, 1750,
+     3041,    0, 3173,    0, 3175, 1750, 1750, 1750, 1750, 3039,
+     3053, 3041, 3039, 3173, 3041, 3175, 1750, 1750, 1750, 1750,
+     1750, 3053, 1750,    0, 3053,    0,    0,    0,    0, 1750,
+     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+
+     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
+     1752, 3055, 3179, 3200,    0,    0,    0,    0,    0,    0,
+     1752,    0, 3055, 3179, 3200, 3055, 1752, 1752, 1752, 1752,
+     1752, 1752, 1752, 1752,    0,    0,    0, 1752, 1752, 1752,
+     1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
+     1752, 1753, 3057, 1753, 3058,    0, 3207,    0, 3228, 1753,
+     1753, 1753, 1753, 3057, 3063, 3058, 3057, 3207, 3058, 3228,
+     1753, 1753, 1753, 1753, 1753, 3063, 1753,    0, 3063,    0,
+        0,    0,    0, 1753, 1754, 1754, 1754, 1754, 1754, 1754,
+     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+
+     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+     1754, 1754, 1754, 1754, 1757, 1757, 1757, 1757, 1757, 1757,
+     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
+     1757, 1757, 1757, 1757, 1763, 1763, 1763, 1763, 1763, 1763,
+     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
+
+     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
+     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
+     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
+     1763, 1763, 1763, 1763, 1765, 1765, 1765, 1765, 1765, 1765,
+     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
+     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
+     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
+     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
+     1765, 1765, 1765, 1765, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+     1766, 1766, 1766, 1766, 1767, 3066, 3242, 3250,    0,    0,
+        0,    0,    0,    0, 1767,    0, 3066, 3242, 3250, 3066,
+     1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,    0,    0,
+        0, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+     1767, 1767, 1767, 1767, 1767, 1768, 1768, 1768, 1768, 1768,
+     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
+     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
+
+     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
+     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
+     1768, 1768, 1768, 1768, 1768, 1769, 1769, 1769, 1769, 1769,
+     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
+     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
+     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
+     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
+     1769, 1769, 1769, 1769, 1769, 1772, 3076, 1772, 3089,    0,
+     3257,    0, 3276, 1772, 1772, 1772, 1772, 3076, 3093, 3089,
+     3076, 3257, 3089, 3276, 1772, 1772, 1772, 1772, 1772, 3093,
+
+     1772,    0, 3093,    0,    0,    0,    0, 1772, 1773, 1773,
+     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
+     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
+     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
+     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
+     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1774, 1774,
+     1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+     1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+     1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+     1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774,
+
+     1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1776, 1776,
+     1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776,
+     1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776,
+     1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776,
+     1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776,
+     1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1777,
+     1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777,
+     1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777,
+     1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777,
+     1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777,
+
+     1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
+     1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, 3094,
+     3281, 3283,    0,    0,    0,    0,    0,    0, 1779,    0,
+     3094, 3281, 3283, 3094, 1779, 1779, 1779, 1779, 1779, 1779,
+     1779, 1779,    0,    0,    0, 1779, 1779, 1779, 1779, 1779,
+     1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1780,
+
+     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
+     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
+     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
+     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
+     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1781,
+     1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+     1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+     1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+     1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+     1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1784,
+
+     3098, 1784, 3111,    0, 3288,    0, 3294, 1784, 1784, 1784,
+     1784, 3098, 3117, 3111, 3098, 3288, 3111, 3294, 1784, 1784,
+     1784, 1784, 1784, 3117, 1784,    0, 3117,    0,    0,    0,
+        0, 1784, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785,
+     1785, 1785, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+     1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+
+     1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+     1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+     1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786,
+     1786, 1786, 1787, 3119, 3314, 3319,    0,    0,    0,    0,
+        0,    0, 1787,    0, 3119, 3314, 3319, 3119, 1787, 1787,
+     1787, 1787, 1787, 1787, 1787, 1787,    0,    0,    0, 1787,
+     1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787,
+     1787, 1787, 1787, 1789, 3124, 1789, 3125,    0, 3323,    0,
+     3338, 1789, 1789, 1789, 1789, 3124, 3128, 3125, 3124, 3323,
+     3125, 3338, 1789, 1789, 1789, 1789, 1789, 3128, 1789,    0,
+
+     3128,    0,    0,    0,    0, 1789, 1790, 1790, 1790, 1790,
+     1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790,
+     1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790,
+     1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790,
+     1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790,
+     1790, 1790, 1790, 1790, 1790, 1790, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+     1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
+
+     1793, 1793, 1793, 1793, 1793, 1793, 1794, 1794, 1794, 1794,
+     1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794,
+     1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794,
+     1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794,
+     1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794,
+     1794, 1794, 1794, 1794, 1794, 1794, 1795, 3132, 3345, 3370,
+        0,    0,    0,    0,    0,    0, 1795,    0, 3132, 3345,
+     3370, 3132, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795,
+        0,    0,    0, 1795, 1795, 1795, 1795, 1795, 1795, 1795,
+     1795, 1795, 1795, 1795, 1795, 1795, 1795, 1797, 3134, 1797,
+
+     3138,    0, 3408,    0, 3424, 1797, 1797, 1797, 1797, 3134,
+     3142, 3138, 3134, 3408, 3138, 3424, 1797, 1797, 1797, 1797,
+     1797, 3142, 1797,    0, 3142,    0,    0,    0,    0, 1797,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799,
+     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+
+     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
+     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
+     1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+     1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+
+     1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+     1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+     1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803,
+     1806, 3148, 1806, 3151,    0, 3428,    0, 3434, 1806, 1806,
+     1806, 1806, 3148, 3157, 3151, 3148, 3428, 3151, 3434, 1806,
+     1806, 1806, 1806, 1806, 3157, 1806,    0, 3157,    0,    0,
+        0,    0, 1806, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+     1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+     1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+     1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+
+     1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+     1807, 1807, 1807, 1808, 3161, 3444, 3449,    0,    0,    0,
+        0,    0,    0, 1808,    0, 3161, 3444, 3449, 3161, 1808,
+     1808, 1808, 1808, 1808, 1808, 1808, 1808,    0,    0,    0,
+     1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808,
+     1808, 1808, 1808, 1808, 1809, 3163, 1809, 3166,    0, 3464,
+        0, 3470, 1809, 1809, 1809, 1809, 3163, 3168, 3166, 3163,
+     3464, 3166, 3470, 1809, 1809, 1809, 1809, 1809, 3168, 1809,
+        0, 3168,    0,    0,    0,    0, 1809, 1810, 1810, 1810,
+     1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+
+     1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+     1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+     1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
+     1810, 1810, 1810, 1810, 1810, 1810, 1810, 1817, 1817, 1817,
+     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
+     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
+     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
+     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
+     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1820, 1820, 1820,
+     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
+
+     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
+     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
+     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
+     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1825, 1825, 1825,
+     1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825,
+     1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825,
+     1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825,
+     1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825,
+     1825, 1825, 1825, 1825, 1825, 1825, 1825, 1828, 1828, 1828,
+     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+
+     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
+     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1832, 3172, 3474,
+     3476,    0,    0,    0,    0, 1832,    0, 1832,    0, 3172,
+     3474, 3476, 3172, 1832, 1832, 1832, 1832, 1832, 1832, 1832,
+     1832,    0,    0,    0, 1832, 1832, 1832, 1832, 1832, 1832,
+     1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1833, 1833,
+     1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833,
+     1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833,
+
+     1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833,
+     1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833,
+     1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1834, 3174,
+     1834, 3178,    0, 3477,    0, 3482, 1834, 1834, 1834, 1834,
+     3174, 3190, 3178, 3174, 3477, 3178, 3482, 1834, 1834, 1834,
+     1834, 1834, 3190, 1834,    0, 3190,    0,    0,    0,    0,
+     1834, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
+     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
+     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
+     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
+
+     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
+     1835, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
+     1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
+     1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
+     1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
+     1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
+     1836, 1838, 3199, 1838, 3206,    0, 3488,    0, 3492, 1838,
+     1838, 1838, 1838, 3199, 3216, 3206, 3199, 3488, 3206, 3492,
+     1838, 1838, 1838, 1838, 1838, 3216, 1838,    0, 3216,    0,
+        0,    0,    0, 1838, 1844, 1844, 1844, 1844, 1844, 1844,
+
+     1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844,
+     1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844,
+     1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844,
+     1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844,
+     1844, 1844, 1844, 1844, 1846, 1846, 1846, 1846, 1846, 1846,
+     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
+     1846, 1846, 1846, 1846, 1847, 1847, 1847, 1847, 1847, 1847,
+
+     1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
+     1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
+     1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
+     1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847,
+     1847, 1847, 1847, 1847, 1849, 1849, 1849, 1849, 1849, 1849,
+     1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+     1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+     1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+     1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849,
+     1849, 1849, 1849, 1849, 1852, 1852, 1852, 1852, 1852, 1852,
+
+     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+     1852, 1852, 1852, 1852, 1858, 1858, 1858, 1858,    0, 3227,
+     3241, 3243,    0,    0,    0, 3252, 1858, 3256,    0, 1858,
+     3227, 3241, 3243, 3227, 3241, 3243, 3252, 3266, 3256, 3252,
+        0, 3256, 3275, 3280, 3284,    0,    0,    0, 3266, 3495,
+        0, 3266,    0, 3275, 3280, 3284, 3275, 3280, 3284,    0,
+     3495, 1858, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
+
+     1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
+     1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
+     1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
+     1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863,
+     1863, 1863, 1869, 1869, 1869, 1869,    0, 3286, 3290, 3293,
+        0,    0,    0, 3304, 1869, 3313,    0, 1869, 3286, 3290,
+     3293, 3286, 3290, 3293, 3304, 3324, 3313, 3304,    0, 3313,
+     3327, 3337, 3340,    0,    0,    0, 3324, 3501,    0, 3324,
+        0, 3327, 3337, 3340, 3327, 3337, 3340,    0, 3501, 1869,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880,
+     1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
+     1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
+     1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
+     1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
+     1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
+     1891, 3346, 3506, 3510,    0,    0,    0,    0,    0,    0,
+
+     1891,    0, 3346, 3506, 3510, 3346, 1891, 1891, 1891, 1891,
+     1891, 1891, 1891, 1891,    0,    0,    0, 1891, 1891, 1891,
+     1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
+     1891, 1896, 3363, 3517, 3520,    0,    0,    0,    0,    0,
+        0, 1896,    0, 3363, 3517, 3520, 3363, 1896, 1896, 1896,
+     1896, 1896, 1896, 1896, 1896,    0,    0,    0, 1896, 1896,
+     1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896,
+     1896, 1896, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+     1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+     1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+
+     1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+     1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902,
+     1902, 1902, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904,
+     1904, 1904, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
+     1905, 1905, 1907, 3366, 3524, 3538,    0,    0,    0,    0,
+        0,    0, 1907,    0, 3366, 3524, 3538, 3366, 1907, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907,    0,    0,    0, 1907,
+     1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
+     1907, 1907, 1907, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
+     1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
+     1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
+     1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
+
+     1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
+     1910, 1910, 1910, 1911, 3369, 3545, 3554,    0,    0,    0,
+        0,    0,    0, 1911,    0, 3369, 3545, 3554, 3369, 1911,
+     1911, 1911, 1911, 1911, 1911, 1911, 1911,    0,    0,    0,
+     1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911,
+     1911, 1911, 1911, 1911, 1913, 3371, 3558, 3592,    0,    0,
+        0,    0,    0,    0, 1913,    0, 3371, 3558, 3592, 3371,
+     1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913,    0,    0,
+        0, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913,
+     1913, 1913, 1913, 1913, 1913, 1917, 1917, 1917, 1917, 1917,
+
+     1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917,
+     1917, 1917, 1917, 1917, 1917, 1922, 1922, 1922, 1922, 1922,
+     1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922,
+     1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922,
+     1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922,
+     1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922,
+     1922, 1922, 1922, 1922, 1922, 1924, 1924, 1924, 1924,    0,
+
+     1924, 1924, 3381, 1924,    0, 1924, 1924, 1924, 1924, 1924,
+     1924, 1924, 1924, 3381,    0, 1924, 3381, 1924, 1924, 1924,
+     1924, 1924, 1924, 1924, 1924, 1924,    0, 1924, 1924, 1924,
+     1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
+     1924, 1924, 1924, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
+     1926, 1926, 1926, 1927, 3383, 3596, 3602,    0,    0,    0,
+
+        0,    0,    0, 1927,    0, 3383, 3596, 3602, 3383, 1927,
+     1927, 1927, 1927, 1927, 1927, 1927, 1927,    0,    0,    0,
+     1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
+     1927, 1927, 1927, 1927, 1928, 1928, 1928, 1928, 1928, 1928,
+     1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+     1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+     1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+     1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
+     1928, 1928, 1928, 1928, 1932, 3393, 1932, 3396,    0, 3615,
+        0, 3622, 1932, 1932, 1932, 1932, 3393, 3398, 3396, 3393,
+
+     3615, 3396, 3622, 1932, 1932, 1932, 1932, 1932, 3398, 1932,
+        0, 3398,    0,    0,    0,    0, 1932, 1933, 1933, 1933,
+     1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933,
+     1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933,
+     1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933,
+     1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933,
+     1933, 1933, 1933, 1933, 1933, 1933, 1933, 1938, 1938, 1938,
+     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
+     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
+     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
+
+     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
+     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1941, 1941, 1941,
+     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
+     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
+     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
+     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
+     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1943, 1943, 1943,
+     1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943,
+     1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943,
+     1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943,
+
+     1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943,
+     1943, 1943, 1943, 1943, 1943, 1943, 1943, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944,
+     1944, 1944, 1944, 1944, 1944, 1944, 1944, 1945, 1945, 1945,
+     1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+     1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+     1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+
+     1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
+     1945, 1945, 1945, 1945, 1945, 1945, 1945, 1946, 3407, 3631,
+     3635,    0,    0,    0,    0,    0,    0, 1946,    0, 3407,
+     3631, 3635, 3407, 1946, 1946, 1946, 1946, 1946, 1946, 1946,
+     1946,    0,    0,    0, 1946, 1946, 1946, 1946, 1946, 1946,
+     1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1948, 1948,
+     1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+     1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+     1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+     1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
+
+     1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1950, 1950,
+     1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,
+     1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,
+     1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,
+     1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950,
+     1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1951, 3415,
+     1951, 3423,    0, 3655,    0, 3661, 1951, 1951, 1951, 1951,
+     3415, 3430, 3423, 3415, 3655, 3423, 3661, 1951, 1951, 1951,
+     1951, 1951, 3430, 1951,    0, 3430,    0,    0,    0,    0,
+     1951, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+
+     1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+     1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+     1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+     1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952,
+     1952, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
+     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
+     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
+     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
+     1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955,
+     1955, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
+
+     1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
+     1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
+     1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
+     1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956,
+     1956, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
+     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
+     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
+     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
+     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
+     1963, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965,
+
+     1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965,
+     1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965,
+     1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965,
+     1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965,
+     1965, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
+     1966, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
+
+     1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
+     1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
+     1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
+     1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
+     1968, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977,
+     1977, 1978, 3433, 3688, 3692,    0,    0,    0,    0,    0,
+
+        0, 1978,    0, 3433, 3688, 3692, 3433, 1978, 1978, 1978,
+     1978, 1978, 1978, 1978, 1978,    0,    0,    0, 1978, 1978,
+     1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978,
+     1978, 1978, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
+     1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
+     1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
+     1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
+     1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979,
+     1979, 1979, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980,
+     1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980,
+
+     1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980,
+     1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980,
+     1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980,
+     1980, 1980, 1983, 3442, 1983, 3443,    0, 3705,    0, 3719,
+     1983, 1983, 1983, 1983, 3442, 3450, 3443, 3442, 3705, 3443,
+     3719, 1983, 1983, 1983, 1983, 1983, 3450, 1983,    0, 3450,
+        0,    0,    0,    0, 1983, 1984, 1984, 1984, 1984, 1984,
+     1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984,
+     1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984,
+     1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984,
+
+     1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984,
+     1984, 1984, 1984, 1984, 1984, 1985, 1985, 1985, 1985, 1985,
+     1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
+     1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
+     1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
+     1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,
+     1985, 1985, 1985, 1985, 1985, 1989, 1989, 1989, 1989, 1989,
+     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+
+     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
+     1989, 1989, 1989, 1989, 1989, 1991, 1991, 1991, 1991, 1991,
+     1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
+     1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
+     1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
+     1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
+     1991, 1991, 1991, 1991, 1991, 1994, 1994, 1994, 1994, 1994,
+     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
+     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
+     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
+
+     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
+     1994, 1994, 1994, 1994, 1994, 1995, 1995, 1995, 1995, 1995,
+     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+     1995, 1995, 1995, 1995, 1995, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+
+     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
+     1996, 1996, 1996, 1996, 1996, 1997, 3463, 3735, 3737,    0,
+        0,    0,    0,    0,    0, 1997,    0, 3463, 3735, 3737,
+     3463, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,    0,
+        0,    0, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
+     1997, 1997, 1997, 1997, 1997, 1997, 1998, 1998, 1998, 1998,
+     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
+     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
+     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
+     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
+
+     1998, 1998, 1998, 1998, 1998, 1998, 2001, 3466, 2001, 3469,
+        0, 3739,    0, 3741, 2001, 2001, 2001, 2001, 3466, 3473,
+     3469, 3466, 3739, 3469, 3741, 2001, 2001, 2001, 2001, 2001,
+     3473, 2001,    0, 3473,    0,    0,    0,    0, 2001, 2006,
+     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
+     2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2007,
+     2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+
+     2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+     2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+     2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
+     2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008,
+     2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009,
+        0, 2009,    0,    0, 3743,    0, 3744, 2009, 2009, 2009,
+
+     2009, 2457, 2457, 2457, 2457, 3743, 3475, 3744, 2009, 2009,
+     2009, 2009, 2009, 2457, 2009, 3479, 2457, 3475,    0, 3481,
+     3475, 2009, 2010, 3485, 3748, 3749, 3479,    0,    0, 3479,
+     3481,    0, 2010, 3481, 3485, 3748, 3749, 3485, 2010, 2010,
+     2010, 2010, 2010, 2010, 2010, 2010,    0,    0, 2457, 2010,
+     2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
+     2010, 2010, 2010, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
+     2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
+     2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
+     2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
+
+     2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
+     2011, 2011, 2011, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
+     2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
+     2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
+     2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
+     2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014,
+     2014, 2014, 2014, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+     2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+     2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+     2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+
+     2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
+     2015, 2015, 2015, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
+     2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
+     2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
+     2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
+     2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
+     2017, 2017, 2017, 2018, 3493, 2018, 3500,    0, 3756,    0,
+     3757, 2018, 2018, 2018, 2018, 3493, 3505, 3500, 3493, 3756,
+     3500, 3757, 2018, 2018, 2018, 2018, 2018, 3505, 2018,    0,
+     3505,    0,    0,    0,    0, 2018, 2019, 2019, 2019, 2019,
+
+     2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
+     2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
+     2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
+     2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
+     2019, 2019, 2019, 2019, 2019, 2019, 2026, 3514, 3761, 3768,
+        0,    0,    0,    0,    0,    0, 2026,    0, 3514, 3761,
+     3768, 3514, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+        0,    0,    0, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
+     2026, 2026, 2026, 2026, 2026, 2026, 2026, 2027, 2027, 2027,
+     2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+
+     2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+     2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+     2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
+     2027, 2027, 2027, 2027, 2027, 2027, 2027, 2030, 3519, 2030,
+     3522,    0, 3774,    0, 3779, 2030, 2030, 2030, 2030, 3519,
+     3526, 3522, 3519, 3774, 3522, 3779, 2030, 2030, 2030, 2030,
+     2030, 3526, 2030,    0, 3526,    0,    0,    0,    0, 2030,
+     2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+     2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+     2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+
+     2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+     2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
+     2034, 3537, 2034, 3540,    0, 3788,    0, 3789, 2034, 2034,
+     2034, 2034, 3537, 3553, 3540, 3537, 3788, 3540, 3789, 2034,
+     2034, 2034, 2034, 2034, 3553, 2034,    0, 3553,    0,    0,
+
+        0,    0, 2034, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+     2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+     2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+     2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+     2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
+     2035, 2035, 2035, 2038, 3556, 3817, 3830,    0,    0,    0,
+        0,    0,    0, 2038,    0, 3556, 3817, 3830, 3556, 2038,
+     2038, 2038, 2038, 2038, 2038, 2038, 2038,    0,    0,    0,
+     2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038,
+     2038, 2038, 2038, 2038, 2039, 2039, 2039, 2039, 2039, 2039,
+
+     2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
+     2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
+     2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
+     2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039,
+     2039, 2039, 2039, 2039, 2043, 2043, 2043, 2043, 2043, 2043,
+     2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043,
+     2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043,
+     2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043,
+     2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043,
+     2043, 2043, 2043, 2043, 2045, 2045, 2045, 2045, 2045, 2045,
+
+     2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+     2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+     2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+     2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
+     2045, 2045, 2045, 2045, 2046, 3559, 2046, 3562,    0, 3837,
+        0, 3841, 2046, 2046, 2046, 2046, 3559, 3566, 3562, 3559,
+     3837, 3562, 3841, 2046, 2046, 2046, 2046, 2046, 3566, 2046,
+        0, 3566,    0,    0,    0,    0, 2046, 2047, 2047, 2047,
+     2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
+     2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
+
+     2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
+     2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
+     2047, 2047, 2047, 2047, 2047, 2047, 2047, 2051, 2051, 2051,
+     2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+     2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+     2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+     2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051,
+     2051, 2051, 2051, 2051, 2051, 2051, 2051, 2053,    0,    0,
+        0, 3856,    0,    0,    0,    0,    0, 2053, 3480, 3480,
+     3480, 3480, 3856, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+
+     2053,    0,    0, 3480, 2053, 2053, 2053, 2053, 2053, 2053,
+     2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2054, 3570,
+     2054, 3882,    0, 3897,    0, 3906, 2054, 2054, 2054, 2054,
+     3570, 3574, 3882, 3570, 3897, 3480, 3906, 2054, 2054, 2054,
+     2054, 2054, 3574, 2054,    0, 3574,    0,    0,    0,    0,
+     2054, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+     2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+     2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+     2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+     2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
+
+     2057, 2060, 3580, 2060, 3591,    0, 3920,    0, 3931, 2060,
+     2060, 2060, 2060, 3580, 3593, 3591, 3580, 3920, 3591, 3931,
+     2060, 2060, 2060, 2060, 2060, 3593, 2060,    0, 3593,    0,
+        0,    0,    0, 2060, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
+     2066, 2066, 2066, 2066, 2067, 3595, 3943, 3957,    0,    0,
+        0,    0,    0,    0, 2067,    0, 3595, 3943, 3957, 3595,
+
+     2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,    0,    0,
+        0, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+     2067, 2067, 2067, 2067, 2067, 2068, 2068, 2068, 2068, 2068,
+     2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
+     2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
+     2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
+     2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
+     2068, 2068, 2068, 2068, 2068, 2069, 2069, 2069, 2069, 2069,
+     2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+     2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+
+     2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+     2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
+     2069, 2069, 2069, 2069, 2069, 2072, 3598, 2072, 3601,    0,
+     3961,    0, 3975, 2072, 2072, 2072, 2072, 3598, 3604, 3601,
+     3598, 3961, 3601, 3975, 2072, 2072, 2072, 2072, 2072, 3604,
+     2072,    0, 3604,    0,    0,    0,    0, 2072, 2073, 2073,
+     2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+     2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+     2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+     2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+
+     2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2075, 2075,
+     2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+     2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+     2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+     2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
+     2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076,
+
+     2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2077, 3614,
+     3982, 3984,    0,    0,    0,    0,    0,    0, 2077,    0,
+     3614, 3982, 3984, 3614, 2077, 2077, 2077, 2077, 2077, 2077,
+     2077, 2077,    0,    0,    0, 2077, 2077, 2077, 2077, 2077,
+     2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2078,
+     2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+     2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+     2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+     2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
+     2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2081,
+
+     3616, 2081, 3619,    0, 3985,    0, 3988, 2081, 2081, 2081,
+     2081, 3616, 3620, 3619, 3616, 3985, 3619, 3988, 2081, 2081,
+     2081, 2081, 2081, 3620, 2081,    0, 3620,    0,    0,    0,
+        0, 2081, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
+     2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
+     2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
+     2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
+     2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083,
+     2083, 2083, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
+     2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
+
+     2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
+     2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
+     2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085,
+     2085, 2085, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+     2087, 2087, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+     2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+
+     2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+     2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+     2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+     2089, 2089, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+     2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+     2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+     2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+     2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+     2091, 2091, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+     2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+
+     2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+     2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+     2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+     2092, 2092, 2096, 2096, 2096, 2096,    0, 2096, 2096, 3623,
+     2096,    0, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
+     3623,    0, 2096, 3623, 2096, 2096, 2096, 2096, 2096, 2096,
+     2096, 2096, 2096,    0, 2096, 2096, 2096, 2096, 2096, 2096,
+     2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098,
+     2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+     2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+     2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+     2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+     2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+     2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+     2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+
+     2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+     2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+     2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+     2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+     2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+     2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+     2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+     2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
+     2113, 3630, 3993, 3999,    0,    0,    0,    0,    0,    0,
+     2113,    0, 3630, 3993, 3999, 3630, 2113, 2113, 2113, 2113,
+
+     2113, 2113, 2113, 2113,    0,    0,    0, 2113, 2113, 2113,
+     2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113,
+     2113, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
+     2114, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+     2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+     2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+
+     2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+     2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
+     2115, 2116, 3634, 4000, 4009,    0,    0,    0,    0,    0,
+        0, 2116,    0, 3634, 4000, 4009, 3634, 2116, 2116, 2116,
+     2116, 2116, 2116, 2116, 2116,    0,    0,    0, 2116, 2116,
+     2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
+     2116, 2116, 2118, 3645, 2118, 3654,    0, 4011,    0, 4017,
+     2118, 2118, 2118, 2118, 3645, 3662, 3654, 3645, 4011, 3654,
+     4017, 2118, 2118, 2118, 2118, 2118, 3662, 2118,    0, 3662,
+        0,    0,    0,    0, 2118, 2119, 2119, 2119, 2119, 2119,
+
+     2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119,
+     2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119,
+     2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119,
+     2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119,
+     2119, 2119, 2119, 2119, 2119, 2121, 2121, 2121, 2121, 2121,
+     2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121,
+     2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121,
+     2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121,
+     2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121,
+     2121, 2121, 2121, 2121, 2121, 2123, 2123, 2123, 2123, 2123,
+
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
+     2123, 2123, 2123, 2123, 2123, 2132, 2132, 2132, 2132, 2132,
+     2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
+     2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
+     2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
+     2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132,
+     2132, 2132, 2132, 2132, 2132, 2135, 2135, 2135, 2135, 2135,
+
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
+     2135, 2135, 2135, 2135, 2135, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136,
+     2136, 2136, 2136, 2136, 2136, 2140, 2140, 2140, 2140, 2140,
+
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140,
+     2140, 2140, 2140, 2140, 2140, 2143, 2143, 2143, 2143, 2143,
+     2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+     2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+     2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+     2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+     2143, 2143, 2143, 2143, 2143, 2152, 2152, 2152, 2152, 2152,
+
+     2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
+     2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
+     2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
+     2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152,
+     2152, 2152, 2152, 2152, 2152, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153,
+     2153, 2153, 2153, 2153, 2153, 2156, 2156, 2156, 2156, 2156,
+
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156,
+     2156, 2156, 2156, 2156, 2156, 2158, 3668, 4018, 4026,    0,
+        0,    0,    0,    0,    0, 2158,    0, 3668, 4018, 4026,
+     3668, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,    0,
+        0,    0, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158,
+     2158, 2158, 2158, 2158, 2158, 2158, 2166, 2166, 2166, 2166,
+     2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
+
+     2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
+     2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
+     2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166,
+     2166, 2166, 2166, 2166, 2166, 2166, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168,
+     2168, 2168, 2168, 2168, 2168, 2168, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170,
+     2170, 2170, 2170, 2170, 2170, 2170, 2171, 3676, 4028, 4031,
+        0,    0,    0,    0,    0,    0, 2171,    0, 3676, 4028,
+     4031, 3676, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+        0,    0,    0, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+     2171, 2171, 2171, 2171, 2171, 2171, 2171, 2172, 3678, 4045,
+     4080,    0,    0,    0,    0,    0,    0, 2172,    0, 3678,
+     4045, 4080, 3678, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+
+     2172,    0,    0,    0, 2172, 2172, 2172, 2172, 2172, 2172,
+     2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2174, 3687,
+     4082, 4095,    0,    0,    0,    0,    0,    0, 2174,    0,
+     3687, 4082, 4095, 3687, 2174, 2174, 2174, 2174, 2174, 2174,
+     2174, 2174,    0,    0,    0, 2174, 2174, 2174, 2174, 2174,
+     2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2178,
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178,
+
+     2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2179,
+     3691, 4096, 4101,    0,    0,    0,    0,    0,    0, 2179,
+        0, 3691, 4096, 4101, 3691, 2179, 2179, 2179, 2179, 2179,
+     2179, 2179, 2179,    0,    0,    0, 2179, 2179, 2179, 2179,
+     2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179,
+     2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
+     2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
+     2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
+     2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
+     2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183,
+
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+     2185,    0, 2185,    0,    0, 4116,    0, 4122, 2185, 2185,
+     2185, 2185, 2467, 2467, 2467, 2467, 4116, 3701, 4122, 2185,
+     2185, 2185, 2185, 2185, 2467, 2185, 3704, 2467, 3701,    0,
+     3712, 3701, 2185, 2189, 3718, 4133, 4147, 3704,    0,    0,
+     3704, 3712,    0, 2189, 3712, 3718, 4133, 4147, 3718, 2189,
+
+     2189, 2189, 2189, 2189, 2189, 2189, 2189,    0,    0, 2467,
+     2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189,
+     2189, 2189, 2189, 2189, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192,
+     2192, 2192, 2192, 2192, 2193, 3727, 4148, 4152,    0,    0,
+        0,    0,    0,    0, 2193,    0, 3727, 4148, 4152, 3727,
+     2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193,    0,    0,
+
+        0, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193,
+     2193, 2193, 2193, 2193, 2193, 2195, 3729, 2195, 3734,    0,
+     4163,    0, 4167, 2195, 2195, 2195, 2195, 3729, 3736, 3734,
+     3729, 4163, 3734, 4167, 2195, 2195, 2195, 2195, 2195, 3736,
+     2195,    0, 3736,    0,    0,    0,    0, 2195, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2201, 2201,
+
+     2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+     2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+     2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+     2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201,
+     2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203,
+     2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2205, 2205,
+
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205,
+     2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2206, 3738,
+     4187, 4223,    0,    0,    0,    0,    0,    0, 2206,    0,
+     3738, 4187, 4223, 3738, 2206, 2206, 2206, 2206, 2206, 2206,
+     2206, 2206,    0,    0,    0, 2206, 2206, 2206, 2206, 2206,
+     2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2207,
+     2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+
+     2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+     2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+     2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207,
+     2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2209,
+     2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+     2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+     2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+     2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209,
+     2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2212,
+     3740, 2212, 3742,    0, 4233,    0, 4237, 2212, 2212, 2212,
+
+     2212, 3740, 3746, 3742, 3740, 4233, 3742, 4237, 2212, 2212,
+     2212, 2212, 2212, 3746, 2212,    0, 3746,    0,    0,    0,
+        0, 2212, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
+     2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
+     2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
+     2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
+     2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213,
+     2213, 2213, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+
+     2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+     2216, 2216, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+     2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+     2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+     2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+     2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218,
+     2218, 2218, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+     2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+     2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+
+     2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+     2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+     2219, 2219, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+     2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+     2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+     2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+     2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+     2221, 2221, 2222,    0, 2222, 2222, 2222, 3747, 3751, 4240,
+        0,    0, 2222, 2222, 2222, 2222,    0, 3755, 3747, 3751,
+     4240, 3747, 3751, 2222, 2222, 2222, 2222, 2222, 3755, 2222,
+
+        0, 3755,    0,    0,    0,    0, 2222, 2223, 2223, 2223,
+     2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+     2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+     2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+     2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223,
+     2223, 2223, 2223, 2223, 2223, 2223, 2223, 2230, 2230, 2230,
+     2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230,
+     2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230,
+     2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230,
+     2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230,
+
+     2230, 2230, 2230, 2230, 2230, 2230, 2230, 2232, 2232, 2232,
+     2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
+     2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
+     2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
+     2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
+     2232, 2232, 2232, 2232, 2232, 2232, 2232, 2235, 2235, 2235,
+     2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235,
+     2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235,
+     2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235,
+     2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235,
+
+     2235, 2235, 2235, 2235, 2235, 2235, 2235, 2237, 2237, 2237,
+     2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
+     2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
+     2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
+     2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237,
+     2237, 2237, 2237, 2237, 2237, 2237, 2237, 2238, 2238, 2238,
+     2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
+     2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
+     2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
+     2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238,
+
+     2238, 2238, 2238, 2238, 2238, 2238, 2238, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239,
+     2239, 2239, 2239, 2239, 2239, 2239, 2239, 2240,    0, 2240,
+        0,    0, 4244,    0, 4245, 2240, 2240, 2240, 2240, 2782,
+     2782, 2782, 2782, 4244, 3763, 4245, 2240, 2240, 2240, 2240,
+     2240, 2782, 2240, 3767, 2782, 3763,    0, 3770, 3763, 2240,
+     2241, 3773, 4249, 4254, 3767,    0,    0, 3767, 3770,    0,
+
+     2241, 3770, 3773, 4249, 4254, 3773, 2241, 2241, 2241, 2241,
+     2241, 2241, 2241, 2241,    0,    0, 2782, 2241, 2241, 2241,
+     2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241,
+     2241, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+     2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+     2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+     2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+     2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,
+     2244, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+     2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+
+     2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+     2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+     2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245,
+     2245, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+     2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+     2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+     2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+     2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247,
+     2247, 2248, 3776, 2248, 3781,    0, 4263,    0, 4266, 2248,
+     2248, 2248, 2248, 3776, 3784, 3781, 3776, 4263, 3781, 4266,
+
+     2248, 2248, 2248, 2248, 2248, 3784, 2248,    0, 3784,    0,
+        0,    0,    0, 2248, 2249, 2249, 2249, 2249, 2249, 2249,
+     2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+     2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+     2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+     2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249,
+     2249, 2249, 2249, 2249, 2255, 3787, 4281, 4293,    0,    0,
+        0,    0,    0,    0, 2255,    0, 3787, 4281, 4293, 3787,
+     2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,    0,    0,
+        0, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255,
+
+     2255, 2255, 2255, 2255, 2255, 2256, 2256, 2256, 2256, 2256,
+     2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+     2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+     2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+     2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256,
+     2256, 2256, 2256, 2256, 2256, 2259, 3791, 2259, 3794,    0,
+     4320,    0, 4323, 2259, 2259, 2259, 2259, 3791, 3803, 3794,
+     3791, 4320, 3794, 4323, 2259, 2259, 2259, 2259, 2259, 3803,
+     2259,    0, 3803,    0,    0,    0,    0, 2259, 2262, 2262,
+     2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
+
+     2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
+     2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
+     2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262,
+     2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263,
+     2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2264, 3808,
+     4338, 4339,    0,    0,    0,    0,    0,    0, 2264,    0,
+
+     3808, 4338, 4339, 3808, 2264, 2264, 2264, 2264, 2264, 2264,
+     2264, 2264,    0,    0,    0, 2264, 2264, 2264, 2264, 2264,
+     2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2265,
+     2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
+     2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
+     2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
+     2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265,
+     2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2268,
+     3814, 2268, 3820,    0, 4346,    0, 4350, 2268, 2268, 2268,
+     2268, 3814, 3824, 3820, 3814, 4346, 3820, 4350, 2268, 2268,
+
+     2268, 2268, 2268, 3824, 2268,    0, 3824,    0,    0,    0,
+        0, 2268, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
+     2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
+     2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
+     2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
+     2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269,
+     2269, 2269, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+
+     2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271,
+     2271, 2271, 2272,    0, 2272,    0,    0, 4365,    0, 4368,
+     2272, 2272, 2272, 2272, 2791, 2791, 2791, 2791, 4365, 3828,
+     4368, 2272, 2272, 2272, 2272, 2272, 2791, 2272, 3834, 2791,
+     3828,    0, 3838, 3828, 2272, 2273, 3840, 4385, 4386, 3834,
+        0,    0, 3834, 3838,    0, 2273, 3838, 3840, 4385, 4386,
+     3840, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,    0,
+        0, 2791, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273,
+     2273, 2273, 2273, 2273, 2273, 2273, 2274, 2274, 2274, 2274,
+     2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274,
+
+     2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274,
+     2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274,
+     2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274,
+     2274, 2274, 2274, 2274, 2274, 2274, 2277, 2277, 2277, 2277,
+     2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277,
+     2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277,
+     2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277,
+     2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277,
+     2277, 2277, 2277, 2277, 2277, 2277, 2279, 2279, 2279, 2279,
+     2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279,
+
+     2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279,
+     2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279,
+     2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279,
+     2279, 2279, 2279, 2279, 2279, 2279, 2280, 3853, 2280, 3854,
+        0, 4391,    0, 4405, 2280, 2280, 2280, 2280, 3853, 3855,
+     3854, 3853, 4391, 3854, 4405, 2280, 2280, 2280, 2280, 2280,
+     3855, 2280,    0, 3855,    0,    0,    0,    0, 2280, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288,
+     2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2289,
+        0,    0,    0, 4431,    0,    0,    0,    0,    0, 2289,
+     3750, 3750, 3750, 3750, 4431, 2289, 2289, 2289, 2289, 2289,
+     2289, 2289, 2289,    0,    0, 3750, 2289, 2289, 2289, 2289,
+     2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289,
+     2293, 3859, 2293, 4441,    0, 4454,    0, 4462, 2293, 2293,
+     2293, 2293, 3859, 3873, 4441, 3859, 4454, 3750, 4462, 2293,
+     2293, 2293, 2293, 2293, 3873, 2293,    0, 3873,    0,    0,
+        0,    0, 2293, 2294, 2294, 2294, 2294, 2294, 2294, 2294,
+
+     2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294,
+     2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294,
+     2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294,
+     2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294,
+     2294, 2294, 2294, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
+     2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
+     2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
+     2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
+     2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295, 2295,
+     2295, 2295, 2295, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+
+     2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+     2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+     2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+     2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
+     2297, 2297, 2297, 2298, 2298, 2298, 2298, 2298, 2298, 2298,
+     2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298,
+     2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298,
+     2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298,
+     2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298, 2298,
+     2298, 2298, 2298, 2300, 3877, 4467, 4471,    0,    0,    0,
+
+        0, 2300,    0, 2300,    0, 3877, 4467, 4471, 3877, 2300,
+     2300, 2300, 2300, 2300, 2300, 2300, 2300,    0,    0,    0,
+     2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
+     2300, 2300, 2300, 2300, 2301, 2301, 2301, 2301, 2301, 2301,
+     2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301,
+     2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301,
+     2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301,
+     2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301,
+     2301, 2301, 2301, 2301, 2302, 3879, 2302, 3881,    0, 4473,
+        0, 4474, 2302, 2302, 2302, 2302, 3879, 3884, 3881, 3879,
+
+     4473, 3881, 4474, 2302, 2302, 2302, 2302, 2302, 3884, 2302,
+        0, 3884,    0,    0,    0,    0, 2302, 2304, 2304, 2304,
+     2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+     2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+     2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+     2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304,
+     2304, 2304, 2304, 2304, 2304, 2304, 2304, 2305, 2305, 2305,
+     2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305,
+     2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305,
+     2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305,
+
+     2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305,
+     2305, 2305, 2305, 2305, 2305, 2305, 2305, 2307, 3887, 2307,
+     3896,    0, 4481,    0, 4490, 2307, 2307, 2307, 2307, 3887,
+     3905, 3896, 3887, 4481, 3896, 4490, 2307, 2307, 2307, 2307,
+     2307, 3905, 2307,    0, 3905,    0,    0,    0,    0, 2307,
+     2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308,
+     2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308,
+     2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308,
+     2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308,
+     2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308, 2308,
+
+     2313, 3908, 4495, 4505,    0,    0,    0,    0,    0,    0,
+     2313,    0, 3908, 4495, 4505, 3908, 2313, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313,    0,    0,    0, 2313, 2313, 2313,
+     2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313,
+     2313, 2314, 3919, 2314, 3921,    0, 4517,    0, 4530, 2314,
+     2314, 2314, 2314, 3919, 3925, 3921, 3919, 4517, 3921, 4530,
+     2314, 2314, 2314, 2314, 2314, 3925, 2314,    0, 3925,    0,
+        0,    0,    0, 2314, 2317, 2317, 2317, 2317, 2317, 2317,
+     2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+     2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+
+     2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+     2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317,
+     2317, 2317, 2317, 2317, 2319, 2319, 2319, 2319, 2319, 2319,
+     2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
+     2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
+     2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
+     2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319,
+     2319, 2319, 2319, 2319, 2320, 3930, 2320, 3942,    0, 4549,
+        0, 4550, 2320, 2320, 2320, 2320, 3930, 3948, 3942, 3930,
+     4549, 3942, 4550, 2320, 2320, 2320, 2320, 2320, 3948, 2320,
+
+        0, 3948,    0,    0,    0,    0, 2320, 2326, 2326, 2326,
+     2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326,
+     2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326,
+     2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326,
+     2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326, 2326,
+     2326, 2326, 2326, 2326, 2326, 2326, 2326, 2327, 2327, 2327,
+     2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+     2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+     2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+     2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327,
+
+     2327, 2327, 2327, 2327, 2327, 2327, 2327, 2328, 3956, 4554,
+     4559,    0,    0,    0,    0,    0,    0, 2328,    0, 3956,
+     4554, 4559, 3956, 2328, 2328, 2328, 2328, 2328, 2328, 2328,
+     2328,    0,    0,    0, 2328, 2328, 2328, 2328, 2328, 2328,
+     2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2330, 2330,
+     2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+     2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+     2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+     2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330,
+     2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2331, 2331,
+
+     2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+     2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+     2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+     2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
+     2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2333, 2333,
+     2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333,
+     2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333,
+     2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333,
+     2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333,
+     2333, 2333, 2333, 2333, 2333, 2333, 2333, 2333, 2334, 3959,
+
+     2334, 3963,    0, 4575,    0, 4599, 2334, 2334, 2334, 2334,
+     3959, 3969, 3963, 3959, 4575, 3963, 4599, 2334, 2334, 2334,
+     2334, 2334, 3969, 2334,    0, 3969,    0,    0,    0,    0,
+     2334, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+     2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+     2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+     2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+     2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335, 2335,
+     2335, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+     2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+
+     2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+     2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+     2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+     2336, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341,
+     2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341,
+     2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341,
+     2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341,
+     2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341,
+     2341, 2342, 3972, 2342, 3973,    0, 4603,    0, 4604, 2342,
+     2342, 2342, 2342, 3972, 3977, 3973, 3972, 4603, 3973, 4604,
+
+     2342, 2342, 2342, 2342, 2342, 3977, 2342,    0, 3977,    0,
+        0,    0,    0, 2342, 2344, 2344, 2344, 2344, 2344, 2344,
+     2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344,
+     2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344,
+     2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344,
+     2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344,
+     2344, 2344, 2344, 2344, 2345, 2345, 2345, 2345, 2345, 2345,
+     2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
+     2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
+     2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
+
+     2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345,
+     2345, 2345, 2345, 2345, 2347,    0, 2347, 2347, 2347, 3981,
+     3983, 4615,    0,    0, 2347, 2347, 2347, 2347,    0, 3987,
+     3981, 3983, 4615, 3981, 3983, 2347, 2347, 2347, 2347, 2347,
+     3987, 2347,    0, 3987,    0,    0,    0,    0, 2347, 2348,
+     2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+     2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+     2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+     2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
+     2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2353,
+
+     3990, 4620, 4626,    0,    0,    0,    0, 2353,    0, 2353,
+        0, 3990, 4620, 4626, 3990, 2353, 2353, 2353, 2353, 2353,
+     2353, 2353, 2353,    0,    0,    0, 2353, 2353, 2353, 2353,
+     2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353,
+     2356, 3992, 2356, 3995,    0, 4636,    0, 4640, 2356, 2356,
+     2356, 2356, 3992, 3998, 3995, 3992, 4636, 3995, 4640, 2356,
+     2356, 2356, 2356, 2356, 3998, 2356,    0, 3998,    0,    0,
+        0,    0, 2356, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+     2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+     2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+
+     2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+     2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357,
+     2357, 2357, 2357, 2359, 4002, 2359, 4005,    0, 4642,    0,
+     4643, 2359, 2359, 2359, 2359, 4002, 4008, 4005, 4002, 4642,
+     4005, 4643, 2359, 2359, 2359, 2359, 2359, 4008, 2359,    0,
+     4008,    0,    0,    0,    0, 2359, 2362, 2362, 2362, 2362,
+     2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+     2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+     2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+     2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
+
+     2362, 2362, 2362, 2362, 2362, 2362, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
+     2363, 2363, 2363, 2363, 2363, 2363, 2364,    0, 2364,    0,
+        0, 4648,    0, 4653, 2364, 2364, 2364, 2364, 2792, 2792,
+     2792, 2792, 4648, 4010, 4653, 2364, 2364, 2364, 2364, 2364,
+     2792, 2364, 4016, 2792, 4010,    0, 4020, 4010, 2364, 2365,
+     4024, 4709, 4712, 4016,    0,    0, 4016, 4020,    0, 2365,
+
+     4020, 4024, 4709, 4712, 4024, 2365, 2365, 2365, 2365, 2365,
+     2365, 2365, 2365,    0,    0, 2792, 2365, 2365, 2365, 2365,
+     2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
+     2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+     2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+     2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+     2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+     2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368,
+     2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+     2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+
+     2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+     2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+     2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+     2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
+     2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
+     2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
+     2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
+     2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371, 2371,
+     2372, 4027, 2372, 4030,    0, 4722,    0, 4725, 2372, 2372,
+     2372, 2372, 4027, 4044, 4030, 4027, 4722, 4030, 4725, 2372,
+
+     2372, 2372, 2372, 2372, 4044, 2372,    0, 4044,    0,    0,
+        0,    0, 2372, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+     2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+     2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+     2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+     2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
+     2373, 2373, 2373, 2379, 2379, 2379, 2379, 2379, 2379, 2379,
+     2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379,
+     2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379,
+     2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379,
+
+     2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379,
+     2379, 2379, 2379, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381,
+     2381, 2381, 2381, 2382,    0, 2382,    0,    0, 4727,    0,
+     4734, 2382, 2382, 2382, 2382, 2803, 2803, 2803, 2803, 4727,
+     4052, 4734, 2382, 2382, 2382, 2382, 2382, 2803, 2382, 4065,
+     2803, 4052,    0, 4079, 4052, 2382, 2383, 4081, 4745, 4753,
+
+     4065,    0,    0, 4065, 4079,    0, 2383, 4079, 4081, 4745,
+     4753, 4081, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383,
+        0,    0, 2803, 2383, 2383, 2383, 2383, 2383, 2383, 2383,
+     2383, 2383, 2383, 2383, 2383, 2383, 2383, 2386, 2386, 2386,
+     2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+     2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+     2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+     2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+     2386, 2386, 2386, 2386, 2386, 2386, 2386, 2388, 2388, 2388,
+     2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
+
+     2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
+     2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
+     2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388,
+     2388, 2388, 2388, 2388, 2388, 2388, 2388, 2389, 4093, 2389,
+     4094,    0, 4757,    0, 4759, 2389, 2389, 2389, 2389, 4093,
+     4097, 4094, 4093, 4757, 4094, 4759, 2389, 2389, 2389, 2389,
+     2389, 4097, 2389,    0, 4097,    0,    0,    0,    0, 2389,
+     2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+     2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+     2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+
+     2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+     2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394,
+     2396, 2396, 2396, 2396,    0, 2396, 2396, 4099, 2396,    0,
+     2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 4099,    0,
+     2396, 4099, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+     2396,    0, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396,
+     2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398,
+     2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2399, 2399,
+     2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+     2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+     2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+     2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399,
+     2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2400, 4103,
+     4760, 4763,    0,    0,    0,    0,    0,    0, 2400,    0,
+     4103, 4760, 4763, 4103, 2400, 2400, 2400, 2400, 2400, 2400,
+     2400, 2400,    0,    0,    0, 2400, 2400, 2400, 2400, 2400,
+
+     2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2402,
+     4105, 2402, 4118,    0, 4770,    0, 4793, 2402, 2402, 2402,
+     2402, 4105, 4121, 4118, 4105, 4770, 4118, 4793, 2402, 2402,
+     2402, 2402, 2402, 4121, 2402,    0, 4121,    0,    0,    0,
+        0, 2402, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+     2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+     2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+     2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+     2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
+     2408, 2408, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+     2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412,
+     2412, 2412, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
+     2413, 2413, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
+
+     2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
+     2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
+     2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
+     2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415,
+     2415, 2415, 2416, 4131, 4812, 4832,    0,    0,    0,    0,
+        0,    0, 2416,    0, 4131, 4812, 4832, 4131, 2416, 2416,
+     2416, 2416, 2416, 2416, 2416, 2416,    0,    0,    0, 2416,
+     2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
+     2416, 2416, 2416, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+     2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+
+     2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+     2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+     2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417,
+     2417, 2417, 2417, 2418, 4132, 2418, 4145,    0, 4851,    0,
+     4874, 2418, 2418, 2418, 2418, 4132, 4146, 4145, 4132, 4851,
+     4145, 4874, 2418, 2418, 2418, 2418, 2418, 4146, 2418,    0,
+     4146,    0,    0,    0,    0, 2418, 2421, 2421, 2421, 2421,
+     2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421,
+     2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421,
+     2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421,
+
+     2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421, 2421,
+     2421, 2421, 2421, 2421, 2421, 2421, 2425, 2425, 2425, 2425,
+     2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425,
+     2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425,
+     2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425,
+     2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425, 2425,
+     2425, 2425, 2425, 2425, 2425, 2425, 2430, 2430, 2430, 2430,
+     2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430,
+     2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430,
+     2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430,
+
+     2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430,
+     2430, 2430, 2430, 2430, 2430, 2430, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
+     2431, 2431, 2431, 2431, 2431, 2431, 2432, 4150, 2432, 4151,
+        0, 4875,    0, 4878, 2432, 2432, 2432, 2432, 4150, 4154,
+     4151, 4150, 4875, 4151, 4878, 2432, 2432, 2432, 2432, 2432,
+     4154, 2432,    0, 4154,    0,    0,    0,    0, 2432, 2433,
+
+     2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+     2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+     2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+     2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
+     2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2435,
+     2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+     2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+     2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+     2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
+     2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2436,
+
+     4162, 4883, 4909,    0,    0,    0,    0,    0,    0, 2436,
+        0, 4162, 4883, 4909, 4162, 2436, 2436, 2436, 2436, 2436,
+     2436, 2436, 2436,    0,    0,    0, 2436, 2436, 2436, 2436,
+     2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436,
+     2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437,
+     2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437,
+     2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437,
+     2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437,
+     2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437,
+     2438, 4164, 2438, 4166,    0, 4925,    0, 4945, 2438, 2438,
+
+     2438, 2438, 4164, 4169, 4166, 4164, 4925, 4166, 4945, 2438,
+     2438, 2438, 2438, 2438, 4169, 2438,    0, 4169,    0,    0,
+        0,    0, 2438, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+     2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+     2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+     2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+     2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444,
+     2444, 2444, 2444, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445,
+     2445, 2445, 2445, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+     2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+     2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+     2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+     2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
+     2451, 2451, 2451, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+     2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+     2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+
+     2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+     2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454, 2454,
+     2454, 2454, 2454, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
+     2459, 2459, 2459, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+     2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+     2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+
+     2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+     2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+     2469, 2469, 2469, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+     2470, 2470, 2470, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478, 2478,
+     2478, 2478, 2478, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482, 2482,
+     2482, 2482, 2482, 2486, 2486, 2486, 2486, 2486, 2486, 2486,
+     2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486,
+     2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486,
+
+     2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486,
+     2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486, 2486,
+     2486, 2486, 2486, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+     2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+     2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+     2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+     2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+     2490, 2490, 2490, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+     2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+     2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+
+     2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+     2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
+     2492, 2492, 2492, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+     2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+     2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+     2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+     2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
+     2493, 2493, 2493, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+     2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496,
+     2496, 2496, 2496, 2497, 4175, 4958, 4964,    0,    0,    0,
+        0,    0,    0, 2497,    0, 4175, 4958, 4964, 4175, 2497,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497,    0,    0,    0,
+     2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+     2497, 2497, 2497, 2497, 2503, 2503, 2503, 2503, 2503, 2503,
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+
+     2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503,
+     2503, 2503, 2503, 2503, 2508, 2508, 2508, 2508, 2508, 2508,
+     2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508,
+     2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508,
+     2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508,
+     2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508, 2508,
+     2508, 2508, 2508, 2508, 2509, 2509, 2509, 2509, 2509, 2509,
+     2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509,
+     2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509,
+     2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509,
+
+     2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509, 2509,
+     2509, 2509, 2509, 2509, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511, 2511,
+     2511, 2511, 2511, 2511, 2512, 4178, 4966, 4972,    0,    0,
+        0,    0,    0,    0, 2512,    0, 4178, 4966, 4972, 4178,
+     2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,    0,    0,
+        0, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512, 2512,
+
+     2512, 2512, 2512, 2512, 2512, 2513, 2513, 2513, 2513, 2513,
+     2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+     2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+     2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+     2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+     2513, 2513, 2513, 2513, 2513, 2515, 2515, 2515, 2515, 2515,
+     2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515,
+     2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515,
+     2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515,
+     2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515, 2515,
+
+     2515, 2515, 2515, 2515, 2515, 2518, 4184, 2518, 4198,    0,
+     4997,    0, 5009, 2518, 2518, 2518, 2518, 4184, 4201, 4198,
+     4184, 4997, 4198, 5009, 2518, 2518, 2518, 2518, 2518, 4201,
+     2518,    0, 4201,    0,    0,    0,    0, 2518, 2519, 2519,
+     2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519,
+     2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519,
+     2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519,
+     2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519,
+     2519, 2519, 2519, 2519, 2519, 2519, 2519, 2519, 2521, 2521,
+     2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
+
+     2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
+     2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
+     2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521,
+     2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525,
+     2525, 2525, 2525, 2525, 2525, 2525, 2525, 2525, 2526,    0,
+     2526,    0,    0, 5013,    0, 5026, 2526, 2526, 2526, 2526,
+
+     2805, 2805, 2805, 2805, 5013, 4204, 5026, 2526, 2526, 2526,
+     2526, 2526, 2805, 2526, 4212, 2805, 4204,    0, 4217, 4204,
+     2526, 2529, 4218, 5030, 5042, 4212,    0,    0, 4212, 4217,
+        0, 2529, 4217, 4218, 5030, 5042, 4218, 2529, 2529, 2529,
+     2529, 2529, 2529, 2529, 2529,    0,    0, 2805, 2529, 2529,
+     2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529, 2529,
+     2529, 2529, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+
+     2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+     2534, 2534, 2535, 4221, 5057, 5063,    0,    0,    0,    0,
+        0,    0, 2535,    0, 4221, 5057, 5063, 4221, 2535, 2535,
+     2535, 2535, 2535, 2535, 2535, 2535,    0,    0,    0, 2535,
+     2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+     2535, 2535, 2535, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+     2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+     2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+     2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+     2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536,
+
+     2536, 2536, 2536, 2538, 2538, 2538, 2538, 2538, 2538, 2538,
+     2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538,
+     2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538,
+     2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538,
+     2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538, 2538,
+     2538, 2538, 2538, 2541, 4222, 2541, 4232,    0, 5073,    0,
+     5075, 2541, 2541, 2541, 2541, 4222, 4234, 4232, 4222, 5073,
+     4232, 5075, 2541, 2541, 2541, 2541, 2541, 4234, 2541,    0,
+     4234,    0,    0,    0,    0, 2541, 2542, 2542, 2542, 2542,
+     2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542,
+
+     2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542,
+     2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542,
+     2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542,
+     2542, 2542, 2542, 2542, 2542, 2542, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547,
+     2547, 2547, 2547, 2547, 2547, 2547, 2548,    0, 2548,    0,
+        0, 5087,    0, 5099, 2548, 2548, 2548, 2548, 3127, 3127,
+
+     3127, 3127, 5087, 4236, 5099, 2548, 2548, 2548, 2548, 2548,
+     3127, 2548, 4239, 3127, 4236,    0, 4242, 4236, 2548, 2550,
+     4243, 5102,    0, 4239,    0,    0, 4239, 4242,    0, 2550,
+     4242, 4243, 5102,    0, 4243, 2550, 2550, 2550, 2550, 2550,
+     2550, 2550, 2550,    0,    0, 3127, 2550, 2550, 2550, 2550,
+     2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550,
+     2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+     2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+     2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+     2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+
+     2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+     2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
+     2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
+     2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
+     2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
+     2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554,
+     2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555,
+     2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555,
+     2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555,
+     2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555,
+
+     2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555,
+     2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+     2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+     2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+     2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+     2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557,
+     2558, 4247, 2558, 4248,    0,    0,    0,    0, 2558, 2558,
+     2558, 2558, 4247, 4253, 4248, 4247,    0, 4248,    0, 2558,
+     2558, 2558, 2558, 2558, 4253, 2558,    0, 4253,    0,    0,
+        0,    0, 2558, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+
+     2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+     2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+     2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+     2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559,
+     2559, 2559, 2559, 2564, 4262,    0,    0,    0,    0,    0,
+        0,    0,    0, 2564,    0, 4262,    0,    0, 4262, 2564,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564,    0,    0,    0,
+     2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+     2564, 2564, 2564, 2564, 2565, 2565, 2565, 2565, 2565, 2565,
+     2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565,
+
+     2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565,
+     2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565,
+     2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565,
+     2565, 2565, 2565, 2565, 2568, 4265, 2568, 4268,    0,    0,
+        0,    0, 2568, 2568, 2568, 2568, 4265, 4280, 4268, 4265,
+        0, 4268,    0, 2568, 2568, 2568, 2568, 2568, 4280, 2568,
+        0, 4280,    0,    0,    0,    0, 2568, 2569, 2569, 2569,
+     2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569,
+     2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569,
+     2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569,
+
+     2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569,
+     2569, 2569, 2569, 2569, 2569, 2569, 2569, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575,
+     2575, 2575, 2575, 2575, 2575, 2575, 2575, 2576, 4283,    0,
+        0,    0,    0,    0,    0,    0,    0, 2576,    0, 4283,
+        0,    0, 4283, 2576, 2576, 2576, 2576, 2576, 2576, 2576,
+     2576,    0,    0,    0, 2576, 2576, 2576, 2576, 2576, 2576,
+
+     2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2577, 2577,
+     2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
+     2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
+     2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
+     2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577,
+     2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2579, 2579,
+     2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
+     2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
+     2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
+     2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579,
+
+     2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2582, 4292,
+     2582, 4298,    0,    0,    0,    0, 2582, 2582, 2582, 2582,
+     4292, 4319, 4298, 4292,    0, 4298,    0, 2582, 2582, 2582,
+     2582, 2582, 4319, 2582,    0, 4319,    0,    0,    0,    0,
+     2582, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583,
+     2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583,
+     2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583,
+     2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583,
+     2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583,
+     2583, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+
+     2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+     2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+     2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+     2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+     2585, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+     2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+     2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+     2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+     2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+     2587, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593,
+
+     2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593,
+     2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593,
+     2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593,
+     2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593,
+     2593, 2595, 4322,    0,    0,    0,    0,    0,    0, 2595,
+        0, 2595,    0, 4322,    0,    0, 4322, 2595, 2595, 2595,
+     2595, 2595, 2595, 2595, 2595,    0,    0,    0, 2595, 2595,
+     2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595,
+     2595, 2595, 2596, 4325, 2596, 4327,    0,    0,    0,    0,
+     2596, 2596, 2596, 2596, 4325, 4337, 4327, 4325,    0, 4327,
+
+        0, 2596, 2596, 2596, 2596, 2596, 4337, 2596,    0, 4337,
+        0,    0,    0,    0, 2596, 2598, 2598, 2598, 2598, 2598,
+     2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+     2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+     2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+     2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598, 2598,
+     2598, 2598, 2598, 2598, 2598, 2599, 2599, 2599, 2599, 2599,
+     2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599,
+     2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599,
+     2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599,
+
+     2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599,
+     2599, 2599, 2599, 2599, 2599, 2601, 4341, 2601, 4343,    0,
+        0,    0,    0, 2601, 2601, 2601, 2601, 4341, 4345, 4343,
+     4341,    0, 4343,    0, 2601, 2601, 2601, 2601, 2601, 4345,
+     2601,    0, 4345,    0,    0,    0,    0, 2601, 2602, 2602,
+     2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602,
+     2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602,
+     2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602,
+     2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602,
+     2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2605, 2605,
+
+     2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
+     2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
+     2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
+     2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605,
+     2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2607, 4348,
+        0,    0,    0,    0,    0,    0,    0,    0, 2607,    0,
+     4348,    0,    0, 4348, 2607, 2607, 2607, 2607, 2607, 2607,
+     2607, 2607,    0,    0,    0, 2607, 2607, 2607, 2607, 2607,
+     2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2608,
+     4352, 2608, 4354,    0,    0,    0,    0, 2608, 2608, 2608,
+
+     2608, 4352, 4367, 4354, 4352,    0, 4354,    0, 2608, 2608,
+     2608, 2608, 2608, 4367, 2608,    0, 4367,    0,    0,    0,
+        0, 2608, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610,
+     2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610,
+     2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610,
+     2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610,
+     2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610,
+     2610, 2610, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612,
+     2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612,
+     2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612,
+
+     2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612,
+     2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612,
+     2612, 2612, 2613, 4370, 2613, 4383,    0,    0,    0,    0,
+     2613, 2613, 2613, 2613, 4370, 4384, 4383, 4370,    0, 4383,
+        0, 2613, 2613, 2613, 2613, 2613, 4384, 2613,    0, 4384,
+        0,    0,    0,    0, 2613, 2619, 2619, 2619, 2619, 2619,
+     2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
+     2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
+     2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
+     2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619,
+
+     2619, 2619, 2619, 2619, 2619, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620,
+     2620, 2620, 2620, 2620, 2620, 2621, 4388,    0,    0,    0,
+        0,    0,    0,    0,    0, 2621,    0, 4388,    0,    0,
+     4388, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621,    0,
+        0,    0, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621,
+     2621, 2621, 2621, 2621, 2621, 2621, 2622, 2622, 2622, 2622,
+
+     2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
+     2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
+     2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
+     2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622,
+     2622, 2622, 2622, 2622, 2622, 2622, 2623, 2623, 2623, 2623,
+     2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623,
+     2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623,
+     2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623,
+     2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623,
+     2623, 2623, 2623, 2623, 2623, 2623, 2626, 4390, 2626, 4404,
+
+        0,    0,    0,    0, 2626, 2626, 2626, 2626, 4390, 4410,
+     4404, 4390,    0, 4404,    0, 2626, 2626, 2626, 2626, 2626,
+     4410, 2626,    0, 4410,    0,    0,    0,    0, 2626, 2627,
+     2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
+     2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
+     2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
+     2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627,
+     2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628,
+     2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2629,
+        0, 2629,    0,    0,    0,    0,    0, 2629, 2629, 2629,
+     2629, 3989, 3989, 3989, 3989,    0, 4425,    0, 2629, 2629,
+     2629, 2629, 2629, 3989, 2629, 4428, 3989, 4425,    0, 4430,
+     4425, 2629, 2630, 4440,    0,    0, 4428,    0,    0, 4428,
+     4430,    0, 2630, 4430, 4440,    0,    0, 4440, 2630, 2630,
+     2630, 2630, 2630, 2630, 2630, 2630,    0,    0, 3989, 2630,
+     2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630,
+
+     2630, 2630, 2630, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+     2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+     2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+     2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+     2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633,
+     2633, 2633, 2633, 2635, 2635, 2635, 2635,    0, 2635, 2635,
+     4453, 2635,    0, 2635, 2635, 2635, 2635, 2635, 2635, 2635,
+     2635, 4453,    0, 2635, 4453, 2635, 2635, 2635, 2635, 2635,
+     2635, 2635, 2635, 2635,    0, 2635, 2635, 2635, 2635, 2635,
+     2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635,
+
+     2635, 2636, 4464, 2636, 4466,    0,    0,    0,    0, 2636,
+     2636, 2636, 2636, 4464, 4469, 4466, 4464,    0, 4466,    0,
+     2636, 2636, 2636, 2636, 2636, 4469, 2636,    0, 4469,    0,
+        0,    0,    0, 2636, 2642, 2642, 2642, 2642, 2642, 2642,
+     2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642,
+     2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642,
+     2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642,
+     2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642,
+     2642, 2642, 2642, 2642, 2644, 4470,    0,    0,    0,    0,
+        0,    0,    0,    0, 2644,    0, 4470,    0,    0, 4470,
+
+     2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644,    0,    0,
+        0, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644,
+     2644, 2644, 2644, 2644, 2644, 2646, 2646, 2646, 2646, 2646,
+     2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+     2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+     2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+     2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+     2646, 2646, 2646, 2646, 2646, 2647, 2647, 2647, 2647, 2647,
+     2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+     2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+
+     2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+     2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+     2647, 2647, 2647, 2647, 2647, 2649, 2649, 2649, 2649, 2649,
+     2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+     2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+     2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+     2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+     2649, 2649, 2649, 2649, 2649, 2650, 4472, 2650, 4476,    0,
+        0,    0,    0, 2650, 2650, 2650, 2650, 4472, 4480, 4476,
+     4472,    0, 4476,    0, 2650, 2650, 2650, 2650, 2650, 4480,
+
+     2650,    0, 4480,    0,    0,    0,    0, 2650, 2651, 2651,
+     2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+     2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+     2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+     2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+     2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2654, 2654,
+     2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+     2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+     2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+     2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654,
+
+     2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2657, 2657,
+     2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
+     2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
+     2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
+     2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657,
+     2657, 2657, 2657, 2657, 2657, 2657, 2657, 2657, 2658, 4485,
+     2658, 4487,    0,    0,    0,    0, 2658, 2658, 2658, 2658,
+     4485, 4492, 4487, 4485,    0, 4487,    0, 2658, 2658, 2658,
+     2658, 2658, 4492, 2658,    0, 4492,    0,    0,    0,    0,
+     2658, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
+
+     2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
+     2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
+     2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
+     2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660, 2660,
+     2660, 2662,    0, 2662, 2662, 2662, 4494, 4504,    0,    0,
+        0, 2662, 2662, 2662, 2662,    0, 4507, 4494, 4504,    0,
+     4494, 4504, 2662, 2662, 2662, 2662, 2662, 4507, 2662,    0,
+     4507,    0,    0,    0,    0, 2662, 2666, 2666, 2666, 2666,
+     2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
+     2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
+
+     2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
+     2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666, 2666,
+     2666, 2666, 2666, 2666, 2666, 2666, 2668, 2668, 2668, 2668,
+     2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+     2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+     2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+     2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668,
+     2668, 2668, 2668, 2668, 2668, 2668, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669,
+     2669, 2669, 2669, 2669, 2669, 2669, 2670,    0, 2670,    0,
+        0,    0,    0,    0, 2670, 2670, 2670, 2670, 4241, 4241,
+     4241, 4241,    0, 4508,    0, 2670, 2670, 2670, 2670, 2670,
+     4241, 2670, 4511, 4241, 4508,    0, 4513, 4508, 2670, 2671,
+     4515,    0,    0, 4511,    0,    0, 4511, 4513,    0, 2671,
+     4513, 4515,    0,    0, 4515, 2671, 2671, 2671, 2671, 2671,
+     2671, 2671, 2671,    0,    0, 4241, 2671, 2671, 2671, 2671,
+     2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671,
+
+     2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676,
+     2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676,
+     2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676,
+     2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676,
+     2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676, 2676,
+     2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+     2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+     2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+     2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+     2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678,
+
+     2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+     2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+     2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+     2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+     2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680, 2680,
+     2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682,
+     2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682,
+     2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682,
+     2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682,
+     2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682,
+
+     2683, 4524, 2683, 4529,    0,    0,    0,    0, 2683, 2683,
+     2683, 2683, 4524, 4532, 4529, 4524,    0, 4529,    0, 2683,
+     2683, 2683, 2683, 2683, 4532, 2683,    0, 4532,    0,    0,
+        0,    0, 2683, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+     2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+     2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+     2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+     2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684, 2684,
+     2684, 2684, 2684, 2685, 4534,    0,    0,    0,    0,    0,
+        0,    0,    0, 2685,    0, 4534,    0,    0, 4534, 2685,
+
+     2685, 2685, 2685, 2685, 2685, 2685, 2685,    0,    0,    0,
+     2685, 2685, 2685, 2685, 2685, 2685, 2685, 2685, 2685, 2685,
+     2685, 2685, 2685, 2685, 2686, 4535, 2686, 4537,    0,    0,
+        0,    0, 2686, 2686, 2686, 2686, 4535, 4539, 4537, 4535,
+        0, 4537,    0, 2686, 2686, 2686, 2686, 2686, 4539, 2686,
+     4541, 4539,    0,    0,    0,    0, 2686, 2689, 4548, 2689,
+     4552, 4541,    0,    0, 4541, 2689, 2689, 2689, 2689, 4548,
+     4556, 4552, 4548,    0, 4552,    0, 2689, 2689, 2689, 2689,
+     2689, 4556, 2689,    0, 4556,    0,    0,    0,    0, 2689,
+     2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691,
+
+     2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691,
+     2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691,
+     2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691,
+     2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691,
+     2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
+     2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
+     2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
+     2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
+     2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692,
+     2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697,
+
+     2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697,
+     2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697,
+     2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697,
+     2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697, 2697,
+     2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701,
+     2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701,
+     2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701,
+     2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701,
+     2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701,
+     2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703,
+
+     2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703,
+     2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703,
+     2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703,
+     2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703,
+     2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704,
+     2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704,
+     2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704,
+     2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704,
+     2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704,
+     2706, 4557,    0,    0,    0,    0,    0,    0, 2706,    0,
+
+     2706,    0, 4557,    0,    0, 4557, 2706, 2706, 2706, 2706,
+     2706, 2706, 2706, 2706,    0,    0,    0, 2706, 2706, 2706,
+     2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706,
+     2706, 2707, 4560, 2707, 4562,    0,    0,    0,    0, 2707,
+     2707, 2707, 2707, 4560, 4574, 4562, 4560,    0, 4562,    0,
+     2707, 2707, 2707, 2707, 2707, 4574, 2707,    0, 4574,    0,
+        0,    0,    0, 2707, 2709, 2709, 2709, 2709, 2709, 2709,
+     2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+     2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+     2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+
+     2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709,
+     2709, 2709, 2709, 2709, 2710, 2710, 2710, 2710, 2710, 2710,
+     2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
+     2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
+     2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
+     2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710,
+     2710, 2710, 2710, 2710, 2712, 4577, 2712, 4597,    0,    0,
+        0,    0, 2712, 2712, 2712, 2712, 4577, 4598, 4597, 4577,
+        0, 4597,    0, 2712, 2712, 2712, 2712, 2712, 4598, 2712,
+        0, 4598,    0,    0,    0,    0, 2712, 2713, 2713, 2713,
+
+     2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
+     2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
+     2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
+     2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713,
+     2713, 2713, 2713, 2713, 2713, 2713, 2713, 2716, 2716, 2716,
+     2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
+     2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
+     2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
+     2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716,
+     2716, 2716, 2716, 2716, 2716, 2716, 2716, 2718, 2718, 2718,
+
+     2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718,
+     2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718,
+     2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718,
+     2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718,
+     2718, 2718, 2718, 2718, 2718, 2718, 2718, 2719, 2719, 2719,
+     2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+     2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+     2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+     2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719,
+     2719, 2719, 2719, 2719, 2719, 2719, 2719, 2720, 4601,    0,
+
+        0,    0,    0,    0,    0,    0,    0, 2720,    0, 4601,
+        0,    0, 4601, 2720, 2720, 2720, 2720, 2720, 2720, 2720,
+     2720,    0,    0,    0, 2720, 2720, 2720, 2720, 2720, 2720,
+     2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2722, 2722,
+     2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722,
+     2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722,
+     2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722,
+     2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722,
+     2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2723, 2723,
+     2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723,
+
+     2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723,
+     2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723,
+     2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723,
+     2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2725, 2725,
+     2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725,
+     2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725,
+     2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725,
+     2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725,
+     2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2726, 4602,
+     2726, 4606,    0,    0,    0,    0, 2726, 2726, 2726, 2726,
+
+     4602, 4614, 4606, 4602,    0, 4606,    0, 2726, 2726, 2726,
+     2726, 2726, 4614, 2726,    0, 4614,    0,    0,    0,    0,
+     2726, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+     2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+     2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+     2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+     2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727,
+     2727, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+     2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+     2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+
+     2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+     2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728,
+     2728, 2731, 4617, 2731, 4619,    0,    0,    0,    0, 2731,
+     2731, 2731, 2731, 4617, 4622, 4619, 4617,    0, 4619,    0,
+     2731, 2731, 2731, 2731, 2731, 4622, 2731,    0, 4622,    0,
+        0,    0,    0, 2731, 2733, 2733, 2733, 2733, 2733, 2733,
+     2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
+     2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
+     2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
+     2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733,
+
+     2733, 2733, 2733, 2733, 2735,    0, 2735, 2735, 2735, 4624,
+     4625,    0,    0,    0, 2735, 2735, 2735, 2735,    0, 4628,
+     4624, 4625,    0, 4624, 4625, 2735, 2735, 2735, 2735, 2735,
+     4628, 2735,    0, 4628,    0,    0,    0,    0, 2735, 2738,
+     2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738,
+     2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738,
+     2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738,
+     2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738,
+     2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739,
+     2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2740,
+     4632, 2740, 4635,    0,    0,    0,    0, 2740, 2740, 2740,
+     2740, 4632, 4638, 4635, 4632,    0, 4635,    0, 2740, 2740,
+     2740, 2740, 2740, 4638, 2740, 4639, 4638, 4641,    0, 4645,
+        0, 2740, 2743, 4647,    0,    0, 4639,    0, 4641, 4639,
+     4645, 4641, 2743, 4645, 4647,    0,    0, 4647, 2743, 2743,
+     2743, 2743, 2743, 2743, 2743, 2743,    0,    0,    0, 2743,
+
+     2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743,
+     2743, 2743, 2743, 2748, 2748, 2748, 2748, 2748, 2748, 2748,
+     2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748,
+     2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748,
+     2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748,
+     2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748, 2748,
+     2748, 2748, 2748, 2751, 2751, 2751, 2751, 2751, 2751, 2751,
+     2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751,
+     2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751,
+     2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751,
+
+     2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751, 2751,
+     2751, 2751, 2751, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+     2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+     2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+     2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+     2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753,
+     2753, 2753, 2753, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+
+     2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755,
+     2755, 2755, 2755, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+     2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+     2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+     2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+     2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756,
+     2756, 2756, 2756, 2758, 2758, 2758, 2758, 2758, 2758, 2758,
+     2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758,
+     2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758,
+     2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758,
+
+     2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758, 2758,
+     2758, 2758, 2758, 2759, 4650,    0,    0,    0,    0,    0,
+        0,    0,    0, 2759,    0, 4650,    0,    0, 4650, 2759,
+     2759, 2759, 2759, 2759, 2759, 2759, 2759,    0,    0,    0,
+     2759, 2759, 2759, 2759, 2759, 2759, 2759, 2759, 2759, 2759,
+     2759, 2759, 2759, 2759, 2761, 4651, 2761, 4655,    0,    0,
+        0,    0, 2761, 2761, 2761, 2761, 4651, 4657, 4655, 4651,
+        0, 4655,    0, 2761, 2761, 2761, 2761, 2761, 4657, 2761,
+        0, 4657,    0,    0,    0,    0, 2761, 2764, 2764, 2764,
+     2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764,
+
+     2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764,
+     2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764,
+     2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764,
+     2764, 2764, 2764, 2764, 2764, 2764, 2764, 2767, 2767, 2767,
+     2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767,
+     2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767,
+     2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767,
+     2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767,
+     2767, 2767, 2767, 2767, 2767, 2767, 2767, 2771, 2771, 2771,
+     2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771,
+
+     2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771,
+     2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771,
+     2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771,
+     2771, 2771, 2771, 2771, 2771, 2771, 2771, 2773, 2773, 2773,
+     2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
+     2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
+     2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
+     2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773,
+     2773, 2773, 2773, 2773, 2773, 2773, 2773, 2774, 4668, 2774,
+     4670,    0,    0,    0,    0, 2774, 2774, 2774, 2774, 4668,
+
+     4674, 4670, 4668,    0, 4670,    0, 2774, 2774, 2774, 2774,
+     2774, 4674, 2774,    0, 4674,    0,    0,    0,    0, 2774,
+     2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+     2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+     2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+     2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+     2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775,
+     2776, 4691,    0,    0,    0,    0,    0,    0,    0,    0,
+     2776,    0, 4691,    0,    0, 4691, 2776, 2776, 2776, 2776,
+     2776, 2776, 2776, 2776,    0,    0,    0, 2776, 2776, 2776,
+
+     2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776,
+     2776, 2777, 4700, 2777, 4702,    0,    0,    0,    0, 2777,
+     2777, 2777, 2777, 4700, 4708, 4702, 4700,    0, 4702,    0,
+     2777, 2777, 2777, 2777, 2777, 4708, 2777,    0, 4708,    0,
+        0,    0,    0, 2777, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783,
+     2783, 2783, 2783, 2783, 2789, 2789, 2789, 2789, 2789, 2789,
+
+     2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
+     2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
+     2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
+     2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789,
+     2789, 2789, 2789, 2789, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793,
+     2793, 2793, 2793, 2793, 2806, 2806, 2806, 2806, 2806, 2806,
+
+     2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
+     2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
+     2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
+     2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806, 2806,
+     2806, 2806, 2806, 2806, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807, 2807,
+     2807, 2807, 2807, 2807, 2812, 2812, 2812, 2812, 2812, 2812,
+
+     2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
+     2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
+     2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
+     2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812, 2812,
+     2812, 2812, 2812, 2812, 2814, 2814, 2814, 2814, 2814, 2814,
+     2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+     2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+     2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+     2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814, 2814,
+     2814, 2814, 2814, 2814, 2816, 2816, 2816, 2816, 2816, 2816,
+
+     2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
+     2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
+     2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
+     2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816,
+     2816, 2816, 2816, 2816, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817, 2817,
+     2817, 2817, 2817, 2817, 2820, 2820, 2820, 2820, 2820, 2820,
+
+     2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820,
+     2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820,
+     2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820,
+     2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820,
+     2820, 2820, 2820, 2820, 2822, 2822, 2822, 2822, 2822, 2822,
+     2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822,
+     2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822,
+     2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822,
+     2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822, 2822,
+     2822, 2822, 2822, 2822, 2824, 2824, 2824, 2824, 2824, 2824,
+
+     2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824,
+     2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824,
+     2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824,
+     2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824, 2824,
+     2824, 2824, 2824, 2824, 2826, 2826, 2826, 2826,    0, 4711,
+        0, 4713,    0, 4719, 2826, 2826,    0, 4724, 4729, 2826,
+     4711, 2826, 4713, 4711, 4719, 4713, 4732, 4719, 4724, 4729,
+     4736, 4724, 4729,    0, 4747, 4749, 4750, 4732,    0,    0,
+     4732, 4736,    0,    0, 4736, 4747, 4749, 4750, 4747, 4749,
+     4750, 2826, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+
+     2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+     2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+     2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+     2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827, 2827,
+     2827, 2827, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829, 2829,
+     2829, 2829, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834,
+     2834, 2834, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+     2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+     2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+     2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+     2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839,
+     2839, 2839, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+
+     2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+     2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+     2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+     2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841,
+     2841, 2841, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
+     2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
+     2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
+     2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
+     2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843,
+     2843, 2843, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
+
+     2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
+     2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
+     2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
+     2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847,
+     2847, 2847, 2848, 4752,    0,    0,    0,    0,    0,    0,
+        0,    0, 2848,    0, 4752,    0,    0, 4752, 2848, 2848,
+     2848, 2848, 2848, 2848, 2848, 2848,    0,    0,    0, 2848,
+     2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848,
+     2848, 2848, 2848, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+     2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+
+     2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+     2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+     2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850,
+     2850, 2850, 2850, 2851, 4756,    0,    0,    0,    0,    0,
+        0,    0,    0, 2851,    0, 4756,    0,    0, 4756, 2851,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851,    0,    0,    0,
+     2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851,
+     2851, 2851, 2851, 2851, 2852, 2852, 2852, 2852, 2852, 2852,
+     2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+     2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+
+     2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+     2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852,
+     2852, 2852, 2852, 2852, 2854, 4758, 2854, 4762,    0,    0,
+        0,    0, 2854, 2854, 2854, 2854, 4758, 4765, 4762, 4758,
+        0, 4762,    0, 2854, 2854, 2854, 2854, 2854, 4765, 2854,
+        0, 4765,    0,    0,    0,    0, 2854, 2855, 2855, 2855,
+     2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855,
+     2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855,
+     2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855,
+     2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855,
+
+     2855, 2855, 2855, 2855, 2855, 2855, 2855, 2858, 2858, 2858,
+     2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
+     2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
+     2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
+     2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858,
+     2858, 2858, 2858, 2858, 2858, 2858, 2858, 2862, 2862, 2862,
+     2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+     2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+     2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+     2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862,
+
+     2862, 2862, 2862, 2862, 2862, 2862, 2862, 2864, 2864, 2864,
+     2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+     2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+     2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+     2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864,
+     2864, 2864, 2864, 2864, 2864, 2864, 2864, 2865, 4769, 2865,
+     4771,    0,    0,    0,    0, 2865, 2865, 2865, 2865, 4769,
+     4792, 4771, 4769,    0, 4771,    0, 2865, 2865, 2865, 2865,
+     2865, 4792, 2865, 4802, 4792, 4811,    0, 4817,    0, 2865,
+     2872, 4822,    0,    0, 4802,    0, 4811, 4802, 4817, 4811,
+
+     2872, 4817, 4822,    0,    0, 4822, 2872, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872,    0,    0,    0, 2872, 2872, 2872,
+     2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872,
+     2872, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
+     2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
+     2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
+     2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
+     2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873, 2873,
+     2873, 2876, 4831, 2876, 4833,    0,    0,    0,    0, 2876,
+     2876, 2876, 2876, 4831, 4835, 4833, 4831,    0, 4833,    0,
+
+     2876, 2876, 2876, 2876, 2876, 4835, 2876,    0, 4835,    0,
+        0,    0,    0, 2876, 2877, 2877, 2877, 2877, 2877, 2877,
+     2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
+     2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
+     2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
+     2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877, 2877,
+     2877, 2877, 2877, 2877, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+
+     2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879, 2879,
+     2879, 2879, 2879, 2879, 2880, 4836, 2880, 4853,    0,    0,
+        0,    0, 2880, 2880, 2880, 2880, 4836, 4857, 4853, 4836,
+        0, 4853,    0, 2880, 2880, 2880, 2880, 2880, 4857, 2880,
+        0, 4857,    0,    0,    0,    0, 2880, 2881, 2881, 2881,
+     2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881,
+     2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881,
+     2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881,
+     2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881, 2881,
+     2881, 2881, 2881, 2881, 2881, 2881, 2881, 2883, 4859,    0,
+
+        0,    0,    0,    0,    0,    0,    0, 2883,    0, 4859,
+        0,    0, 4859, 2883, 2883, 2883, 2883, 2883, 2883, 2883,
+     2883,    0,    0,    0, 2883, 2883, 2883, 2883, 2883, 2883,
+     2883, 2883, 2883, 2883, 2883, 2883, 2883, 2883, 2886, 2886,
+     2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
+     2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
+     2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
+     2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886,
+     2886, 2886, 2886, 2886, 2886, 2886, 2886, 2886, 2887, 2887,
+     2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
+
+     2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
+     2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
+     2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887,
+     2887, 2887, 2887, 2887, 2887, 2887, 2887, 2887, 2889, 2889,
+     2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
+     2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
+     2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
+     2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889,
+     2889, 2889, 2889, 2889, 2889, 2889, 2889, 2889, 2890, 4869,
+     2890, 4871,    0,    0,    0,    0, 2890, 2890, 2890, 2890,
+
+     4869, 4872, 4871, 4869,    0, 4871,    0, 2890, 2890, 2890,
+     2890, 2890, 4872, 2890,    0, 4872,    0,    0,    0,    0,
+     2890, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
+     2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
+     2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
+     2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
+     2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891, 2891,
+     2891, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897,
+     2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897,
+     2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897,
+
+     2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897,
+     2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897, 2897,
+     2897, 2898, 4873,    0,    0,    0,    0,    0,    0,    0,
+        0, 2898,    0, 4873,    0,    0, 4873, 2898, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898,    0,    0,    0, 2898, 2898,
+     2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898, 2898,
+     2898, 2898, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899,
+     2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899,
+     2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899,
+     2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899,
+
+     2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899, 2899,
+     2899, 2899, 2902, 4877, 2902, 4880,    0,    0,    0,    0,
+     2902, 2902, 2902, 2902, 4877, 4882, 4880, 4877,    0, 4880,
+        0, 2902, 2902, 2902, 2902, 2902, 4882, 2902,    0, 4882,
+        0,    0,    0,    0, 2902, 2904, 2904, 2904, 2904, 2904,
+     2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+     2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+     2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+     2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904,
+     2904, 2904, 2904, 2904, 2904, 2906, 2906, 2906, 2906, 2906,
+
+     2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906,
+     2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906,
+     2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906,
+     2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906, 2906,
+     2906, 2906, 2906, 2906, 2906, 2910, 4885,    0,    0,    0,
+        0,    0,    0, 2910,    0, 2910,    0, 4885,    0,    0,
+     4885, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,    0,
+        0,    0, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910,
+     2910, 2910, 2910, 2910, 2910, 2910, 2912, 4887, 2912, 4889,
+        0,    0,    0,    0, 2912, 2912, 2912, 2912, 4887, 4896,
+
+     4889, 4887,    0, 4889,    0, 2912, 2912, 2912, 2912, 2912,
+     4896, 2912,    0, 4896,    0,    0,    0,    0, 2912, 2914,
+     2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914,
+     2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914,
+     2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914,
+     2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914,
+     2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2915,
+     2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+     2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+     2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+
+     2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915,
+     2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2915, 2917,
+     4898, 2917, 4908,    0,    0,    0,    0, 2917, 2917, 2917,
+     2917, 4898, 4911, 4908, 4898,    0, 4908,    0, 2917, 2917,
+     2917, 2917, 2917, 4911, 2917,    0, 4911,    0,    0,    0,
+        0, 2917, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+     2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+     2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+     2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+     2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918, 2918,
+
+     2918, 2918, 2920, 4913,    0,    0,    0,    0,    0,    0,
+        0,    0, 2920,    0, 4913,    0,    0, 4913, 2920, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920,    0,    0,    0, 2920,
+     2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920, 2920,
+     2920, 2920, 2920, 2921, 4924, 2921, 4930,    0,    0,    0,
+        0, 2921, 2921, 2921, 2921, 4924, 4931, 4930, 4924,    0,
+     4930,    0, 2921, 2921, 2921, 2921, 2921, 4931, 2921,    0,
+     4931,    0,    0,    0,    0, 2921, 2924, 2924, 2924, 2924,
+     2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+     2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+
+     2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+     2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924,
+     2924, 2924, 2924, 2924, 2924, 2924, 2926, 2926, 2926, 2926,
+     2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926,
+     2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926,
+     2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926,
+     2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926,
+     2926, 2926, 2926, 2926, 2926, 2926, 2927, 4933, 2927, 4943,
+        0,    0,    0,    0, 2927, 2927, 2927, 2927, 4933, 4944,
+     4943, 4933,    0, 4943,    0, 2927, 2927, 2927, 2927, 2927,
+
+     4944, 2927,    0, 4944,    0,    0,    0,    0, 2927, 2933,
+     2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933,
+     2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933,
+     2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933,
+     2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933,
+     2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2933, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939,
+
+     2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2939, 2940,
+     4948, 2940, 4957,    0,    0,    0,    0, 2940, 2940, 2940,
+     2940, 4948, 4960, 4957, 4948,    0, 4957,    0, 2940, 2940,
+     2940, 2940, 2940, 4960, 2940, 4963, 4960, 4965,    0, 4967,
+        0, 2940, 2942, 4969,    0,    0, 4963,    0, 4965, 4963,
+     4967, 4965, 2942, 4967, 4969,    0,    0, 4969, 2942, 2942,
+     2942, 2942, 2942, 2942, 2942, 2942,    0,    0,    0, 2942,
+     2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942, 2942,
+     2942, 2942, 2942, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+     2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+
+     2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+     2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+     2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945, 2945,
+     2945, 2945, 2945, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+     2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+     2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+     2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+     2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946, 2946,
+     2946, 2946, 2946, 2948, 2948, 2948, 2948, 2948, 2948, 2948,
+     2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948,
+
+     2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948,
+     2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948,
+     2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948, 2948,
+     2948, 2948, 2948, 2949, 4970, 2949, 4971,    0,    0,    0,
+        0, 2949, 2949, 2949, 2949, 4970, 4974, 4971, 4970,    0,
+     4971,    0, 2949, 2949, 2949, 2949, 2949, 4974, 2949,    0,
+     4974,    0,    0,    0,    0, 2949, 2950, 2950, 2950, 2950,
+     2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950,
+     2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950,
+     2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950,
+
+     2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950, 2950,
+     2950, 2950, 2950, 2950, 2950, 2950, 2954, 2954, 2954, 2954,
+     2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954,
+     2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954,
+     2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954,
+     2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954, 2954,
+     2954, 2954, 2954, 2954, 2954, 2954, 2955, 4977,    0,    0,
+        0,    0,    0,    0,    0,    0, 2955,    0, 4977,    0,
+        0, 4977, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+        0,    0,    0, 2955, 2955, 2955, 2955, 2955, 2955, 2955,
+
+     2955, 2955, 2955, 2955, 2955, 2955, 2955, 2956, 2956, 2956,
+     2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956,
+     2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956,
+     2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956,
+     2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956, 2956,
+     2956, 2956, 2956, 2956, 2956, 2956, 2956, 2959, 4980, 2959,
+     4991,    0,    0,    0,    0, 2959, 2959, 2959, 2959, 4980,
+     4993, 4991, 4980,    0, 4991,    0, 2959, 2959, 2959, 2959,
+     2959, 4993, 2959,    0, 4993,    0,    0,    0,    0, 2959,
+     2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
+
+     2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
+     2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
+     2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
+     2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960, 2960,
+     2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
+     2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
+     2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
+     2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
+     2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963,
+     2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968,
+
+     2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968,
+     2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968,
+     2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968,
+     2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968,
+     2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970,
+     2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970,
+     2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970,
+     2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970,
+     2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970, 2970,
+     2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+
+     2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+     2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+     2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+     2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972, 2972,
+     2974, 4994, 2974, 4996,    0,    0,    0,    0, 2974, 2974,
+     2974, 2974, 4994, 5006, 4996, 4994,    0, 4996,    0, 2974,
+     2974, 2974, 2974, 2974, 5006, 2974,    0, 5006,    0,    0,
+        0,    0, 2974, 2975, 2975, 2975, 2975, 2975, 2975, 2975,
+     2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975,
+     2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975,
+
+     2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975,
+     2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975, 2975,
+     2975, 2975, 2975, 2976, 5011,    0,    0,    0,    0,    0,
+        0,    0,    0, 2976,    0, 5011,    0,    0, 5011, 2976,
+     2976, 2976, 2976, 2976, 2976, 2976, 2976,    0,    0,    0,
+     2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976,
+     2976, 2976, 2976, 2976, 2977, 5012, 2977, 5024,    0,    0,
+        0,    0, 2977, 2977, 2977, 2977, 5012, 5025, 5024, 5012,
+        0, 5024,    0, 2977, 2977, 2977, 2977, 2977, 5025, 2977,
+        0, 5025,    0,    0,    0,    0, 2977, 2980, 2980, 2980,
+
+     2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980,
+     2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980,
+     2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980,
+     2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980, 2980,
+     2980, 2980, 2980, 2980, 2980, 2980, 2980, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982, 2982,
+     2982, 2982, 2982, 2982, 2982, 2982, 2982, 2983, 5028, 2983,
+
+     5032,    0,    0,    0,    0, 2983, 2983, 2983, 2983, 5028,
+     5034, 5032, 5028,    0, 5032,    0, 2983, 2983, 2983, 2983,
+     2983, 5034, 2983,    0, 5034,    0,    0,    0,    0, 2983,
+     2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
+     2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
+     2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
+     2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
+     2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984, 2984,
+     2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
+     2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
+
+     2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
+     2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
+     2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
+     2988, 5036,    0,    0,    0,    0,    0,    0,    0,    0,
+     2988,    0, 5036,    0,    0, 5036, 2988, 2988, 2988, 2988,
+     2988, 2988, 2988, 2988,    0,    0,    0, 2988, 2988, 2988,
+     2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988, 2988,
+     2988, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993,
+     2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993,
+     2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993,
+
+     2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993,
+     2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993, 2993,
+     2993, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
+     2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
+     2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
+     2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
+     2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995, 2995,
+     2995, 2996, 5039, 2996, 5040,    0,    0,    0,    0, 2996,
+     2996, 2996, 2996, 5039, 5044, 5040, 5039,    0, 5040,    0,
+     2996, 2996, 2996, 2996, 2996, 5044, 2996,    0, 5044,    0,
+
+        0,    0,    0, 2996, 2997, 2997, 2997, 2997, 2997, 2997,
+     2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997,
+     2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997,
+     2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997,
+     2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997, 2997,
+     2997, 2997, 2997, 2997, 3002, 5046,    0,    0,    0,    0,
+        0,    0,    0,    0, 3002,    0, 5046,    0,    0, 5046,
+     3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,    0,    0,
+        0, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002, 3002,
+     3002, 3002, 3002, 3002, 3002, 3003, 3003, 3003, 3003, 3003,
+
+     3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003,
+     3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003,
+     3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003,
+     3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003, 3003,
+     3003, 3003, 3003, 3003, 3003, 3006, 5059, 3006, 5061,    0,
+        0,    0,    0, 3006, 3006, 3006, 3006, 5059, 5062, 5061,
+     5059,    0, 5061,    0, 3006, 3006, 3006, 3006, 3006, 5062,
+     3006,    0, 5062,    0,    0,    0,    0, 3006, 3007, 3007,
+     3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007,
+     3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007,
+
+     3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007,
+     3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007,
+     3007, 3007, 3007, 3007, 3007, 3007, 3007, 3007, 3009, 5072,
+        0,    0,    0,    0,    0,    0, 3009,    0, 3009,    0,
+     5072,    0,    0, 5072, 3009, 3009, 3009, 3009, 3009, 3009,
+     3009, 3009,    0,    0,    0, 3009, 3009, 3009, 3009, 3009,
+     3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3009, 3010,
+     5074, 3010, 5076,    0,    0,    0,    0, 3010, 3010, 3010,
+     3010, 5074, 5078, 5076, 5074,    0, 5076,    0, 3010, 3010,
+     3010, 3010, 3010, 5078, 3010,    0, 5078,    0,    0,    0,
+
+        0, 3010, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+     3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+     3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+     3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+     3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012, 3012,
+     3012, 3012, 3014, 5089, 3014, 5098,    0,    0,    0,    0,
+     3014, 3014, 3014, 3014, 5089, 5101, 5098, 5089,    0, 5098,
+        0, 3014, 3014, 3014, 3014, 3014, 5101, 3014,    0, 5101,
+        0,    0,    0,    0, 3014, 3020, 3020, 3020, 3020, 3020,
+     3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020,
+
+     3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020,
+     3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020,
+     3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020,
+     3020, 3020, 3020, 3020, 3020, 3021, 3021, 3021, 3021, 3021,
+     3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021,
+     3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021,
+     3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021,
+     3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021,
+     3021, 3021, 3021, 3021, 3021, 3023, 3023, 3023, 3023, 3023,
+     3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023,
+
+     3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023,
+     3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023,
+     3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023,
+     3023, 3023, 3023, 3023, 3023, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024,
+     3024, 3024, 3024, 3024, 3024, 3025, 5104,    0,    0,    0,
+        0,    0,    0,    0,    0, 3025,    0, 5104,    0,    0,
+
+     5104, 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,    0,
+        0,    0, 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025,
+     3025, 3025, 3025, 3025, 3025, 3025, 3026, 3026, 3026, 3026,
+     3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
+     3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
+     3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
+     3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026,
+     3026, 3026, 3026, 3026, 3026, 3026, 3027, 3027, 3027, 3027,
+     3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027,
+     3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027,
+
+     3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027,
+     3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027,
+     3027, 3027, 3027, 3027, 3027, 3027, 3030, 5106, 3030, 5108,
+        0,    0,    0,    0, 3030, 3030, 3030, 3030, 5106, 5111,
+     5108, 5106,    0, 5108,    0, 3030, 3030, 3030, 3030, 3030,
+     5111, 3030,    0, 5111,    0,    0,    0,    0, 3030, 3031,
+     3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+     3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+     3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+     3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031,
+
+     3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3032,
+     3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+     3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+     3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+     3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032,
+     3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3034,
+     3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034,
+     3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034,
+     3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034,
+     3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034,
+
+     3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3036,
+     3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036,
+     3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036,
+     3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036,
+     3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036,
+     3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3040,
+     3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040,
+     3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040,
+     3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040,
+     3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040,
+
+     3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3040, 3042,
+     3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042,
+     3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042,
+     3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042,
+     3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042,
+     3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3042, 3043,
+     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
+     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
+     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
+     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043,
+
+     3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3043, 3044,
+     5118,    0,    0,    0,    0,    0,    0,    0,    0, 3044,
+        0, 5118,    0,    0, 5118, 3044, 3044, 3044, 3044, 3044,
+     3044, 3044, 3044,    0,    0,    0, 3044, 3044, 3044, 3044,
+     3044, 3044, 3044, 3044, 3044, 3044, 3044, 3044, 3044, 3044,
+     3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+     3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+     3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+     3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+     3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
+
+     3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+     3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+     3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+     3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+     3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047, 3047,
+     3049, 5120, 3049, 5129,    0,    0,    0,    0, 3049, 3049,
+     3049, 3049, 5120, 5137, 5129, 5120,    0, 5129,    0, 3049,
+     3049, 3049, 3049, 3049, 5137, 3049,    0, 5137,    0,    0,
+        0,    0, 3049, 3050, 3050, 3050, 3050, 3050, 3050, 3050,
+     3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050,
+
+     3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050,
+     3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050,
+     3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050, 3050,
+     3050, 3050, 3050, 3054, 3054, 3054, 3054, 3054, 3054, 3054,
+     3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054,
+     3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054,
+     3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054,
+     3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054, 3054,
+     3054, 3054, 3054, 3056, 3056, 3056, 3056, 3056, 3056, 3056,
+     3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056,
+
+     3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056,
+     3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056,
+     3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056, 3056,
+     3056, 3056, 3056, 3060, 3060, 3060, 3060, 3060, 3060, 3060,
+     3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060,
+     3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060,
+     3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060,
+     3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060, 3060,
+     3060, 3060, 3060, 3062, 3062, 3062, 3062, 3062, 3062, 3062,
+     3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062,
+
+     3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062,
+     3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062,
+     3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062, 3062,
+     3062, 3062, 3062, 3064, 3064, 3064, 3064, 3064, 3064, 3064,
+     3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064,
+     3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064,
+     3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064,
+     3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064,
+     3064, 3064, 3064, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+     3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+
+     3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+     3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+     3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065, 3065,
+     3065, 3065, 3065, 3067, 3067, 3067, 3067, 3067, 3067, 3067,
+     3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067,
+     3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067,
+     3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067,
+     3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067, 3067,
+     3067, 3067, 3067, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+     3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+
+     3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+     3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+     3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+     3068, 3068, 3068, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070, 3070,
+     3070, 3070, 3070, 3071, 5138,    0,    0,    0,    0,    0,
+        0,    0,    0, 3071,    0, 5138,    0,    0, 5138, 3071,
+
+     3071, 3071, 3071, 3071, 3071, 3071, 3071,    0,    0,    0,
+     3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071,
+     3071, 3071, 3071, 3071, 3072, 3072, 3072, 3072, 3072, 3072,
+     3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+     3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+     3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+     3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072, 3072,
+     3072, 3072, 3072, 3072, 3074, 3074, 3074, 3074, 3074, 3074,
+     3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
+     3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
+
+     3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
+     3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074, 3074,
+     3074, 3074, 3074, 3074, 3077, 5140, 3077, 5141,    0,    0,
+        0,    0, 3077, 3077, 3077, 3077, 5140, 5142, 5141, 5140,
+        0, 5141,    0, 3077, 3077, 3077, 3077, 3077, 5142, 3077,
+        0, 5142,    0,    0,    0,    0, 3077, 3080, 3080, 3080,
+     3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
+     3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
+     3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
+     3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080, 3080,
+
+     3080, 3080, 3080, 3080, 3080, 3080, 3080, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084,
+     3084, 3084, 3084, 3084, 3084, 3084, 3084, 3085, 3085, 3085,
+     3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
+     3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
+     3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
+     3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085, 3085,
+
+     3085, 3085, 3085, 3085, 3085, 3085, 3085, 3087, 3087, 3087,
+     3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087,
+     3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087,
+     3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087,
+     3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087, 3087,
+     3087, 3087, 3087, 3087, 3087, 3087, 3087, 3088,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 3088,    0,    0,
+        0,    0,    0, 3088, 3088, 3088, 3088, 3088, 3088, 3088,
+     3088,    0,    0,    0, 3088, 3088, 3088, 3088, 3088, 3088,
+     3088, 3088, 3088, 3088, 3088, 3088, 3088, 3088, 3090,    0,
+
+     3090,    0,    0,    0,    0,    0, 3090, 3090, 3090, 3090,
+        0,    0,    0,    0,    0,    0,    0, 3090, 3090, 3090,
+     3090, 3090,    0, 3090,    0,    0,    0,    0,    0,    0,
+     3090, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096, 3096,
+     3096, 3097,    0, 3097,    0,    0,    0,    0,    0, 3097,
+     3097, 3097, 3097,    0,    0,    0,    0,    0,    0,    0,
+
+     3097, 3097, 3097, 3097, 3097,    0, 3097,    0,    0,    0,
+        0,    0,    0, 3097, 3099,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 3099,    0,    0,    0,    0,    0,
+     3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099,    0,    0,
+        0, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099, 3099,
+     3099, 3099, 3099, 3099, 3099, 3100, 3100, 3100, 3100, 3100,
+     3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100,
+     3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100,
+     3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100,
+     3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100, 3100,
+
+     3100, 3100, 3100, 3100, 3100, 3102, 3102, 3102, 3102, 3102,
+     3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102,
+     3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102,
+     3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102,
+     3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102, 3102,
+     3102, 3102, 3102, 3102, 3102, 3103, 3103, 3103, 3103, 3103,
+     3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103,
+     3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103,
+     3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103,
+     3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103, 3103,
+
+     3103, 3103, 3103, 3103, 3103, 3105, 3105, 3105, 3105, 3105,
+     3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105,
+     3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105,
+     3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105,
+     3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105, 3105,
+     3105, 3105, 3105, 3105, 3105, 3106,    0, 3106,    0,    0,
+        0,    0,    0, 3106, 3106, 3106, 3106,    0,    0,    0,
+        0,    0,    0,    0, 3106, 3106, 3106, 3106, 3106,    0,
+     3106,    0,    0,    0,    0,    0,    0, 3106, 3112, 3112,
+     3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112,
+
+     3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112,
+     3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112,
+     3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112,
+     3112, 3112, 3112, 3112, 3112, 3112, 3112, 3112, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113,
+     3113, 3113, 3113, 3113, 3113, 3113, 3113, 3113, 3114, 3114,
+     3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114,
+
+     3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114,
+     3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114,
+     3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114,
+     3114, 3114, 3114, 3114, 3114, 3114, 3114, 3114, 3115, 3115,
+     3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115,
+     3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115,
+     3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115,
+     3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115,
+     3115, 3115, 3115, 3115, 3115, 3115, 3115, 3115, 3116,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3116,    0,
+
+        0,    0,    0,    0, 3116, 3116, 3116, 3116, 3116, 3116,
+     3116, 3116,    0,    0,    0, 3116, 3116, 3116, 3116, 3116,
+     3116, 3116, 3116, 3116, 3116, 3116, 3116, 3116, 3116, 3118,
+        0, 3118,    0,    0,    0,    0,    0, 3118, 3118, 3118,
+     3118,    0,    0,    0,    0,    0,    0,    0, 3118, 3118,
+     3118, 3118, 3118,    0, 3118,    0,    0,    0,    0,    0,
+        0, 3118, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+     3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+     3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+     3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+
+     3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121, 3121,
+     3121, 3121, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130,
+     3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130,
+     3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130,
+     3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130,
+     3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130, 3130,
+     3130, 3130, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,
+     3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,
+     3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,
+     3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,
+
+     3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131, 3131,
+     3131, 3131, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,
+     3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,
+     3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,
+     3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,
+     3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137, 3137,
+     3137, 3137, 3139, 3139, 3139, 3139,    0,    0,    0,    0,
+        0,    0, 3139, 3139,    0,    0,    0, 3139,    0, 3139,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3139,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140, 3140,
+     3141,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     3141,    0,    0,    0,    0,    0, 3141, 3141, 3141, 3141,
+     3141, 3141, 3141, 3141,    0,    0,    0, 3141, 3141, 3141,
+     3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141, 3141,
+
+     3141, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+     3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+     3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+     3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+     3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147, 3147,
+     3147, 3149, 3149, 3149, 3149,    0,    0,    0,    0,    0,
+        0, 3149, 3149,    0,    0,    0, 3149,    0, 3149,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3149, 3150,
+
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150,
+     3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3150, 3152,
+     3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152,
+     3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152,
+     3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152,
+     3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152,
+     3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3152, 3155,
+
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155,
+     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162,
+     3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3162, 3165,
+
+     3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165,
+     3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165,
+     3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165,
+     3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165,
+     3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3165, 3167,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3167,
+        0,    0,    0,    0,    0, 3167, 3167, 3167, 3167, 3167,
+     3167, 3167, 3167,    0,    0,    0, 3167, 3167, 3167, 3167,
+     3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167, 3167,
+     3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169,
+
+     3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169,
+     3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169,
+     3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169,
+     3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169, 3169,
+     3170,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     3170,    0,    0,    0,    0,    0, 3170, 3170, 3170, 3170,
+     3170, 3170, 3170, 3170,    0,    0,    0, 3170, 3170, 3170,
+     3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170, 3170,
+     3170, 3171,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 3171,    0,    0,    0,    0,    0, 3171, 3171, 3171,
+
+     3171, 3171, 3171, 3171, 3171,    0,    0,    0, 3171, 3171,
+     3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171, 3171,
+     3171, 3171, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+     3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+     3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+     3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+     3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176, 3176,
+     3176, 3176, 3180,    0,    0,    0,    0,    0,    0,    0,
+     3180,    0, 3180,    0,    0,    0,    0,    0, 3180, 3180,
+     3180, 3180, 3180, 3180, 3180, 3180,    0,    0,    0, 3180,
+
+     3180, 3180, 3180, 3180, 3180, 3180, 3180, 3180, 3180, 3180,
+     3180, 3180, 3180, 3181, 3181, 3181, 3181, 3181, 3181, 3181,
+     3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181,
+     3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181,
+     3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181,
+     3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181,
+     3181, 3181, 3181, 3182,    0, 3182,    0,    0,    0,    0,
+        0, 3182, 3182, 3182, 3182,    0,    0,    0,    0,    0,
+        0,    0, 3182, 3182, 3182, 3182, 3182,    0, 3182,    0,
+        0,    0,    0,    0,    0, 3182, 3184, 3184, 3184, 3184,
+
+     3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184,
+     3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184,
+     3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184,
+     3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184, 3184,
+     3184, 3184, 3184, 3184, 3184, 3184, 3185, 3185, 3185, 3185,
+     3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185,
+     3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185,
+     3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185,
+     3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185, 3185,
+     3185, 3185, 3185, 3185, 3185, 3185, 3187,    0, 3187,    0,
+
+        0,    0,    0,    0, 3187, 3187, 3187, 3187,    0,    0,
+        0,    0,    0,    0,    0, 3187, 3187, 3187, 3187, 3187,
+        0, 3187,    0,    0,    0,    0,    0,    0, 3187, 3188,
+     3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188,
+     3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188,
+     3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188,
+     3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188,
+     3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3188, 3189,
+     3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189,
+     3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189,
+
+     3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189,
+     3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189,
+     3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3189, 3191,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3191,
+        0,    0,    0,    0,    0, 3191, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191,    0,    0,    0, 3191, 3191, 3191, 3191,
+     3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191,
+     3192,    0, 3192,    0,    0,    0,    0,    0, 3192, 3192,
+     3192, 3192,    0,    0,    0,    0,    0,    0,    0, 3192,
+     3192, 3192, 3192, 3192,    0, 3192,    0,    0,    0,    0,
+
+        0,    0, 3192, 3195, 3195, 3195, 3195, 3195, 3195, 3195,
+     3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195,
+     3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195,
+     3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195,
+     3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195,
+     3195, 3195, 3195, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+     3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+     3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+     3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+     3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197, 3197,
+
+     3197, 3197, 3197, 3198,    0, 3198,    0,    0,    0,    0,
+        0, 3198, 3198, 3198, 3198,    0,    0,    0,    0,    0,
+        0,    0, 3198, 3198, 3198, 3198, 3198,    0, 3198,    0,
+        0,    0,    0,    0,    0, 3198, 3204, 3204, 3204, 3204,
+     3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204,
+     3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204,
+     3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204,
+     3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204, 3204,
+     3204, 3204, 3204, 3204, 3204, 3204, 3208,    0,    0,    0,
+        0,    0,    0,    0, 3208,    0, 3208,    0,    0,    0,
+
+        0,    0, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
+        0,    0,    0, 3208, 3208, 3208, 3208, 3208, 3208, 3208,
+     3208, 3208, 3208, 3208, 3208, 3208, 3208, 3209,    0, 3209,
+        0,    0,    0,    0,    0, 3209, 3209, 3209, 3209,    0,
+        0,    0,    0,    0,    0,    0, 3209, 3209, 3209, 3209,
+     3209,    0, 3209,    0,    0,    0,    0,    0,    0, 3209,
+     3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+     3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+     3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+     3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+
+     3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211,
+     3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
+     3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
+     3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
+     3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
+     3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212, 3212,
+     3214,    0, 3214,    0,    0,    0,    0,    0, 3214, 3214,
+     3214, 3214,    0,    0,    0,    0,    0,    0,    0, 3214,
+     3214, 3214, 3214, 3214,    0, 3214,    0,    0,    0,    0,
+        0,    0, 3214, 3215, 3215, 3215, 3215, 3215, 3215, 3215,
+
+     3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215,
+     3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215,
+     3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215,
+     3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215, 3215,
+     3215, 3215, 3215, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218, 3218,
+     3218, 3218, 3218, 3219,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0, 3219,    0,    0,    0,    0,    0, 3219,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219,    0,    0,    0,
+     3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219, 3219,
+     3219, 3219, 3219, 3219, 3220,    0, 3220,    0,    0,    0,
+        0,    0, 3220, 3220, 3220, 3220,    0,    0,    0,    0,
+        0,    0,    0, 3220, 3220, 3220, 3220, 3220,    0, 3220,
+        0,    0,    0,    0,    0,    0, 3220, 3221, 3221, 3221,
+     3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221,
+     3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221,
+     3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221,
+
+     3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221, 3221,
+     3221, 3221, 3221, 3221, 3221, 3221, 3221, 3223, 3223, 3223,
+     3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223,
+     3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223,
+     3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223,
+     3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223, 3223,
+     3223, 3223, 3223, 3223, 3223, 3223, 3223, 3225, 3225, 3225,
+     3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+     3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+     3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+
+     3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,
+     3225, 3225, 3225, 3225, 3225, 3225, 3225, 3226,    0, 3226,
+        0,    0,    0,    0,    0, 3226, 3226, 3226, 3226,    0,
+        0,    0,    0,    0,    0,    0, 3226, 3226, 3226, 3226,
+     3226,    0, 3226,    0,    0,    0,    0,    0,    0, 3226,
+     3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+     3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+     3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+     3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+     3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232, 3232,
+
+     3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
+     3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
+     3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
+     3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
+     3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233, 3233,
+     3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234,
+     3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234,
+     3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234,
+     3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234,
+     3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234, 3234,
+
+     3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236,
+     3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236,
+     3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236,
+     3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236,
+     3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236, 3236,
+     3237,    0, 3237,    0,    0,    0,    0,    0, 3237, 3237,
+     3237, 3237,    0,    0,    0,    0,    0,    0,    0, 3237,
+     3237, 3237, 3237, 3237,    0, 3237,    0,    0,    0,    0,
+        0,    0, 3237, 3238, 3238, 3238, 3238, 3238, 3238, 3238,
+     3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238,
+
+     3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238,
+     3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238,
+     3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238, 3238,
+     3238, 3238, 3238, 3239,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3239,    0,    0,    0,    0,    0, 3239,
+     3239, 3239, 3239, 3239, 3239, 3239, 3239,    0,    0,    0,
+     3239, 3239, 3239, 3239, 3239, 3239, 3239, 3239, 3239, 3239,
+     3239, 3239, 3239, 3239, 3240,    0, 3240,    0,    0,    0,
+        0,    0, 3240, 3240, 3240, 3240,    0,    0,    0,    0,
+        0,    0,    0, 3240, 3240, 3240, 3240, 3240,    0, 3240,
+
+        0,    0,    0,    0,    0,    0, 3240, 3244, 3244, 3244,
+     3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244,
+     3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244,
+     3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244,
+     3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244, 3244,
+     3244, 3244, 3244, 3244, 3244, 3244, 3244, 3246, 3246, 3246,
+     3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246,
+     3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246,
+     3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246,
+     3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246, 3246,
+
+     3246, 3246, 3246, 3246, 3246, 3246, 3246, 3247,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 3247,    0,    0,
+        0,    0,    0, 3247, 3247, 3247, 3247, 3247, 3247, 3247,
+     3247,    0,    0,    0, 3247, 3247, 3247, 3247, 3247, 3247,
+     3247, 3247, 3247, 3247, 3247, 3247, 3247, 3247, 3248, 3248,
+     3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248,
+     3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248,
+     3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248,
+     3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248,
+     3248, 3248, 3248, 3248, 3248, 3248, 3248, 3248, 3249,    0,
+
+     3249,    0,    0,    0,    0,    0, 3249, 3249, 3249, 3249,
+        0,    0,    0,    0,    0,    0,    0, 3249, 3249, 3249,
+     3249, 3249,    0, 3249,    0,    0,    0,    0,    0,    0,
+     3249, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
+     3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
+     3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
+     3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
+     3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253, 3253,
+     3253, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
+     3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
+
+     3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
+     3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
+     3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254, 3254,
+     3254, 3258,    0,    0,    0,    0,    0,    0,    0, 3258,
+        0, 3258,    0,    0,    0,    0,    0, 3258, 3258, 3258,
+     3258, 3258, 3258, 3258, 3258,    0,    0,    0, 3258, 3258,
+     3258, 3258, 3258, 3258, 3258, 3258, 3258, 3258, 3258, 3258,
+     3258, 3258, 3259,    0, 3259,    0,    0,    0,    0,    0,
+     3259, 3259, 3259, 3259,    0,    0,    0,    0,    0,    0,
+        0, 3259, 3259, 3259, 3259, 3259,    0, 3259,    0,    0,
+
+        0,    0,    0,    0, 3259, 3261, 3261, 3261, 3261, 3261,
+     3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
+     3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
+     3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
+     3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261, 3261,
+     3261, 3261, 3261, 3261, 3261, 3262, 3262, 3262, 3262, 3262,
+     3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262,
+     3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262,
+     3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262,
+     3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262, 3262,
+
+     3262, 3262, 3262, 3262, 3262, 3264,    0, 3264,    0,    0,
+        0,    0,    0, 3264, 3264, 3264, 3264,    0,    0,    0,
+        0,    0,    0,    0, 3264, 3264, 3264, 3264, 3264,    0,
+     3264,    0,    0,    0,    0,    0,    0, 3264, 3265, 3265,
+     3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265,
+     3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265,
+     3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265,
+     3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265,
+     3265, 3265, 3265, 3265, 3265, 3265, 3265, 3265, 3267,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3267,    0,
+
+        0,    0,    0,    0, 3267, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267,    0,    0,    0, 3267, 3267, 3267, 3267, 3267,
+     3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3267, 3268,
+        0, 3268,    0,    0,    0,    0,    0, 3268, 3268, 3268,
+     3268,    0,    0,    0,    0,    0,    0,    0, 3268, 3268,
+     3268, 3268, 3268,    0, 3268,    0,    0,    0,    0,    0,
+        0, 3268, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271,
+     3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271,
+     3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271,
+     3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271,
+
+     3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271,
+     3271, 3271, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
+     3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
+     3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
+     3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
+     3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273, 3273,
+     3273, 3273, 3274,    0, 3274,    0,    0,    0,    0,    0,
+     3274, 3274, 3274, 3274,    0,    0,    0,    0,    0,    0,
+        0, 3274, 3274, 3274, 3274, 3274,    0, 3274,    0,    0,
+        0,    0,    0,    0, 3274, 3282, 3282, 3282, 3282, 3282,
+
+     3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282,
+     3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282,
+     3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282,
+     3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282, 3282,
+     3282, 3282, 3282, 3282, 3282, 3285, 3285, 3285, 3285, 3285,
+     3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285,
+     3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285,
+     3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285,
+     3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285, 3285,
+     3285, 3285, 3285, 3285, 3285, 3287, 3287, 3287, 3287, 3287,
+
+     3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287,
+     3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287,
+     3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287,
+     3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287, 3287,
+     3287, 3287, 3287, 3287, 3287, 3289, 3289, 3289, 3289, 3289,
+     3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289,
+     3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289,
+     3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289,
+     3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289,
+     3289, 3289, 3289, 3289, 3289, 3291, 3291, 3291, 3291, 3291,
+
+     3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
+     3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
+     3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
+     3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291, 3291,
+     3291, 3291, 3291, 3291, 3291, 3295,    0,    0,    0,    0,
+        0,    0,    0, 3295,    0, 3295,    0,    0,    0,    0,
+        0, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295,    0,
+        0,    0, 3295, 3295, 3295, 3295, 3295, 3295, 3295, 3295,
+     3295, 3295, 3295, 3295, 3295, 3295, 3297,    0, 3297,    0,
+        0,    0,    0,    0, 3297, 3297, 3297, 3297,    0,    0,
+
+        0,    0,    0,    0,    0, 3297, 3297, 3297, 3297, 3297,
+        0, 3297,    0,    0,    0,    0,    0,    0, 3297, 3299,
+     3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
+     3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
+     3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
+     3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299,
+     3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3299, 3300,
+     3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300,
+     3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300,
+     3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300,
+
+     3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300,
+     3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3300, 3302,
+        0, 3302,    0,    0,    0,    0,    0, 3302, 3302, 3302,
+     3302,    0,    0,    0,    0,    0,    0,    0, 3302, 3302,
+     3302, 3302, 3302,    0, 3302,    0,    0,    0,    0,    0,
+        0, 3302, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
+     3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
+     3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
+     3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
+     3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303, 3303,
+
+     3303, 3303, 3305,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3305,    0,    0,    0,    0,    0, 3305, 3305,
+     3305, 3305, 3305, 3305, 3305, 3305,    0,    0,    0, 3305,
+     3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305, 3305,
+     3305, 3305, 3305, 3306,    0, 3306,    0,    0,    0,    0,
+        0, 3306, 3306, 3306, 3306,    0,    0,    0,    0,    0,
+        0,    0, 3306, 3306, 3306, 3306, 3306,    0, 3306,    0,
+        0,    0,    0,    0,    0, 3306, 3309, 3309, 3309, 3309,
+     3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309,
+     3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309,
+
+     3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309,
+     3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309, 3309,
+     3309, 3309, 3309, 3309, 3309, 3309, 3311, 3311, 3311, 3311,
+     3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311,
+     3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311,
+     3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311,
+     3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311, 3311,
+     3311, 3311, 3311, 3311, 3311, 3311, 3312,    0, 3312,    0,
+        0,    0,    0,    0, 3312, 3312, 3312, 3312,    0,    0,
+        0,    0,    0,    0,    0, 3312, 3312, 3312, 3312, 3312,
+
+        0, 3312,    0,    0,    0,    0,    0,    0, 3312, 3318,
+     3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318,
+     3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318,
+     3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318,
+     3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318,
+     3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3318, 3325,
+     3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325,
+     3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325,
+     3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325,
+     3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325,
+
+     3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3325, 3326,
+     3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326,
+     3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326,
+     3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326,
+     3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326,
+     3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3326, 3328,
+     3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328,
+     3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328,
+     3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328,
+     3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328,
+
+     3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3328, 3330,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3330,
+        0,    0,    0,    0,    0, 3330, 3330, 3330, 3330, 3330,
+     3330, 3330, 3330,    0,    0,    0, 3330, 3330, 3330, 3330,
+     3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330, 3330,
+     3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332,
+     3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332,
+     3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332,
+     3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332,
+     3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332, 3332,
+
+     3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333,
+     3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333,
+     3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333,
+     3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333,
+     3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333, 3333,
+     3335,    0, 3335,    0,    0,    0,    0,    0, 3335, 3335,
+     3335, 3335,    0,    0,    0,    0,    0,    0,    0, 3335,
+     3335, 3335, 3335, 3335,    0, 3335,    0,    0,    0,    0,
+        0,    0, 3335, 3336, 3336, 3336, 3336, 3336, 3336, 3336,
+     3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336,
+
+     3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336,
+     3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336,
+     3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336,
+     3336, 3336, 3336, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+     3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+     3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+     3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+     3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339, 3339,
+     3339, 3339, 3339, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341, 3341,
+     3341, 3341, 3341, 3342,    0, 3342,    0,    0,    0,    0,
+        0, 3342, 3342, 3342, 3342,    0,    0,    0,    0,    0,
+        0,    0, 3342, 3342, 3342, 3342, 3342,    0, 3342,    0,
+        0,    0,    0,    0,    0, 3342, 3343, 3343, 3343, 3343,
+     3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343,
+     3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343,
+     3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343,
+
+     3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343, 3343,
+     3343, 3343, 3343, 3343, 3343, 3343, 3344, 3344, 3344, 3344,
+     3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344,
+     3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344,
+     3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344,
+     3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344, 3344,
+     3344, 3344, 3344, 3344, 3344, 3344, 3347,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 3347,    0,    0,    0,
+        0,    0, 3347, 3347, 3347, 3347, 3347, 3347, 3347, 3347,
+        0,    0,    0, 3347, 3347, 3347, 3347, 3347, 3347, 3347,
+
+     3347, 3347, 3347, 3347, 3347, 3347, 3347, 3351, 3351, 3351,
+     3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
+     3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
+     3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
+     3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
+     3351, 3351, 3351, 3351, 3351, 3351, 3351, 3353, 3353, 3353,
+     3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353,
+     3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353,
+     3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353,
+     3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353, 3353,
+
+     3353, 3353, 3353, 3353, 3353, 3353, 3353, 3354,    0, 3354,
+        0,    0,    0,    0,    0, 3354, 3354, 3354, 3354,    0,
+        0,    0,    0,    0,    0,    0, 3354, 3354, 3354, 3354,
+     3354,    0, 3354,    0,    0,    0,    0,    0,    0, 3354,
+     3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355,
+     3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355,
+     3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355,
+     3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355,
+     3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355, 3355,
+     3360,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+     3360,    0,    0,    0,    0,    0, 3360, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360,    0,    0,    0, 3360, 3360, 3360,
+     3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360, 3360,
+     3360, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361,
+     3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361,
+     3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361,
+     3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361,
+     3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361, 3361,
+     3361, 3364,    0, 3364,    0,    0,    0,    0,    0, 3364,
+     3364, 3364, 3364,    0,    0,    0,    0,    0,    0,    0,
+
+     3364, 3364, 3364, 3364, 3364,    0, 3364,    0,    0,    0,
+        0,    0,    0, 3364, 3365, 3365, 3365, 3365, 3365, 3365,
+     3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365,
+     3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365,
+     3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365,
+     3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365, 3365,
+     3365, 3365, 3365, 3365, 3367, 3367, 3367, 3367, 3367, 3367,
+     3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367,
+     3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367,
+     3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367,
+
+     3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367, 3367,
+     3367, 3367, 3367, 3367, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368,
+     3368, 3368, 3368, 3368, 3372, 3372, 3372, 3372, 3372, 3372,
+     3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372,
+     3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372,
+     3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372,
+
+     3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372, 3372,
+     3372, 3372, 3372, 3372, 3373, 3373, 3373, 3373, 3373, 3373,
+     3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373,
+     3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373,
+     3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373,
+     3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373, 3373,
+     3373, 3373, 3373, 3373, 3374, 3374, 3374, 3374, 3374, 3374,
+     3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374,
+     3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374,
+     3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374,
+
+     3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374, 3374,
+     3374, 3374, 3374, 3374, 3375,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 3375,    0,    0,    0,    0,    0,
+     3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375,    0,    0,
+        0, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375, 3375,
+     3375, 3375, 3375, 3375, 3375, 3376, 3376, 3376, 3376, 3376,
+     3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
+     3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
+     3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
+     3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376,
+
+     3376, 3376, 3376, 3376, 3376, 3379,    0, 3379,    0,    0,
+        0,    0,    0, 3379, 3379, 3379, 3379,    0,    0,    0,
+        0,    0,    0,    0, 3379, 3379, 3379, 3379, 3379,    0,
+     3379,    0,    0,    0,    0,    0,    0, 3379, 3380, 3380,
+     3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380,
+     3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380,
+     3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380,
+     3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380,
+     3380, 3380, 3380, 3380, 3380, 3380, 3380, 3380, 3382, 3382,
+     3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382,
+
+     3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382,
+     3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382,
+     3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382,
+     3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3384, 3384,
+     3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384,
+     3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384,
+     3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384,
+     3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384,
+     3384, 3384, 3384, 3384, 3384, 3384, 3384, 3384, 3385,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3385,    0,
+
+        0,    0,    0,    0, 3385, 3385, 3385, 3385, 3385, 3385,
+     3385, 3385,    0,    0,    0, 3385, 3385, 3385, 3385, 3385,
+     3385, 3385, 3385, 3385, 3385, 3385, 3385, 3385, 3385, 3387,
+     3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
+     3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
+     3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
+     3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387,
+     3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3387, 3388,
+     3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388,
+     3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388,
+
+     3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388,
+     3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388,
+     3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3388, 3390,
+        0, 3390,    0,    0,    0,    0,    0, 3390, 3390, 3390,
+     3390,    0,    0,    0,    0,    0,    0,    0, 3390, 3390,
+     3390, 3390, 3390,    0, 3390,    0,    0,    0,    0,    0,
+        0, 3390, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391,
+     3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391,
+     3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391,
+     3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391,
+
+     3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391, 3391,
+     3391, 3391, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392,
+     3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392,
+     3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392,
+     3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392,
+     3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392,
+     3392, 3392, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+
+     3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394, 3394,
+     3394, 3394, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395,
+     3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395,
+     3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395,
+     3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395,
+     3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395, 3395,
+     3395, 3395, 3397,    0, 3397,    0,    0,    0,    0,    0,
+     3397, 3397, 3397, 3397,    0,    0,    0,    0,    0,    0,
+        0, 3397, 3397, 3397, 3397, 3397,    0, 3397,    0,    0,
+        0,    0,    0,    0, 3397, 3399,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0, 3399,    0,    0,    0,    0,
+        0, 3399, 3399, 3399, 3399, 3399, 3399, 3399, 3399,    0,
+        0,    0, 3399, 3399, 3399, 3399, 3399, 3399, 3399, 3399,
+     3399, 3399, 3399, 3399, 3399, 3399, 3400, 3400, 3400, 3400,
+     3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400,
+     3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400,
+     3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400,
+     3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400,
+     3400, 3400, 3400, 3400, 3400, 3400, 3403, 3403, 3403, 3403,
+     3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403,
+
+     3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403,
+     3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403,
+     3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403, 3403,
+     3403, 3403, 3403, 3403, 3403, 3403, 3405, 3405, 3405, 3405,
+     3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405,
+     3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405,
+     3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405,
+     3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405, 3405,
+     3405, 3405, 3405, 3405, 3405, 3405, 3406,    0, 3406,    0,
+        0,    0,    0,    0, 3406, 3406, 3406, 3406,    0,    0,
+
+        0,    0,    0,    0,    0, 3406, 3406, 3406, 3406, 3406,
+        0, 3406,    0,    0,    0,    0,    0,    0, 3406, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412,
+     3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3412, 3413,
+        0, 3413,    0,    0,    0,    0,    0, 3413, 3413, 3413,
+     3413,    0,    0,    0,    0,    0,    0,    0, 3413, 3413,
+     3413, 3413, 3413,    0, 3413,    0,    0,    0,    0,    0,
+
+        0, 3413, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3416,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3416,    0,    0,    0,    0,    0, 3416, 3416,
+     3416, 3416, 3416, 3416, 3416, 3416,    0,    0,    0, 3416,
+     3416, 3416, 3416, 3416, 3416, 3416, 3416, 3416, 3416, 3416,
+     3416, 3416, 3416, 3418, 3418, 3418, 3418, 3418, 3418, 3418,
+
+     3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418,
+     3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418,
+     3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418,
+     3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418, 3418,
+     3418, 3418, 3418, 3419, 3419, 3419, 3419, 3419, 3419, 3419,
+     3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419,
+     3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419,
+     3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419,
+     3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419, 3419,
+     3419, 3419, 3419, 3421, 3421, 3421, 3421, 3421, 3421, 3421,
+
+     3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421,
+     3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421,
+     3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421,
+     3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421, 3421,
+     3421, 3421, 3421, 3422,    0, 3422,    0,    0,    0,    0,
+        0, 3422, 3422, 3422, 3422,    0,    0,    0,    0,    0,
+        0,    0, 3422, 3422, 3422, 3422, 3422,    0, 3422,    0,
+        0,    0,    0,    0,    0, 3422, 3429, 3429, 3429, 3429,
+     3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
+     3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
+
+     3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
+     3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429, 3429,
+     3429, 3429, 3429, 3429, 3429, 3429, 3431, 3431, 3431, 3431,
+     3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431,
+     3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431,
+     3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431,
+     3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431,
+     3431, 3431, 3431, 3431, 3431, 3431, 3435,    0,    0,    0,
+        0,    0,    0,    0, 3435,    0, 3435,    0,    0,    0,
+        0,    0, 3435, 3435, 3435, 3435, 3435, 3435, 3435, 3435,
+
+        0,    0,    0, 3435, 3435, 3435, 3435, 3435, 3435, 3435,
+     3435, 3435, 3435, 3435, 3435, 3435, 3435, 3437,    0, 3437,
+        0,    0,    0,    0,    0, 3437, 3437, 3437, 3437,    0,
+        0,    0,    0,    0,    0,    0, 3437, 3437, 3437, 3437,
+     3437,    0, 3437,    0,    0,    0,    0,    0,    0, 3437,
+     3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438,
+     3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438,
+     3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438,
+     3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438,
+     3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438, 3438,
+
+     3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439,
+     3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439,
+     3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439,
+     3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439,
+     3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439,
+     3441,    0, 3441,    0,    0,    0,    0,    0, 3441, 3441,
+     3441, 3441,    0,    0,    0,    0,    0,    0,    0, 3441,
+     3441, 3441, 3441, 3441,    0, 3441,    0,    0,    0,    0,
+        0,    0, 3441, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445,
+     3445, 3445, 3445, 3446,    0, 3446,    0,    0,    0,    0,
+        0, 3446, 3446, 3446, 3446,    0,    0,    0,    0,    0,
+        0,    0, 3446, 3446, 3446, 3446, 3446,    0, 3446,    0,
+        0,    0,    0,    0,    0, 3446, 3447, 3447, 3447, 3447,
+     3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447,
+     3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447,
+     3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447,
+
+     3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447, 3447,
+     3447, 3447, 3447, 3447, 3447, 3447, 3448, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3451,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 3451,    0,    0,    0,
+        0,    0, 3451, 3451, 3451, 3451, 3451, 3451, 3451, 3451,
+        0,    0,    0, 3451, 3451, 3451, 3451, 3451, 3451, 3451,
+
+     3451, 3451, 3451, 3451, 3451, 3451, 3451, 3455, 3455, 3455,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3457, 3457, 3457,
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457, 3457,
+
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3458,    0, 3458,
+        0,    0,    0,    0,    0, 3458, 3458, 3458, 3458,    0,
+        0,    0,    0,    0,    0,    0, 3458, 3458, 3458, 3458,
+     3458,    0, 3458,    0,    0,    0,    0,    0,    0, 3458,
+     3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+     3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+     3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+     3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+     3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465,
+
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465,
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465,
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465,
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467, 3467,
+     3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468,
+
+     3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468,
+     3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468,
+     3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468,
+     3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468,
+     3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471,
+     3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471,
+     3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471,
+     3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471,
+     3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471,
+     3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+
+     3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+     3487,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+     3487,    0,    0,    0,    0,    0, 3487, 3487, 3487, 3487,
+     3487, 3487, 3487, 3487,    0,    0,    0, 3487, 3487, 3487,
+     3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487, 3487,
+     3487, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3494, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497,
+     3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497,
+
+     3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497,
+     3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497,
+     3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497, 3497,
+     3497, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498, 3498,
+     3498, 3499,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 3499,    0,    0,    0,    0,    0, 3499, 3499, 3499,
+
+     3499, 3499, 3499, 3499, 3499,    0,    0,    0, 3499, 3499,
+     3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499, 3499,
+     3499, 3499, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
+     3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
+     3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
+     3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
+     3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
+     3502, 3502, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
+     3503, 3503, 3504,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3504,    0,    0,    0,    0,    0, 3504, 3504,
+     3504, 3504, 3504, 3504, 3504, 3504,    0,    0,    0, 3504,
+     3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504,
+     3504, 3504, 3504, 3507, 3507, 3507, 3507, 3507, 3507, 3507,
+     3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507,
+     3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507,
+     3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507,
+
+     3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507,
+     3507, 3507, 3507, 3509,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3509,    0,    0,    0,    0,    0, 3509,
+     3509, 3509, 3509, 3509, 3509, 3509, 3509,    0,    0,    0,
+     3509, 3509, 3509, 3509, 3509, 3509, 3509, 3509, 3509, 3509,
+     3509, 3509, 3509, 3509, 3512, 3512, 3512, 3512, 3512, 3512,
+     3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512,
+     3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512,
+     3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512,
+     3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512,
+
+     3512, 3512, 3512, 3512, 3513,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 3513,    0,    0,    0,    0,    0,
+     3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513,    0,    0,
+        0, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513,
+     3513, 3513, 3513, 3513, 3513, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515,
+     3515, 3515, 3515, 3515, 3515, 3521, 3521, 3521, 3521, 3521,
+
+     3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521,
+     3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521,
+     3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521,
+     3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521,
+     3521, 3521, 3521, 3521, 3521, 3523, 3523, 3523, 3523, 3523,
+     3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+     3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+     3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+     3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
+     3523, 3523, 3523, 3523, 3523, 3527, 3527, 3527, 3527, 3527,
+
+     3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527,
+     3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527,
+     3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527,
+     3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527,
+     3527, 3527, 3527, 3527, 3527, 3528, 3528, 3528, 3528, 3528,
+     3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
+     3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
+     3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
+     3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528,
+     3528, 3528, 3528, 3528, 3528, 3529, 3529, 3529, 3529, 3529,
+
+     3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529,
+     3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529,
+     3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529,
+     3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3529,
+     3529, 3529, 3529, 3529, 3529, 3532,    0, 3532,    0,    0,
+        0,    0,    0, 3532, 3532, 3532, 3532,    0,    0,    0,
+        0,    0,    0,    0, 3532, 3532, 3532, 3532, 3532,    0,
+     3532,    0,    0,    0,    0,    0,    0, 3532, 3533, 3533,
+     3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533,
+     3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533,
+
+     3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533,
+     3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533,
+     3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3534,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3534,    0,
+        0,    0,    0,    0, 3534, 3534, 3534, 3534, 3534, 3534,
+     3534, 3534,    0,    0,    0, 3534, 3534, 3534, 3534, 3534,
+     3534, 3534, 3534, 3534, 3534, 3534, 3534, 3534, 3534, 3535,
+        0, 3535,    0,    0,    0,    0,    0, 3535, 3535, 3535,
+     3535,    0,    0,    0,    0,    0,    0,    0, 3535, 3535,
+     3535, 3535, 3535,    0, 3535,    0,    0,    0,    0,    0,
+
+        0, 3535, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536,
+     3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536,
+     3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536,
+     3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536,
+     3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536,
+     3536, 3536, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541,
+     3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541,
+     3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541,
+     3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541,
+     3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541, 3541,
+
+     3541, 3541, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542,
+     3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542,
+     3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542,
+     3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542,
+     3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542,
+     3542, 3542, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543,
+     3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543,
+     3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543,
+     3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543,
+     3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543, 3543,
+
+     3543, 3543, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
+     3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
+     3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
+     3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
+     3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
+
+     3548, 3548, 3549,    0, 3549,    0,    0,    0,    0,    0,
+     3549, 3549, 3549, 3549,    0,    0,    0,    0,    0,    0,
+        0, 3549, 3549, 3549, 3549, 3549,    0, 3549,    0,    0,
+        0,    0,    0,    0, 3549, 3550, 3550, 3550, 3550, 3550,
+     3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550,
+     3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550,
+     3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550,
+     3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550, 3550,
+     3550, 3550, 3550, 3550, 3550, 3551,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 3551,    0,    0,    0,    0,
+
+        0, 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,    0,
+        0,    0, 3551, 3551, 3551, 3551, 3551, 3551, 3551, 3551,
+     3551, 3551, 3551, 3551, 3551, 3551, 3552,    0, 3552,    0,
+        0,    0,    0,    0, 3552, 3552, 3552, 3552,    0,    0,
+        0,    0,    0,    0,    0, 3552, 3552, 3552, 3552, 3552,
+        0, 3552,    0,    0,    0,    0,    0,    0, 3552, 3555,
+     3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555,
+     3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555,
+     3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555,
+     3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555,
+
+     3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3557,
+     3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
+     3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
+     3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
+     3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557,
+     3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3560,
+     3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560,
+     3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560,
+     3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560,
+     3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560,
+
+     3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3560, 3561,
+     3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561,
+     3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561,
+     3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561,
+     3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561,
+     3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3561, 3563,
+     3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563,
+     3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563,
+     3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563,
+     3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563,
+
+     3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3563, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564,
+     3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3565,
+     3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
+     3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
+     3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
+     3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565,
+
+     3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3567,
+     3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567,
+     3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567,
+     3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567,
+     3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567,
+     3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3567, 3568,
+     3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568,
+     3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568,
+     3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568,
+     3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568,
+
+     3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3569,
+     3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569,
+     3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569,
+     3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569,
+     3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569,
+     3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3569, 3571,
+     3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571,
+     3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571,
+     3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571,
+     3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571,
+
+     3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3571, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572,
+     3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3572, 3573,
+     3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573,
+     3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573,
+     3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573,
+     3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573,
+
+     3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3573, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3577,
+     3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577,
+     3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577,
+     3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577,
+     3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577,
+
+     3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3577, 3578,
+     3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578,
+     3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578,
+     3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578,
+     3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578,
+     3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3578, 3579,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3579,
+        0,    0,    0,    0,    0, 3579, 3579, 3579, 3579, 3579,
+     3579, 3579, 3579,    0,    0,    0, 3579, 3579, 3579, 3579,
+     3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579, 3579,
+
+     3581,    0, 3581,    0,    0,    0,    0,    0, 3581, 3581,
+     3581, 3581,    0,    0,    0,    0,    0,    0,    0, 3581,
+     3581, 3581, 3581, 3581,    0, 3581,    0,    0,    0,    0,
+        0,    0, 3581, 3582, 3582, 3582, 3582, 3582, 3582, 3582,
+     3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582,
+     3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582,
+     3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582,
+     3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582, 3582,
+     3582, 3582, 3582, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
+     3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
+
+     3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
+     3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
+     3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
+     3583, 3583, 3583, 3584, 3584, 3584, 3584, 3584, 3584, 3584,
+     3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584,
+     3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584,
+     3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584,
+     3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584, 3584,
+     3584, 3584, 3584, 3586, 3586, 3586, 3586, 3586, 3586, 3586,
+     3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586,
+
+     3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586,
+     3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586,
+     3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586, 3586,
+     3586, 3586, 3586, 3587,    0, 3587,    0,    0,    0,    0,
+        0, 3587, 3587, 3587, 3587,    0,    0,    0,    0,    0,
+        0,    0, 3587, 3587, 3587, 3587, 3587,    0, 3587,    0,
+        0,    0,    0,    0,    0, 3587, 3588, 3588, 3588, 3588,
+     3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588,
+     3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588,
+     3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588,
+
+     3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588,
+     3588, 3588, 3588, 3588, 3588, 3588, 3589,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 3589,    0,    0,    0,
+        0,    0, 3589, 3589, 3589, 3589, 3589, 3589, 3589, 3589,
+        0,    0,    0, 3589, 3589, 3589, 3589, 3589, 3589, 3589,
+     3589, 3589, 3589, 3589, 3589, 3589, 3589, 3590,    0, 3590,
+        0,    0,    0,    0,    0, 3590, 3590, 3590, 3590,    0,
+        0,    0,    0,    0,    0,    0, 3590, 3590, 3590, 3590,
+     3590,    0, 3590,    0,    0,    0,    0,    0,    0, 3590,
+     3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594,
+
+     3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594,
+     3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594,
+     3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594,
+     3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594, 3594,
+     3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+     3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+     3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+     3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+     3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597, 3597,
+     3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599,
+
+     3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599,
+     3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599,
+     3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599,
+     3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600, 3600,
+     3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
+
+     3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
+     3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
+     3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
+     3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3603,
+     3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605,
+     3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605,
+     3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605,
+     3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605,
+     3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605, 3605,
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+     3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607,
+     3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607,
+     3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607,
+     3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607,
+     3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607,
+     3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609,
+
+     3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609,
+     3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609,
+     3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609,
+     3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609, 3609,
+     3610,    0, 3610,    0,    0,    0,    0,    0, 3610, 3610,
+     3610, 3610,    0,    0,    0,    0,    0,    0,    0, 3610,
+     3610, 3610, 3610, 3610,    0, 3610,    0,    0,    0,    0,
+        0,    0, 3610, 3611, 3611, 3611, 3611, 3611, 3611, 3611,
+     3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611,
+     3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611,
+
+     3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611,
+     3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611, 3611,
+     3611, 3611, 3611, 3612,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3612,    0,    0,    0,    0,    0, 3612,
+     3612, 3612, 3612, 3612, 3612, 3612, 3612,    0,    0,    0,
+     3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612, 3612,
+     3612, 3612, 3612, 3612, 3613,    0, 3613,    0,    0,    0,
+        0,    0, 3613, 3613, 3613, 3613,    0,    0,    0,    0,
+        0,    0,    0, 3613, 3613, 3613, 3613, 3613,    0, 3613,
+        0,    0,    0,    0,    0,    0, 3613, 3617, 3617, 3617,
+
+     3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
+     3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
+     3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
+     3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617, 3617,
+     3617, 3617, 3617, 3617, 3617, 3617, 3617, 3618, 3618, 3618,
+     3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618,
+     3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618,
+     3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618,
+     3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618, 3618,
+     3618, 3618, 3618, 3618, 3618, 3618, 3618, 3621, 3621, 3621,
+
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621,
+     3621, 3621, 3621, 3621, 3621, 3621, 3621, 3624, 3624, 3624,
+     3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
+     3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
+     3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
+     3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624,
+     3624, 3624, 3624, 3624, 3624, 3624, 3624, 3625,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0, 3625,    0,    0,
+        0,    0,    0, 3625, 3625, 3625, 3625, 3625, 3625, 3625,
+     3625,    0,    0,    0, 3625, 3625, 3625, 3625, 3625, 3625,
+     3625, 3625, 3625, 3625, 3625, 3625, 3625, 3625, 3626, 3626,
+     3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626,
+     3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626,
+     3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626,
+     3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626,
+     3626, 3626, 3626, 3626, 3626, 3626, 3626, 3626, 3629,    0,
+     3629,    0,    0,    0,    0,    0, 3629, 3629, 3629, 3629,
+
+        0,    0,    0,    0,    0,    0,    0, 3629, 3629, 3629,
+     3629, 3629,    0, 3629,    0,    0,    0,    0,    0,    0,
+     3629, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632,
+     3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632,
+     3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632,
+     3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632,
+     3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632,
+     3632, 3636,    0,    0,    0,    0,    0,    0,    0, 3636,
+        0, 3636,    0,    0,    0,    0,    0, 3636, 3636, 3636,
+     3636, 3636, 3636, 3636, 3636,    0,    0,    0, 3636, 3636,
+
+     3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636, 3636,
+     3636, 3636, 3637,    0, 3637,    0,    0,    0,    0,    0,
+     3637, 3637, 3637, 3637,    0,    0,    0,    0,    0,    0,
+        0, 3637, 3637, 3637, 3637, 3637,    0, 3637,    0,    0,
+        0,    0,    0,    0, 3637, 3639, 3639, 3639, 3639, 3639,
+     3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639,
+     3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639,
+     3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639,
+     3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639, 3639,
+     3639, 3639, 3639, 3639, 3639, 3640, 3640, 3640, 3640, 3640,
+
+     3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640,
+     3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640,
+     3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640,
+     3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640,
+     3640, 3640, 3640, 3640, 3640, 3642,    0, 3642,    0,    0,
+        0,    0,    0, 3642, 3642, 3642, 3642,    0,    0,    0,
+        0,    0,    0,    0, 3642, 3642, 3642, 3642, 3642,    0,
+     3642,    0,    0,    0,    0,    0,    0, 3642, 3643, 3643,
+     3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643,
+     3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643,
+
+     3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643,
+     3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643,
+     3643, 3643, 3643, 3643, 3643, 3643, 3643, 3643, 3646,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3646,    0,
+        0,    0,    0,    0, 3646, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646,    0,    0,    0, 3646, 3646, 3646, 3646, 3646,
+     3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3647,
+        0, 3647,    0,    0,    0,    0,    0, 3647, 3647, 3647,
+     3647,    0,    0,    0,    0,    0,    0,    0, 3647, 3647,
+     3647, 3647, 3647,    0, 3647,    0,    0,    0,    0,    0,
+
+        0, 3647, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650,
+     3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650,
+     3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650,
+     3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650,
+     3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650, 3650,
+     3650, 3650, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652,
+     3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652,
+     3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652,
+     3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652,
+     3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652,
+
+     3652, 3652, 3653,    0, 3653,    0,    0,    0,    0,    0,
+     3653, 3653, 3653, 3653,    0,    0,    0,    0,    0,    0,
+        0, 3653, 3653, 3653, 3653, 3653,    0, 3653,    0,    0,
+        0,    0,    0,    0, 3653, 3659, 3659, 3659, 3659, 3659,
+     3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659,
+     3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659,
+     3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659,
+     3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659, 3659,
+     3659, 3659, 3659, 3659, 3659, 3660, 3660, 3660, 3660, 3660,
+     3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660,
+
+     3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660,
+     3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660,
+     3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660,
+     3660, 3660, 3660, 3660, 3660, 3663, 3663, 3663, 3663, 3663,
+     3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663,
+     3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663,
+     3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663,
+     3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663, 3663,
+     3663, 3663, 3663, 3663, 3663, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3664, 3664, 3664, 3664, 3664, 3665, 3665, 3665, 3665, 3665,
+     3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665,
+     3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665,
+     3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665,
+     3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665, 3665,
+     3665, 3665, 3665, 3665, 3665, 3666, 3666, 3666, 3666, 3666,
+     3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666,
+
+     3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666,
+     3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666,
+     3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666, 3666,
+     3666, 3666, 3666, 3666, 3666, 3667,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 3667,    0,    0,    0,    0,
+        0, 3667, 3667, 3667, 3667, 3667, 3667, 3667, 3667,    0,
+        0,    0, 3667, 3667, 3667, 3667, 3667, 3667, 3667, 3667,
+     3667, 3667, 3667, 3667, 3667, 3667, 3669,    0, 3669,    0,
+        0,    0,    0,    0, 3669, 3669, 3669, 3669,    0,    0,
+        0,    0,    0,    0,    0, 3669, 3669, 3669, 3669, 3669,
+
+        0, 3669,    0,    0,    0,    0,    0,    0, 3669, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670,
+     3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3670, 3671,
+     3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671,
+     3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671,
+     3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671,
+     3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671,
+
+     3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3671, 3672,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3672,
+        0,    0,    0,    0,    0, 3672, 3672, 3672, 3672, 3672,
+     3672, 3672, 3672,    0,    0,    0, 3672, 3672, 3672, 3672,
+     3672, 3672, 3672, 3672, 3672, 3672, 3672, 3672, 3672, 3672,
+     3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
+     3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
+     3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
+     3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
+     3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673, 3673,
+
+     3674,    0, 3674,    0,    0,    0,    0,    0, 3674, 3674,
+     3674, 3674,    0,    0,    0,    0,    0,    0,    0, 3674,
+     3674, 3674, 3674, 3674,    0, 3674,    0,    0,    0,    0,
+        0,    0, 3674, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
+     3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
+     3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
+     3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
+     3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675, 3675,
+     3675, 3675, 3675, 3677, 3677, 3677, 3677, 3677, 3677, 3677,
+     3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677,
+
+     3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677,
+     3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677,
+     3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677, 3677,
+     3677, 3677, 3677, 3679, 3679, 3679, 3679, 3679, 3679, 3679,
+     3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679,
+     3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679,
+     3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679,
+     3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679,
+     3679, 3679, 3679, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680, 3680,
+     3680, 3680, 3680, 3681, 3681, 3681, 3681, 3681, 3681, 3681,
+     3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681,
+     3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681,
+     3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681,
+     3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681, 3681,
+     3681, 3681, 3681, 3682,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3682,    0,    0,    0,    0,    0, 3682,
+
+     3682, 3682, 3682, 3682, 3682, 3682, 3682,    0,    0,    0,
+     3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682, 3682,
+     3682, 3682, 3682, 3682, 3683, 3683, 3683, 3683, 3683, 3683,
+     3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
+     3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
+     3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
+     3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683, 3683,
+     3683, 3683, 3683, 3683, 3686,    0, 3686,    0,    0,    0,
+        0,    0, 3686, 3686, 3686, 3686,    0,    0,    0,    0,
+        0,    0,    0, 3686, 3686, 3686, 3686, 3686,    0, 3686,
+
+        0,    0,    0,    0,    0,    0, 3686, 3689, 3689, 3689,
+     3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689,
+     3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689,
+     3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689,
+     3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689, 3689,
+     3689, 3689, 3689, 3689, 3689, 3689, 3689, 3693,    0,    0,
+        0,    0,    0,    0,    0, 3693,    0, 3693,    0,    0,
+        0,    0,    0, 3693, 3693, 3693, 3693, 3693, 3693, 3693,
+     3693,    0,    0,    0, 3693, 3693, 3693, 3693, 3693, 3693,
+     3693, 3693, 3693, 3693, 3693, 3693, 3693, 3693, 3694, 3694,
+
+     3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694,
+     3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694,
+     3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694,
+     3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694,
+     3694, 3694, 3694, 3694, 3694, 3694, 3694, 3694, 3695,    0,
+     3695,    0,    0,    0,    0,    0, 3695, 3695, 3695, 3695,
+        0,    0,    0,    0,    0,    0,    0, 3695, 3695, 3695,
+     3695, 3695,    0, 3695,    0,    0,    0,    0,    0,    0,
+     3695, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696,
+     3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696,
+
+     3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696,
+     3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696,
+     3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696, 3696,
+     3696, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
+     3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
+     3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
+     3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
+     3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697, 3697,
+     3697, 3699,    0, 3699,    0,    0,    0,    0,    0, 3699,
+     3699, 3699, 3699,    0,    0,    0,    0,    0,    0,    0,
+
+     3699, 3699, 3699, 3699, 3699,    0, 3699,    0,    0,    0,
+        0,    0,    0, 3699, 3700, 3700, 3700, 3700, 3700, 3700,
+     3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700,
+     3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700,
+     3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700,
+     3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700,
+     3700, 3700, 3700, 3700, 3702, 3702, 3702, 3702, 3702, 3702,
+     3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
+     3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
+     3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
+
+     3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702, 3702,
+     3702, 3702, 3702, 3702, 3706,    0,    0,    0,    0,    0,
+        0,    0, 3706,    0, 3706,    0,    0,    0,    0,    0,
+     3706, 3706, 3706, 3706, 3706, 3706, 3706, 3706,    0,    0,
+        0, 3706, 3706, 3706, 3706, 3706, 3706, 3706, 3706, 3706,
+     3706, 3706, 3706, 3706, 3706, 3707,    0, 3707,    0,    0,
+        0,    0,    0, 3707, 3707, 3707, 3707,    0,    0,    0,
+        0,    0,    0,    0, 3707, 3707, 3707, 3707, 3707,    0,
+     3707,    0,    0,    0,    0,    0,    0, 3707, 3708, 3708,
+     3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708,
+
+     3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708,
+     3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708,
+     3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708,
+     3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3709, 3709,
+     3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
+     3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
+     3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
+     3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709,
+     3709, 3709, 3709, 3709, 3709, 3709, 3709, 3709, 3711,    0,
+     3711,    0,    0,    0,    0,    0, 3711, 3711, 3711, 3711,
+
+        0,    0,    0,    0,    0,    0,    0, 3711, 3711, 3711,
+     3711, 3711,    0, 3711,    0,    0,    0,    0,    0,    0,
+     3711, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
+     3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
+     3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
+     3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
+     3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713,
+     3713, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714,
+     3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714,
+     3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714,
+
+     3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714,
+     3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714, 3714,
+     3714, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715,
+     3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715,
+     3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715,
+     3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715,
+     3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715, 3715,
+     3715, 3716,    0,    0,    0,    0,    0,    0,    0, 3716,
+        0, 3716,    0,    0,    0,    0,    0, 3716, 3716, 3716,
+     3716, 3716, 3716, 3716, 3716,    0,    0,    0, 3716, 3716,
+
+     3716, 3716, 3716, 3716, 3716, 3716, 3716, 3716, 3716, 3716,
+     3716, 3716, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3722,    0, 3722,    0,    0,    0,    0,    0,
+     3722, 3722, 3722, 3722,    0,    0,    0,    0,    0,    0,
+        0, 3722, 3722, 3722, 3722, 3722,    0, 3722,    0,    0,
+        0,    0,    0,    0, 3722, 3723, 3723, 3723, 3723, 3723,
+
+     3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
+     3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
+     3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
+     3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723, 3723,
+     3723, 3723, 3723, 3723, 3723, 3724, 3724, 3724, 3724, 3724,
+     3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724,
+     3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724,
+     3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724,
+     3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724, 3724,
+     3724, 3724, 3724, 3724, 3724, 3726,    0, 3726,    0,    0,
+
+        0,    0,    0, 3726, 3726, 3726, 3726,    0,    0,    0,
+        0,    0,    0,    0, 3726, 3726, 3726, 3726, 3726,    0,
+     3726,    0,    0,    0,    0,    0,    0, 3726, 3728, 3728,
+     3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728,
+     3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728,
+     3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728,
+     3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728,
+     3728, 3728, 3728, 3728, 3728, 3728, 3728, 3728, 3730, 3730,
+     3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730,
+     3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730,
+
+     3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730,
+     3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730,
+     3730, 3730, 3730, 3730, 3730, 3730, 3730, 3730, 3731,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3731,    0,
+        0,    0,    0,    0, 3731, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731,    0,    0,    0, 3731, 3731, 3731, 3731, 3731,
+     3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 3731, 3732,
+     3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732,
+     3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732,
+     3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732,
+
+     3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732,
+     3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3732, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733,
+     3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3733, 3745,
+     3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745,
+     3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745,
+     3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745,
+
+     3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745,
+     3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3745, 3752,
+     3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752,
+     3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752,
+     3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752,
+     3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752,
+     3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3752, 3753,
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753,
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753,
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753,
+
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753,
+     3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3753, 3754,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 3754,
+        0,    0,    0,    0,    0, 3754, 3754, 3754, 3754, 3754,
+     3754, 3754, 3754,    0,    0,    0, 3754, 3754, 3754, 3754,
+     3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754, 3754,
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+
+     3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759, 3759,
+     3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762,
+     3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762,
+     3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762,
+     3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762,
+     3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762, 3762,
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765,
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765,
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765,
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765,
+
+     3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765, 3765,
+     3766,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     3766,    0,    0,    0,    0,    0, 3766, 3766, 3766, 3766,
+     3766, 3766, 3766, 3766,    0,    0,    0, 3766, 3766, 3766,
+     3766, 3766, 3766, 3766, 3766, 3766, 3766, 3766, 3766, 3766,
+     3766, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769,
+     3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769, 3769,
+
+     3769, 3772,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 3772,    0,    0,    0,    0,    0, 3772, 3772, 3772,
+     3772, 3772, 3772, 3772, 3772,    0,    0,    0, 3772, 3772,
+     3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772,
+     3772, 3772, 3775,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3775,    0,    0,    0,    0,    0, 3775, 3775,
+     3775, 3775, 3775, 3775, 3775, 3775,    0,    0,    0, 3775,
+     3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775, 3775,
+     3775, 3775, 3775, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777, 3777,
+     3777, 3777, 3777, 3780, 3780, 3780, 3780, 3780, 3780, 3780,
+     3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780,
+     3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780,
+     3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780,
+     3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780,
+     3780, 3780, 3780, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
+     3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
+
+     3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
+     3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
+     3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782, 3782,
+     3782, 3782, 3782, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783, 3783,
+     3783, 3783, 3783, 3786,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3786,    0,    0,    0,    0,    0, 3786,
+
+     3786, 3786, 3786, 3786, 3786, 3786, 3786,    0,    0,    0,
+     3786, 3786, 3786, 3786, 3786, 3786, 3786, 3786, 3786, 3786,
+     3786, 3786, 3786, 3786, 3790, 3790, 3790, 3790, 3790, 3790,
+     3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790,
+     3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790,
+     3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790,
+     3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790, 3790,
+     3790, 3790, 3790, 3790, 3792, 3792, 3792, 3792, 3792, 3792,
+     3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792,
+     3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792,
+
+     3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792,
+     3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792, 3792,
+     3792, 3792, 3792, 3792, 3793, 3793, 3793, 3793, 3793, 3793,
+     3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
+     3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
+     3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
+     3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793, 3793,
+     3793, 3793, 3793, 3793, 3795, 3795, 3795, 3795, 3795, 3795,
+     3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
+     3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
+
+     3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
+     3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3795,
+     3795, 3795, 3795, 3795, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796, 3796,
+     3796, 3796, 3796, 3796, 3797, 3797, 3797, 3797, 3797, 3797,
+     3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797,
+     3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797,
+
+     3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797,
+     3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797, 3797,
+     3797, 3797, 3797, 3797, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798, 3798,
+     3798, 3798, 3798, 3798, 3799,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 3799,    0,    0,    0,    0,    0,
+     3799, 3799, 3799, 3799, 3799, 3799, 3799, 3799,    0,    0,
+
+        0, 3799, 3799, 3799, 3799, 3799, 3799, 3799, 3799, 3799,
+     3799, 3799, 3799, 3799, 3799, 3800, 3800, 3800, 3800, 3800,
+     3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800,
+     3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800,
+     3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800,
+     3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800, 3800,
+     3800, 3800, 3800, 3800, 3800, 3801, 3801, 3801, 3801, 3801,
+     3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801,
+     3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801,
+     3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801,
+
+     3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801, 3801,
+     3801, 3801, 3801, 3801, 3801, 3804,    0, 3804,    0,    0,
+        0,    0,    0, 3804, 3804, 3804, 3804,    0,    0,    0,
+        0,    0,    0,    0, 3804, 3804, 3804, 3804, 3804,    0,
+     3804,    0,    0,    0,    0,    0,    0, 3804, 3805, 3805,
+     3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805,
+     3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805,
+     3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805,
+     3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805,
+     3805, 3805, 3805, 3805, 3805, 3805, 3805, 3805, 3807, 3807,
+
+     3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
+     3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
+     3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
+     3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807,
+     3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3809, 3809,
+     3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809,
+     3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809,
+     3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809,
+     3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809,
+     3809, 3809, 3809, 3809, 3809, 3809, 3809, 3809, 3810, 3810,
+
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810,
+     3810, 3810, 3810, 3810, 3810, 3810, 3810, 3810, 3811,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3811,    0,
+        0,    0,    0,    0, 3811, 3811, 3811, 3811, 3811, 3811,
+     3811, 3811,    0,    0,    0, 3811, 3811, 3811, 3811, 3811,
+     3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3812,
+     3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812,
+
+     3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812,
+     3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812,
+     3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812,
+     3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3815,
+        0, 3815,    0,    0,    0,    0,    0, 3815, 3815, 3815,
+     3815,    0,    0,    0,    0,    0,    0,    0, 3815, 3815,
+     3815, 3815, 3815,    0, 3815,    0,    0,    0,    0,    0,
+        0, 3815, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816,
+     3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816,
+     3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816,
+
+     3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816,
+     3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816, 3816,
+     3816, 3816, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818,
+     3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818,
+     3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818,
+     3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818,
+     3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3818,
+     3818, 3818, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821,
+     3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821,
+     3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821,
+
+     3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821,
+     3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3821,
+     3821, 3821, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+     3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+     3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+     3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+     3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823,
+     3823, 3823, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825,
+     3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825,
+     3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825,
+
+     3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825,
+     3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825, 3825,
+     3825, 3825, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826, 3826,
+     3826, 3826, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827,
+     3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827,
+     3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827,
+
+     3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827,
+     3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827, 3827,
+     3827, 3827, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829,
+     3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829,
+     3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829,
+     3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829,
+     3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829, 3829,
+     3829, 3829, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833,
+     3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833,
+     3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833,
+
+     3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833,
+     3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833,
+     3833, 3833, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835,
+     3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835,
+     3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835,
+     3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835,
+     3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835, 3835,
+     3835, 3835, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836, 3836,
+     3836, 3836, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839,
+     3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839,
+     3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839,
+     3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839,
+     3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839, 3839,
+     3839, 3839, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
+     3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
+     3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
+
+     3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
+     3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842,
+     3842, 3842, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843,
+     3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843,
+     3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843,
+     3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843,
+     3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843, 3843,
+     3843, 3843, 3844,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3844,    0,    0,    0,    0,    0, 3844, 3844,
+     3844, 3844, 3844, 3844, 3844, 3844,    0,    0,    0, 3844,
+
+     3844, 3844, 3844, 3844, 3844, 3844, 3844, 3844, 3844, 3844,
+     3844, 3844, 3844, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
+     3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
+     3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
+     3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
+     3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846, 3846,
+     3846, 3846, 3846, 3847, 3847, 3847, 3847, 3847, 3847, 3847,
+     3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847,
+     3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847,
+     3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847,
+
+     3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847, 3847,
+     3847, 3847, 3847, 3849, 3849, 3849, 3849, 3849, 3849, 3849,
+     3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849,
+     3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849,
+     3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849,
+     3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849, 3849,
+     3849, 3849, 3849, 3850,    0, 3850,    0,    0,    0,    0,
+        0, 3850, 3850, 3850, 3850,    0,    0,    0,    0,    0,
+        0,    0, 3850, 3850, 3850, 3850, 3850,    0, 3850,    0,
+        0,    0,    0,    0,    0, 3850, 3851, 3851, 3851, 3851,
+
+     3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851,
+     3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851,
+     3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851,
+     3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851,
+     3851, 3851, 3851, 3851, 3851, 3851, 3852, 3852, 3852, 3852,
+     3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852,
+     3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852,
+     3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852,
+     3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852, 3852,
+     3852, 3852, 3852, 3852, 3852, 3852, 3857,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0, 3857,    0,    0,    0,
+        0,    0, 3857, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+        0,    0,    0, 3857, 3857, 3857, 3857, 3857, 3857, 3857,
+     3857, 3857, 3857, 3857, 3857, 3857, 3857, 3858,    0, 3858,
+        0,    0,    0,    0,    0, 3858, 3858, 3858, 3858,    0,
+        0,    0,    0,    0,    0,    0, 3858, 3858, 3858, 3858,
+     3858,    0, 3858,    0,    0,    0,    0,    0,    0, 3858,
+     3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864,
+     3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864,
+     3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864,
+
+     3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864,
+     3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864, 3864,
+     3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866,
+     3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866,
+     3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866,
+     3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866,
+     3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866, 3866,
+     3867,    0, 3867,    0,    0,    0,    0,    0, 3867, 3867,
+     3867, 3867,    0,    0,    0,    0,    0,    0,    0, 3867,
+     3867, 3867, 3867, 3867,    0, 3867,    0,    0,    0,    0,
+
+        0,    0, 3867, 3871, 3871, 3871, 3871, 3871, 3871, 3871,
+     3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871,
+     3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871,
+     3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871,
+     3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871, 3871,
+     3871, 3871, 3871, 3872, 3872, 3872, 3872, 3872, 3872, 3872,
+     3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872,
+     3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872,
+     3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872,
+     3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872, 3872,
+
+     3872, 3872, 3872, 3874, 3874, 3874, 3874, 3874, 3874, 3874,
+     3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874,
+     3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874,
+     3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874,
+     3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874, 3874,
+     3874, 3874, 3874, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+     3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875,
+
+     3875, 3875, 3875, 3876, 3876, 3876, 3876, 3876, 3876, 3876,
+     3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876,
+     3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876,
+     3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876,
+     3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876,
+     3876, 3876, 3876, 3878, 3878, 3878, 3878, 3878, 3878, 3878,
+     3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878,
+     3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878,
+     3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878,
+     3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878, 3878,
+
+     3878, 3878, 3878, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880,
+     3880, 3880, 3880, 3883, 3883, 3883, 3883, 3883, 3883, 3883,
+     3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883,
+     3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883,
+     3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883,
+     3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883, 3883,
+
+     3883, 3883, 3883, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
+     3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
+     3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
+     3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
+     3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886,
+
+     3886, 3886, 3886, 3888, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+     3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+     3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+     3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+     3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+
+     3889, 3889, 3889, 3890,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 3890,    0,    0,    0,    0,    0, 3890,
+     3890, 3890, 3890, 3890, 3890, 3890, 3890,    0,    0,    0,
+     3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
+     3890, 3890, 3890, 3890, 3891, 3891, 3891, 3891, 3891, 3891,
+     3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891,
+     3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891,
+     3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891,
+     3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891,
+     3891, 3891, 3891, 3891, 3892, 3892, 3892, 3892, 3892, 3892,
+
+     3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
+     3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
+     3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
+     3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892,
+     3892, 3892, 3892, 3892, 3894, 3894, 3894, 3894, 3894, 3894,
+     3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894,
+     3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894,
+     3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894,
+     3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894, 3894,
+     3894, 3894, 3894, 3894, 3895,    0, 3895,    0,    0,    0,
+
+        0,    0, 3895, 3895, 3895, 3895,    0,    0,    0,    0,
+        0,    0,    0, 3895, 3895, 3895, 3895, 3895,    0, 3895,
+        0,    0,    0,    0,    0,    0, 3895, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3899, 3899, 3899, 3899, 3899, 3900, 3900, 3900,
+     3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900,
+     3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900,
+
+     3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900,
+     3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900,
+     3900, 3900, 3900, 3900, 3900, 3900, 3900, 3901,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 3901,    0,    0,
+        0,    0,    0, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
+     3901,    0,    0,    0, 3901, 3901, 3901, 3901, 3901, 3901,
+     3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3902, 3902,
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
+
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902,
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3903,    0,
+     3903,    0,    0,    0,    0,    0, 3903, 3903, 3903, 3903,
+        0,    0,    0,    0,    0,    0,    0, 3903, 3903, 3903,
+     3903, 3903,    0, 3903,    0,    0,    0,    0,    0,    0,
+     3903, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
+     3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
+     3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
+     3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
+     3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904,
+
+     3904, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
+     3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
+     3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
+     3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
+     3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907, 3907,
+     3907, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+     3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+     3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+     3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+     3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+
+     3909, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+     3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+     3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+     3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+     3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+
+     3911, 3914,    0, 3914,    0,    0,    0,    0,    0, 3914,
+     3914, 3914, 3914,    0,    0,    0,    0,    0,    0,    0,
+     3914, 3914, 3914, 3914, 3914,    0, 3914,    0,    0,    0,
+        0,    0,    0, 3914, 3915, 3915, 3915, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3916,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 3916,    0,    0,    0,    0,    0,
+
+     3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,    0,    0,
+        0, 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916, 3916,
+     3916, 3916, 3916, 3916, 3916, 3917,    0, 3917,    0,    0,
+        0,    0,    0, 3917, 3917, 3917, 3917,    0,    0,    0,
+        0,    0,    0,    0, 3917, 3917, 3917, 3917, 3917,    0,
+     3917,    0,    0,    0,    0,    0,    0, 3917, 3918, 3918,
+     3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918,
+     3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918,
+     3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918,
+     3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918,
+
+     3918, 3918, 3918, 3918, 3918, 3918, 3918, 3918, 3923, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3924, 3924,
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924,
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924,
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924,
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924,
+
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3924, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3927,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 3927,    0,
+        0,    0,    0,    0, 3927, 3927, 3927, 3927, 3927, 3927,
+     3927, 3927,    0,    0,    0, 3927, 3927, 3927, 3927, 3927,
+     3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3929,
+
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3933,
+        0, 3933,    0,    0,    0,    0,    0, 3933, 3933, 3933,
+     3933,    0,    0,    0,    0,    0,    0,    0, 3933, 3933,
+     3933, 3933, 3933,    0, 3933,    0,    0,    0,    0,    0,
+        0, 3933, 3935,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 3935,    0,    0,    0,    0,    0, 3935, 3935,
+
+     3935, 3935, 3935, 3935, 3935, 3935,    0,    0,    0, 3935,
+     3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935, 3935,
+     3935, 3935, 3935, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
+     3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
+     3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
+     3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
+     3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
+     3938, 3938, 3938, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+     3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+     3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+
+     3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+     3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+     3940, 3940, 3940, 3941,    0, 3941,    0,    0,    0,    0,
+        0, 3941, 3941, 3941, 3941,    0,    0,    0,    0,    0,
+        0,    0, 3941, 3941, 3941, 3941, 3941,    0, 3941,    0,
+        0,    0,    0,    0,    0, 3941, 3947, 3947, 3947, 3947,
+     3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947,
+     3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947,
+     3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947,
+     3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947, 3947,
+
+     3947, 3947, 3947, 3947, 3947, 3947, 3949, 3949, 3949, 3949,
+     3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
+     3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
+     3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
+     3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
+     3949, 3949, 3949, 3949, 3949, 3949, 3950, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+
+     3950, 3950, 3950, 3950, 3950, 3950, 3951, 3951, 3951, 3951,
+     3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
+     3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
+     3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
+     3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
+     3951, 3951, 3951, 3951, 3951, 3951, 3952,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 3952,    0,    0,    0,
+        0,    0, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952,
+        0,    0,    0, 3952, 3952, 3952, 3952, 3952, 3952, 3952,
+     3952, 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953, 3953,
+
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953,
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953,
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953,
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953,
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3954,    0, 3954,
+        0,    0,    0,    0,    0, 3954, 3954, 3954, 3954,    0,
+        0,    0,    0,    0,    0,    0, 3954, 3954, 3954, 3954,
+     3954,    0, 3954,    0,    0,    0,    0,    0,    0, 3954,
+     3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
+     3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
+
+     3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
+     3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
+     3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955, 3955,
+     3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
+     3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
+     3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
+     3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
+     3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
+     3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
+     3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
+
+     3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
+     3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
+     3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
+     3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964,
+     3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964,
+     3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964,
+     3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964,
+     3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964, 3964,
+     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
+     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
+
+     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
+     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
+     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
+     3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
+     3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
+     3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
+     3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
+     3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
+     3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967,
+     3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967,
+
+     3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967,
+     3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967,
+     3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967, 3967,
+     3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
+     3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
+     3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
+     3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
+     3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
+
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
+     3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
+     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971,
+     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971,
+     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971,
+     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971,
+     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+     3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974, 3974,
+     3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
+     3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
+     3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
+     3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
+     3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978,
+     3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
+     3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
+
+     3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
+     3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
+     3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
+     3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986,
+     3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986,
+
+     3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986,
+     3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986,
+     3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986, 3986,
+     3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991,
+     3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991,
+     3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991,
+     3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991,
+     3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994, 3994,
+     3997,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     3997,    0,    0,    0,    0,    0, 3997, 3997, 3997, 3997,
+     3997, 3997, 3997, 3997,    0,    0,    0, 3997, 3997, 3997,
+     3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997, 3997,
+     3997, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
+     4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
+     4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
+
+     4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
+     4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001, 4001,
+     4001, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003,
+     4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003,
+     4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003,
+     4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003,
+     4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003, 4003,
+     4003, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+     4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004, 4004,
+     4004, 4007,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 4007,    0,    0,    0,    0,    0, 4007, 4007, 4007,
+     4007, 4007, 4007, 4007, 4007,    0,    0,    0, 4007, 4007,
+     4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007, 4007,
+     4007, 4007, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+
+     4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012,
+     4012, 4012, 4015,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 4015,    0,    0,    0,    0,    0, 4015, 4015,
+     4015, 4015, 4015, 4015, 4015, 4015,    0,    0,    0, 4015,
+     4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015, 4015,
+     4015, 4015, 4015, 4021, 4021, 4021, 4021, 4021, 4021, 4021,
+     4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021,
+     4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021,
+     4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021,
+     4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021, 4021,
+
+     4021, 4021, 4021, 4022, 4022, 4022, 4022, 4022, 4022, 4022,
+     4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022,
+     4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022,
+     4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022,
+     4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022, 4022,
+     4022, 4022, 4022, 4023,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4023,    0,    0,    0,    0,    0, 4023,
+     4023, 4023, 4023, 4023, 4023, 4023, 4023,    0,    0,    0,
+     4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023,
+     4023, 4023, 4023, 4023, 4025,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0, 4025,    0,    0,    0,    0,    0,
+     4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025,    0,    0,
+        0, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025,
+     4025, 4025, 4025, 4025, 4025, 4029, 4029, 4029, 4029, 4029,
+     4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029,
+     4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029,
+     4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029,
+     4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029, 4029,
+     4029, 4029, 4029, 4029, 4029, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032, 4032,
+     4032, 4032, 4032, 4032, 4032, 4033,    0, 4033,    0,    0,
+        0,    0,    0, 4033, 4033, 4033, 4033,    0,    0,    0,
+        0,    0,    0,    0, 4033, 4033, 4033, 4033, 4033,    0,
+     4033,    0,    0,    0,    0,    0,    0, 4033, 4034,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 4034,    0,
+        0,    0,    0,    0, 4034, 4034, 4034, 4034, 4034, 4034,
+     4034, 4034,    0,    0,    0, 4034, 4034, 4034, 4034, 4034,
+
+     4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4034, 4035,
+     4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035,
+     4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035,
+     4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035,
+     4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035,
+     4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4035, 4038,
+     4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038,
+     4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038,
+     4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038,
+     4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038,
+
+     4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4038, 4039,
+     4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
+     4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
+     4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
+     4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039,
+     4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4039, 4041,
+     4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
+     4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
+     4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
+     4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041,
+
+     4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4041, 4042,
+        0, 4042,    0,    0,    0,    0,    0, 4042, 4042, 4042,
+     4042,    0,    0,    0,    0,    0,    0,    0, 4042, 4042,
+     4042, 4042, 4042,    0, 4042,    0,    0,    0,    0,    0,
+        0, 4042, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043,
+     4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043,
+     4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043,
+     4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043,
+     4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043,
+     4043, 4043, 4049,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0, 4049,    0,    0,    0,    0,    0, 4049, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049,    0,    0,    0, 4049,
+     4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050, 4050,
+     4050, 4050, 4050, 4053,    0, 4053,    0,    0,    0,    0,
+        0, 4053, 4053, 4053, 4053,    0,    0,    0,    0,    0,
+
+        0,    0, 4053, 4053, 4053, 4053, 4053,    0, 4053,    0,
+        0,    0,    0,    0,    0, 4053, 4054, 4054, 4054, 4054,
+     4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054,
+     4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054,
+     4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054,
+     4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054, 4054,
+     4054, 4054, 4054, 4054, 4054, 4054, 4055, 4055, 4055, 4055,
+     4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055,
+     4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055,
+     4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055,
+
+     4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055, 4055,
+     4055, 4055, 4055, 4055, 4055, 4055, 4056,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 4056,    0,    0,    0,
+        0,    0, 4056, 4056, 4056, 4056, 4056, 4056, 4056, 4056,
+        0,    0,    0, 4056, 4056, 4056, 4056, 4056, 4056, 4056,
+     4056, 4056, 4056, 4056, 4056, 4056, 4056, 4058, 4058, 4058,
+     4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058,
+     4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058,
+     4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058,
+     4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058, 4058,
+
+     4058, 4058, 4058, 4058, 4058, 4058, 4058, 4059, 4059, 4059,
+     4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059,
+     4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059,
+     4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059,
+     4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059, 4059,
+     4059, 4059, 4059, 4059, 4059, 4059, 4059, 4061, 4061, 4061,
+     4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061,
+     4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061,
+     4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061,
+     4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061, 4061,
+
+     4061, 4061, 4061, 4061, 4061, 4061, 4061, 4062,    0, 4062,
+        0,    0,    0,    0,    0, 4062, 4062, 4062, 4062,    0,
+        0,    0,    0,    0,    0,    0, 4062, 4062, 4062, 4062,
+     4062,    0, 4062,    0,    0,    0,    0,    0,    0, 4062,
+     4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063,
+     4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063,
+     4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063,
+     4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063,
+     4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063, 4063,
+     4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064,
+
+     4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064,
+     4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064,
+     4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064,
+     4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064, 4064,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066, 4066,
+     4067,    0, 4067,    0,    0,    0,    0,    0, 4067, 4067,
+
+     4067, 4067,    0,    0,    0,    0,    0,    0,    0, 4067,
+     4067, 4067, 4067, 4067,    0, 4067,    0,    0,    0,    0,
+        0,    0, 4067, 4068,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4068,    0,    0,    0,    0,    0, 4068,
+     4068, 4068, 4068, 4068, 4068, 4068, 4068,    0,    0,    0,
+     4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068, 4068,
+     4068, 4068, 4068, 4068, 4069, 4069, 4069, 4069, 4069, 4069,
+     4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069,
+     4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069,
+     4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069,
+
+     4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069,
+     4069, 4069, 4069, 4069, 4072, 4072, 4072, 4072, 4072, 4072,
+     4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072,
+     4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072,
+     4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072,
+     4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072, 4072,
+     4072, 4072, 4072, 4072, 4074, 4074, 4074, 4074, 4074, 4074,
+     4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074,
+     4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074,
+     4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074,
+
+     4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074, 4074,
+     4074, 4074, 4074, 4074, 4075,    0, 4075,    0,    0,    0,
+        0,    0, 4075, 4075, 4075, 4075,    0,    0,    0,    0,
+        0,    0,    0, 4075, 4075, 4075, 4075, 4075,    0, 4075,
+        0,    0,    0,    0,    0,    0, 4075, 4083, 4083, 4083,
+     4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083,
+     4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083,
+     4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083,
+     4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083, 4083,
+     4083, 4083, 4083, 4083, 4083, 4083, 4083, 4084,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0, 4084,    0,    0,
+        0,    0,    0, 4084, 4084, 4084, 4084, 4084, 4084, 4084,
+     4084,    0,    0,    0, 4084, 4084, 4084, 4084, 4084, 4084,
+     4084, 4084, 4084, 4084, 4084, 4084, 4084, 4084, 4086, 4086,
+     4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086,
+     4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086,
+     4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086,
+     4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086,
+     4086, 4086, 4086, 4086, 4086, 4086, 4086, 4086, 4087, 4087,
+     4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
+
+     4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
+     4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
+     4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087,
+     4087, 4087, 4087, 4087, 4087, 4087, 4087, 4087, 4089, 4089,
+     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089,
+     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089,
+     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089,
+     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089,
+     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4090,    0,
+     4090,    0,    0,    0,    0,    0, 4090, 4090, 4090, 4090,
+
+        0,    0,    0,    0,    0,    0,    0, 4090, 4090, 4090,
+     4090, 4090,    0, 4090,    0,    0,    0,    0,    0,    0,
+     4090, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091,
+     4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091,
+     4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091,
+     4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091,
+     4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091, 4091,
+     4091, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
+     4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
+     4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
+
+     4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
+     4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092, 4092,
+     4092, 4098, 4098, 4098, 4098,    0, 4098, 4098,    0, 4098,
+        0, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098,    0,
+        0, 4098,    0, 4098, 4098, 4098, 4098, 4098, 4098, 4098,
+     4098, 4098,    0, 4098, 4098, 4098, 4098, 4098, 4098, 4098,
+     4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4098, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100,
+     4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4100, 4102,
+     4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102,
+     4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102,
+     4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102,
+     4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102,
+     4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4102, 4104,
+     4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104,
+     4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104,
+     4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104,
+
+     4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104,
+     4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4104, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108,
+     4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4108, 4110,
+     4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110,
+     4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110,
+     4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110,
+
+     4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110,
+     4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4110, 4111,
+     4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111,
+     4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111,
+     4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111,
+     4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111,
+     4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4111, 4113,
+     4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
+     4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
+     4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
+
+     4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113,
+     4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4113, 4114,
+        0, 4114, 4114, 4114,    0,    0,    0,    0,    0, 4114,
+     4114, 4114, 4114,    0,    0,    0,    0,    0,    0,    0,
+     4114, 4114, 4114, 4114, 4114,    0, 4114,    0,    0,    0,
+        0,    0,    0, 4114, 4115, 4115, 4115, 4115, 4115, 4115,
+     4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115,
+     4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115,
+     4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115,
+     4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115, 4115,
+
+     4115, 4115, 4115, 4115, 4117, 4117, 4117, 4117, 4117, 4117,
+     4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117,
+     4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117,
+     4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117,
+     4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117, 4117,
+     4117, 4117, 4117, 4117, 4119, 4119, 4119, 4119, 4119, 4119,
+     4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119,
+     4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119,
+     4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119,
+     4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119, 4119,
+
+     4119, 4119, 4119, 4119, 4123,    0,    0,    0,    0,    0,
+        0,    0, 4123,    0, 4123,    0,    0,    0,    0,    0,
+     4123, 4123, 4123, 4123, 4123, 4123, 4123, 4123,    0,    0,
+        0, 4123, 4123, 4123, 4123, 4123, 4123, 4123, 4123, 4123,
+     4123, 4123, 4123, 4123, 4123, 4124, 4124, 4124, 4124, 4124,
+     4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
+     4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
+     4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
+     4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124, 4124,
+     4124, 4124, 4124, 4124, 4124, 4125,    0, 4125,    0,    0,
+
+        0,    0,    0, 4125, 4125, 4125, 4125,    0,    0,    0,
+        0,    0,    0,    0, 4125, 4125, 4125, 4125, 4125,    0,
+     4125,    0,    0,    0,    0,    0,    0, 4125, 4126, 4126,
+     4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
+     4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
+     4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
+     4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126,
+     4126, 4126, 4126, 4126, 4126, 4126, 4126, 4126, 4127, 4127,
+     4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127,
+     4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127,
+
+     4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127,
+     4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127,
+     4127, 4127, 4127, 4127, 4127, 4127, 4127, 4127, 4129,    0,
+     4129,    0,    0,    0,    0,    0, 4129, 4129, 4129, 4129,
+        0,    0,    0,    0,    0,    0,    0, 4129, 4129, 4129,
+     4129, 4129,    0, 4129,    0,    0,    0,    0,    0,    0,
+     4129, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134,
+     4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134,
+     4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134,
+     4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134,
+
+     4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134,
+     4134, 4136,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 4136,    0,    0,    0,    0,    0, 4136, 4136, 4136,
+     4136, 4136, 4136, 4136, 4136,    0,    0,    0, 4136, 4136,
+     4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136, 4136,
+     4136, 4136, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138,
+     4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138,
+     4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138,
+     4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138,
+     4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138, 4138,
+
+     4138, 4138, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139,
+     4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139,
+     4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139,
+     4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139,
+     4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139, 4139,
+     4139, 4139, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141,
+     4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141,
+     4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141,
+     4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141,
+     4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141, 4141,
+
+     4141, 4141, 4142,    0, 4142,    0,    0,    0,    0,    0,
+     4142, 4142, 4142, 4142,    0,    0,    0,    0,    0,    0,
+        0, 4142, 4142, 4142, 4142, 4142,    0, 4142,    0,    0,
+        0,    0,    0,    0, 4142, 4143, 4143, 4143, 4143, 4143,
+     4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
+     4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
+     4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
+     4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143,
+     4143, 4143, 4143, 4143, 4143, 4144, 4144, 4144, 4144, 4144,
+     4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144,
+
+     4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144,
+     4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144,
+     4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144, 4144,
+     4144, 4144, 4144, 4144, 4144, 4149, 4149, 4149, 4149, 4149,
+     4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
+     4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
+     4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
+     4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149, 4149,
+     4149, 4149, 4149, 4149, 4149, 4153, 4153, 4153, 4153, 4153,
+     4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+
+     4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+     4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+     4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153, 4153,
+     4153, 4153, 4153, 4153, 4153, 4156,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4156,    0,    0,    0,    0,
+        0, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156,    0,
+        0,    0, 4156, 4156, 4156, 4156, 4156, 4156, 4156, 4156,
+     4156, 4156, 4156, 4156, 4156, 4156, 4158, 4158, 4158, 4158,
+     4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158,
+     4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158,
+
+     4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158,
+     4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158, 4158,
+     4158, 4158, 4158, 4158, 4158, 4158, 4160, 4160, 4160, 4160,
+     4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160,
+     4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160,
+     4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160,
+     4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160,
+     4160, 4160, 4160, 4160, 4160, 4160, 4161,    0, 4161,    0,
+        0,    0,    0,    0, 4161, 4161, 4161, 4161,    0,    0,
+        0,    0,    0,    0,    0, 4161, 4161, 4161, 4161, 4161,
+
+        0, 4161,    0,    0,    0,    0,    0,    0, 4161, 4165,
+     4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165,
+     4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165,
+     4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165,
+     4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165,
+     4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4165, 4168,
+     4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168,
+     4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168,
+     4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168,
+     4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168,
+
+     4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4168, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170,
+     4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4170, 4171,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 4171,
+        0,    0,    0,    0,    0, 4171, 4171, 4171, 4171, 4171,
+     4171, 4171, 4171,    0,    0,    0, 4171, 4171, 4171, 4171,
+     4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171, 4171,
+
+     4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+     4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+     4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+     4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+     4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172, 4172,
+     4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173,
+     4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173,
+     4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173,
+     4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173,
+     4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173, 4173,
+
+     4176,    0, 4176,    0,    0,    0,    0,    0, 4176, 4176,
+     4176, 4176,    0,    0,    0,    0,    0,    0,    0, 4176,
+     4176, 4176, 4176, 4176,    0, 4176,    0,    0,    0,    0,
+        0,    0, 4176, 4177, 4177, 4177, 4177, 4177, 4177, 4177,
+     4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177,
+     4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177,
+     4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177,
+     4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177,
+     4177, 4177, 4177, 4179, 4179, 4179, 4179, 4179, 4179, 4179,
+     4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179,
+
+     4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179,
+     4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179,
+     4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179, 4179,
+     4179, 4179, 4179, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180, 4180,
+     4180, 4180, 4180, 4181,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4181,    0,    0,    0,    0,    0, 4181,
+
+     4181, 4181, 4181, 4181, 4181, 4181, 4181,    0,    0,    0,
+     4181, 4181, 4181, 4181, 4181, 4181, 4181, 4181, 4181, 4181,
+     4181, 4181, 4181, 4181, 4182, 4182, 4182, 4182, 4182, 4182,
+     4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182,
+     4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182,
+     4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182,
+     4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182, 4182,
+     4182, 4182, 4182, 4182, 4185,    0, 4185,    0,    0,    0,
+        0,    0, 4185, 4185, 4185, 4185,    0,    0,    0,    0,
+        0,    0,    0, 4185, 4185, 4185, 4185, 4185,    0, 4185,
+
+        0,    0,    0,    0,    0,    0, 4185, 4188, 4188, 4188,
+     4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188,
+     4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188,
+     4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188,
+     4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188, 4188,
+     4188, 4188, 4188, 4188, 4188, 4188, 4188, 4189, 4189, 4189,
+     4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
+     4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
+     4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
+     4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189, 4189,
+
+     4189, 4189, 4189, 4189, 4189, 4189, 4189, 4191,    0,    0,
+        0,    0,    0,    0,    0, 4191,    0, 4191,    0,    0,
+        0,    0,    0, 4191, 4191, 4191, 4191, 4191, 4191, 4191,
+     4191,    0,    0,    0, 4191, 4191, 4191, 4191, 4191, 4191,
+     4191, 4191, 4191, 4191, 4191, 4191, 4191, 4191, 4193,    0,
+     4193,    0,    0,    0,    0,    0, 4193, 4193, 4193, 4193,
+        0,    0,    0,    0,    0,    0,    0, 4193, 4193, 4193,
+     4193, 4193,    0, 4193,    0,    0,    0,    0,    0,    0,
+     4193, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194,
+     4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194,
+
+     4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194,
+     4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194,
+     4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194, 4194,
+     4194, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
+     4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
+     4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
+     4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
+     4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
+     4195, 4197,    0, 4197,    0,    0,    0,    0,    0, 4197,
+     4197, 4197, 4197,    0,    0,    0,    0,    0,    0,    0,
+
+     4197, 4197, 4197, 4197, 4197,    0, 4197,    0,    0,    0,
+        0,    0,    0, 4197, 4199, 4199, 4199, 4199, 4199, 4199,
+     4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199,
+     4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199,
+     4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199,
+     4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199, 4199,
+     4199, 4199, 4199, 4199, 4200, 4200, 4200, 4200, 4200, 4200,
+     4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
+     4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
+     4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
+
+     4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200, 4200,
+     4200, 4200, 4200, 4200, 4202, 4202, 4202, 4202, 4202, 4202,
+     4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
+     4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
+     4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
+     4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202, 4202,
+     4202, 4202, 4202, 4202, 4203, 4203, 4203, 4203, 4203, 4203,
+     4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203,
+     4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203,
+     4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203,
+
+     4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203, 4203,
+     4203, 4203, 4203, 4203, 4205, 4205, 4205, 4205, 4205, 4205,
+     4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205,
+     4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205,
+     4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205,
+     4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205, 4205,
+     4205, 4205, 4205, 4205, 4206,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4206,    0,    0,    0,    0,    0,
+     4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206,    0,    0,
+        0, 4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206, 4206,
+
+     4206, 4206, 4206, 4206, 4206, 4207, 4207, 4207, 4207, 4207,
+     4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207,
+     4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207,
+     4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207,
+     4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207, 4207,
+     4207, 4207, 4207, 4207, 4207, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+     4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208, 4208,
+
+     4208, 4208, 4208, 4208, 4208, 4210, 4210, 4210, 4210, 4210,
+     4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210,
+     4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210,
+     4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210,
+     4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210, 4210,
+     4210, 4210, 4210, 4210, 4210, 4211,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4211,    0,    0,    0,    0,
+        0, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,    0,
+        0,    0, 4211, 4211, 4211, 4211, 4211, 4211, 4211, 4211,
+     4211, 4211, 4211, 4211, 4211, 4211, 4213,    0, 4213,    0,
+
+        0,    0,    0,    0, 4213, 4213, 4213, 4213,    0,    0,
+        0,    0,    0,    0,    0, 4213, 4213, 4213, 4213, 4213,
+        0, 4213,    0,    0,    0,    0,    0,    0, 4213, 4216,
+     4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
+     4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
+     4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
+     4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216,
+     4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4216, 4219,
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219,
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219,
+
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219,
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219,
+     4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4219, 4220,
+     4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220,
+     4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220,
+     4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220,
+     4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220,
+     4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4220, 4224,
+     4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224,
+     4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224,
+
+     4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224,
+     4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224,
+     4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4225,
+     4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225,
+     4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225,
+     4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225,
+     4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225,
+     4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4225, 4226,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 4226,
+        0,    0,    0,    0,    0, 4226, 4226, 4226, 4226, 4226,
+
+     4226, 4226, 4226,    0,    0,    0, 4226, 4226, 4226, 4226,
+     4226, 4226, 4226, 4226, 4226, 4226, 4226, 4226, 4226, 4226,
+     4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
+     4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
+     4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
+     4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
+     4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227, 4227,
+     4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228,
+     4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228,
+     4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228,
+
+     4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228,
+     4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228, 4228,
+     4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230,
+     4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230,
+     4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230,
+     4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230,
+     4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230, 4230,
+     4231,    0, 4231,    0,    0,    0,    0,    0, 4231, 4231,
+     4231, 4231,    0,    0,    0,    0,    0,    0,    0, 4231,
+     4231, 4231, 4231, 4231,    0, 4231,    0,    0,    0,    0,
+
+        0,    0, 4231, 4235, 4235, 4235, 4235, 4235, 4235, 4235,
+     4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235,
+     4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235,
+     4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235,
+     4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235, 4235,
+     4235, 4235, 4235, 4238, 4238, 4238, 4238, 4238, 4238, 4238,
+     4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238,
+     4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238,
+     4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238,
+     4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238, 4238,
+
+     4238, 4238, 4238, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250, 4250,
+     4250, 4250, 4250, 4252, 4252, 4252, 4252, 4252, 4252, 4252,
+     4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252,
+     4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252,
+     4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252,
+     4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252, 4252,
+
+     4252, 4252, 4252, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255,
+     4255, 4255, 4255, 4257, 4257, 4257, 4257, 4257, 4257, 4257,
+     4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257,
+     4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257,
+     4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257,
+     4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257, 4257,
+
+     4257, 4257, 4257, 4258, 4258, 4258, 4258, 4258, 4258, 4258,
+     4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258,
+     4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258,
+     4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258,
+     4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258, 4258,
+     4258, 4258, 4258, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+     4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259, 4259,
+
+     4259, 4259, 4259, 4260,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4260,    0,    0,    0,    0,    0, 4260,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260,    0,    0,    0,
+     4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260, 4260,
+     4260, 4260, 4260, 4260, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264, 4264,
+     4264, 4264, 4264, 4264, 4267, 4267, 4267, 4267, 4267, 4267,
+
+     4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267,
+     4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267,
+     4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267,
+     4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267, 4267,
+     4267, 4267, 4267, 4267, 4269, 4269, 4269, 4269, 4269, 4269,
+     4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
+     4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
+     4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
+     4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269, 4269,
+     4269, 4269, 4269, 4269, 4271,    0,    0,    0,    0,    0,
+
+        0,    0, 4271,    0, 4271,    0,    0,    0,    0,    0,
+     4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271,    0,    0,
+        0, 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271, 4271,
+     4271, 4271, 4271, 4271, 4271, 4272, 4272, 4272, 4272, 4272,
+     4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272,
+     4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272,
+     4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272,
+     4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272, 4272,
+     4272, 4272, 4272, 4272, 4272, 4273,    0, 4273,    0,    0,
+        0,    0,    0, 4273, 4273, 4273, 4273,    0,    0,    0,
+
+        0,    0,    0,    0, 4273, 4273, 4273, 4273, 4273,    0,
+     4273,    0,    0,    0,    0,    0,    0, 4273, 4275, 4275,
+     4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275,
+     4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275,
+     4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275,
+     4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275,
+     4275, 4275, 4275, 4275, 4275, 4275, 4275, 4275, 4276, 4276,
+     4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276,
+     4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276,
+     4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276,
+
+     4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276,
+     4276, 4276, 4276, 4276, 4276, 4276, 4276, 4276, 4278,    0,
+     4278,    0,    0,    0,    0,    0, 4278, 4278, 4278, 4278,
+        0,    0,    0,    0,    0,    0,    0, 4278, 4278, 4278,
+     4278, 4278,    0, 4278,    0,    0,    0,    0,    0,    0,
+     4278, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279,
+     4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279,
+     4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279,
+     4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279,
+     4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279, 4279,
+
+     4279, 4284,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 4284,    0,    0,    0,    0,    0, 4284, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284,    0,    0,    0, 4284, 4284,
+     4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284, 4284,
+     4284, 4284, 4285,    0, 4285,    0,    0,    0,    0,    0,
+     4285, 4285, 4285, 4285,    0,    0,    0,    0,    0,    0,
+        0, 4285, 4285, 4285, 4285, 4285,    0, 4285,    0,    0,
+        0,    0,    0,    0, 4285, 4288, 4288, 4288, 4288, 4288,
+     4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
+     4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
+
+     4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
+     4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288, 4288,
+     4288, 4288, 4288, 4288, 4288, 4290, 4290, 4290, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4291,    0, 4291,    0,    0,
+        0,    0,    0, 4291, 4291, 4291, 4291,    0,    0,    0,
+        0,    0,    0,    0, 4291, 4291, 4291, 4291, 4291,    0,
+
+     4291,    0,    0,    0,    0,    0,    0, 4291, 4297, 4297,
+     4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
+     4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
+     4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
+     4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297,
+     4297, 4297, 4297, 4297, 4297, 4297, 4297, 4297, 4301, 4301,
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301,
+
+     4301, 4301, 4301, 4301, 4301, 4301, 4301, 4301, 4303, 4303,
+     4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303,
+     4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303,
+     4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303,
+     4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303,
+     4303, 4303, 4303, 4303, 4303, 4303, 4303, 4303, 4304, 4304,
+     4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
+     4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
+     4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
+     4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304,
+
+     4304, 4304, 4304, 4304, 4304, 4304, 4304, 4304, 4306, 4306,
+     4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306,
+     4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306,
+     4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306,
+     4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306,
+     4306, 4306, 4306, 4306, 4306, 4306, 4306, 4306, 4307,    0,
+     4307, 4307, 4307,    0,    0,    0,    0,    0, 4307, 4307,
+     4307, 4307,    0,    0,    0,    0,    0,    0,    0, 4307,
+     4307, 4307, 4307, 4307,    0, 4307,    0,    0,    0,    0,
+        0,    0, 4307, 4308, 4308, 4308, 4308, 4308, 4308, 4308,
+
+     4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308,
+     4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308,
+     4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308,
+     4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308, 4308,
+     4308, 4308, 4308, 4309, 4309, 4309, 4309, 4309, 4309, 4309,
+     4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309,
+     4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309,
+     4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309,
+     4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309, 4309,
+     4309, 4309, 4309, 4311,    0,    0,    0,    0,    0,    0,
+
+        0, 4311,    0, 4311,    0,    0,    0,    0,    0, 4311,
+     4311, 4311, 4311, 4311, 4311, 4311, 4311,    0,    0,    0,
+     4311, 4311, 4311, 4311, 4311, 4311, 4311, 4311, 4311, 4311,
+     4311, 4311, 4311, 4311, 4312, 4312, 4312, 4312, 4312, 4312,
+     4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312,
+     4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312,
+     4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312,
+     4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312,
+     4312, 4312, 4312, 4312, 4313,    0, 4313,    0,    0,    0,
+        0,    0, 4313, 4313, 4313, 4313,    0,    0,    0,    0,
+
+        0,    0,    0, 4313, 4313, 4313, 4313, 4313,    0, 4313,
+        0,    0,    0,    0,    0,    0, 4313, 4315, 4315, 4315,
+     4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315,
+     4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315,
+     4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315,
+     4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315, 4315,
+     4315, 4315, 4315, 4315, 4315, 4315, 4315, 4317,    0, 4317,
+        0,    0,    0,    0,    0, 4317, 4317, 4317, 4317,    0,
+        0,    0,    0,    0,    0,    0, 4317, 4317, 4317, 4317,
+     4317,    0, 4317,    0,    0,    0,    0,    0,    0, 4317,
+
+     4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318,
+     4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318,
+     4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318,
+     4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318,
+     4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318, 4318,
+     4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324,
+     4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324,
+     4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324,
+     4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324,
+     4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324, 4324,
+
+     4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326,
+     4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326,
+     4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326,
+     4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326,
+     4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326, 4326,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329,
+     4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329, 4329,
+
+     4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331,
+     4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331,
+     4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331,
+     4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331,
+     4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331, 4331,
+     4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332,
+     4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332,
+     4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332,
+     4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332,
+     4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332, 4332,
+
+     4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334,
+     4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334,
+     4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334,
+     4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334,
+     4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334, 4334,
+     4335,    0, 4335, 4335, 4335,    0,    0,    0,    0,    0,
+     4335, 4335, 4335, 4335,    0,    0,    0,    0,    0,    0,
+        0, 4335, 4335, 4335, 4335, 4335,    0, 4335,    0,    0,
+        0,    0,    0,    0, 4335, 4336, 4336, 4336, 4336, 4336,
+     4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336,
+
+     4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336,
+     4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336,
+     4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336, 4336,
+     4336, 4336, 4336, 4336, 4336, 4342, 4342, 4342, 4342, 4342,
+     4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342,
+     4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342,
+     4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342,
+     4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342, 4342,
+     4342, 4342, 4342, 4342, 4342, 4344, 4344, 4344, 4344, 4344,
+     4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344,
+
+     4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344,
+     4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344,
+     4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344, 4344,
+     4344, 4344, 4344, 4344, 4344, 4347, 4347, 4347, 4347, 4347,
+     4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347,
+     4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347,
+     4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347,
+     4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347, 4347,
+     4347, 4347, 4347, 4347, 4347, 4349, 4349, 4349, 4349, 4349,
+     4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349,
+
+     4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349,
+     4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349,
+     4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349, 4349,
+     4349, 4349, 4349, 4349, 4349, 4351, 4351, 4351, 4351, 4351,
+     4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351,
+     4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351,
+     4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351,
+     4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351, 4351,
+     4351, 4351, 4351, 4351, 4351, 4353, 4353, 4353, 4353, 4353,
+     4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
+
+     4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
+     4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
+     4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353, 4353,
+     4353, 4353, 4353, 4353, 4353, 4356, 4356, 4356, 4356, 4356,
+     4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+     4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+     4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+     4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356,
+     4356, 4356, 4356, 4356, 4356, 4357, 4357, 4357, 4357, 4357,
+     4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+
+     4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+     4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+     4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357,
+     4357, 4357, 4357, 4357, 4357, 4359, 4359, 4359, 4359, 4359,
+     4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
+     4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
+     4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
+     4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359, 4359,
+     4359, 4359, 4359, 4359, 4359, 4360, 4360, 4360, 4360, 4360,
+     4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360,
+
+     4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360,
+     4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360,
+     4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360, 4360,
+     4360, 4360, 4360, 4360, 4360, 4362, 4362, 4362, 4362, 4362,
+     4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362,
+     4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362,
+     4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362,
+     4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362, 4362,
+     4362, 4362, 4362, 4362, 4362, 4363,    0, 4363, 4363, 4363,
+        0,    0,    0,    0,    0, 4363, 4363, 4363, 4363,    0,
+
+        0,    0,    0,    0,    0,    0, 4363, 4363, 4363, 4363,
+     4363,    0, 4363,    0,    0,    0,    0,    0,    0, 4363,
+     4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364,
+     4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364,
+     4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364,
+     4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364,
+     4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364, 4364,
+     4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371,
+     4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371,
+     4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371,
+
+     4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371,
+     4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371, 4371,
+     4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372,
+     4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372,
+     4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372,
+     4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372,
+     4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372,
+     4373,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     4373,    0,    0,    0,    0,    0, 4373, 4373, 4373, 4373,
+     4373, 4373, 4373, 4373,    0,    0,    0, 4373, 4373, 4373,
+
+     4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373, 4373,
+     4373, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
+     4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
+     4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
+     4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
+     4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375, 4375,
+     4375, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+     4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+     4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+     4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+
+     4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+     4376, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
+     4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
+     4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
+     4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
+     4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378, 4378,
+     4378, 4379,    0, 4379,    0,    0,    0,    0,    0, 4379,
+     4379, 4379, 4379,    0,    0,    0,    0,    0,    0,    0,
+     4379, 4379, 4379, 4379, 4379,    0, 4379,    0,    0,    0,
+        0,    0,    0, 4379, 4380, 4380, 4380, 4380, 4380, 4380,
+
+     4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
+     4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
+     4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
+     4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380, 4380,
+     4380, 4380, 4380, 4380, 4381, 4381, 4381, 4381, 4381, 4381,
+     4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381,
+     4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381,
+     4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381,
+     4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381, 4381,
+     4381, 4381, 4381, 4381, 4382, 4382, 4382, 4382, 4382, 4382,
+
+     4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382,
+     4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382,
+     4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382,
+     4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382, 4382,
+     4382, 4382, 4382, 4382, 4389, 4389, 4389, 4389, 4389, 4389,
+     4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389,
+     4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389,
+     4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389,
+     4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389, 4389,
+     4389, 4389, 4389, 4389, 4392, 4392, 4392, 4392, 4392, 4392,
+
+     4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392,
+     4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392,
+     4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392,
+     4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392, 4392,
+     4392, 4392, 4392, 4392, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393, 4393,
+     4393, 4393, 4393, 4393, 4394,    0, 4394,    0,    0,    0,
+
+        0,    0, 4394, 4394, 4394, 4394,    0,    0,    0,    0,
+        0,    0,    0, 4394, 4394, 4394, 4394, 4394,    0, 4394,
+        0,    0,    0,    0,    0,    0, 4394, 4395,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 4395,    0,    0,
+        0,    0,    0, 4395, 4395, 4395, 4395, 4395, 4395, 4395,
+     4395,    0,    0,    0, 4395, 4395, 4395, 4395, 4395, 4395,
+     4395, 4395, 4395, 4395, 4395, 4395, 4395, 4395, 4398, 4398,
+     4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398,
+     4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398,
+     4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398,
+
+     4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398,
+     4398, 4398, 4398, 4398, 4398, 4398, 4398, 4398, 4399, 4399,
+     4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399,
+     4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399,
+     4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399,
+     4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399,
+     4399, 4399, 4399, 4399, 4399, 4399, 4399, 4399, 4401, 4401,
+     4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401,
+     4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401,
+     4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401,
+
+     4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401,
+     4401, 4401, 4401, 4401, 4401, 4401, 4401, 4401, 4402,    0,
+     4402,    0,    0,    0,    0,    0, 4402, 4402, 4402, 4402,
+        0,    0,    0,    0,    0,    0,    0, 4402, 4402, 4402,
+     4402, 4402,    0, 4402,    0,    0,    0,    0,    0,    0,
+     4402, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403,
+     4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403,
+     4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403,
+     4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403,
+     4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403, 4403,
+
+     4403, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409,
+     4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409,
+     4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409,
+     4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409,
+     4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409, 4409,
+     4409, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+
+     4411, 4412,    0, 4412,    0,    0,    0,    0,    0, 4412,
+     4412, 4412, 4412,    0,    0,    0,    0,    0,    0,    0,
+     4412, 4412, 4412, 4412, 4412,    0, 4412,    0,    0,    0,
+        0,    0,    0, 4412, 4413,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4413,    0,    0,    0,    0,    0,
+     4413, 4413, 4413, 4413, 4413, 4413, 4413, 4413,    0,    0,
+        0, 4413, 4413, 4413, 4413, 4413, 4413, 4413, 4413, 4413,
+     4413, 4413, 4413, 4413, 4413, 4416, 4416, 4416, 4416, 4416,
+     4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416,
+     4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416,
+
+     4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416,
+     4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416, 4416,
+     4416, 4416, 4416, 4416, 4416, 4418, 4418, 4418, 4418, 4418,
+     4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418,
+     4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418,
+     4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418,
+     4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418, 4418,
+     4418, 4418, 4418, 4418, 4418, 4419,    0, 4419,    0,    0,
+        0,    0,    0, 4419, 4419, 4419, 4419,    0,    0,    0,
+        0,    0,    0,    0, 4419, 4419, 4419, 4419, 4419,    0,
+
+     4419,    0,    0,    0,    0,    0,    0, 4419, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426,
+     4426, 4426, 4426, 4426, 4426, 4426, 4426, 4426, 4427, 4427,
+     4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427,
+     4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427,
+     4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427,
+     4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427,
+
+     4427, 4427, 4427, 4427, 4427, 4427, 4427, 4427, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429,
+     4429, 4429, 4429, 4429, 4429, 4429, 4429, 4429, 4432,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 4432,    0,
+        0,    0,    0,    0, 4432, 4432, 4432, 4432, 4432, 4432,
+     4432, 4432,    0,    0,    0, 4432, 4432, 4432, 4432, 4432,
+     4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4432, 4433,
+
+        0, 4433,    0,    0,    0,    0,    0, 4433, 4433, 4433,
+     4433,    0,    0,    0,    0,    0,    0,    0, 4433, 4433,
+     4433, 4433, 4433,    0, 4433,    0,    0,    0,    0,    0,
+        0, 4433, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+     4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+
+     4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+     4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+     4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+     4436, 4436, 4439,    0, 4439,    0,    0,    0,    0,    0,
+     4439, 4439, 4439, 4439,    0,    0,    0,    0,    0,    0,
+        0, 4439, 4439, 4439, 4439, 4439,    0, 4439,    0,    0,
+        0,    0,    0,    0, 4439, 4445, 4445, 4445, 4445, 4445,
+     4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445,
+     4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445,
+     4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445,
+
+     4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445, 4445,
+     4445, 4445, 4445, 4445, 4445, 4446, 4446, 4446, 4446, 4446,
+     4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446,
+     4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446,
+     4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446,
+     4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446, 4446,
+     4446, 4446, 4446, 4446, 4446, 4447,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4447,    0,    0,    0,    0,
+        0, 4447, 4447, 4447, 4447, 4447, 4447, 4447, 4447,    0,
+        0,    0, 4447, 4447, 4447, 4447, 4447, 4447, 4447, 4447,
+
+     4447, 4447, 4447, 4447, 4447, 4447, 4448, 4448, 4448, 4448,
+     4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448,
+     4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448,
+     4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448,
+     4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448, 4448,
+     4448, 4448, 4448, 4448, 4448, 4448, 4449, 4449, 4449, 4449,
+     4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449,
+     4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449,
+     4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449,
+     4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449, 4449,
+
+     4449, 4449, 4449, 4449, 4449, 4449, 4451, 4451, 4451, 4451,
+     4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451,
+     4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451,
+     4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451,
+     4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451, 4451,
+     4451, 4451, 4451, 4451, 4451, 4451, 4452,    0, 4452,    0,
+        0,    0,    0,    0, 4452, 4452, 4452, 4452,    0,    0,
+        0,    0,    0,    0,    0, 4452, 4452, 4452, 4452, 4452,
+        0, 4452,    0,    0,    0,    0,    0,    0, 4452, 4455,
+     4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455,
+
+     4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455,
+     4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455,
+     4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455,
+     4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4455, 4456,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 4456,
+        0,    0,    0,    0,    0, 4456, 4456, 4456, 4456, 4456,
+     4456, 4456, 4456,    0,    0,    0, 4456, 4456, 4456, 4456,
+     4456, 4456, 4456, 4456, 4456, 4456, 4456, 4456, 4456, 4456,
+     4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
+     4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
+
+     4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
+     4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
+     4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457, 4457,
+     4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458,
+     4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458,
+     4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458,
+     4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458,
+     4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458, 4458,
+     4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460,
+     4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460,
+
+     4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460,
+     4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460,
+     4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460, 4460,
+     4461,    0, 4461,    0,    0,    0,    0,    0, 4461, 4461,
+     4461, 4461,    0,    0,    0,    0,    0,    0,    0, 4461,
+     4461, 4461, 4461, 4461,    0, 4461,    0,    0,    0,    0,
+        0,    0, 4461, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
+     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
+     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
+     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
+
+     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
+     4463, 4463, 4463, 4465, 4465, 4465, 4465, 4465, 4465, 4465,
+     4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465,
+     4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465,
+     4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465,
+     4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465, 4465,
+     4465, 4465, 4465, 4468, 4468, 4468, 4468, 4468, 4468, 4468,
+     4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468,
+     4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468,
+     4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468,
+
+     4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468,
+     4468, 4468, 4468, 4475, 4475, 4475, 4475, 4475, 4475, 4475,
+     4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475,
+     4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475,
+     4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475,
+     4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475, 4475,
+     4475, 4475, 4475, 4477, 4477, 4477, 4477, 4477, 4477, 4477,
+     4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477,
+     4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477,
+     4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477,
+
+     4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477, 4477,
+     4477, 4477, 4477, 4478, 4478, 4478, 4478, 4478, 4478, 4478,
+     4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478,
+     4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478,
+     4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478,
+     4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478, 4478,
+     4478, 4478, 4478, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+     4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+     4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+     4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+
+     4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479,
+     4479, 4479, 4479, 4482, 4482, 4482, 4482, 4482, 4482, 4482,
+     4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482,
+     4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482,
+     4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482,
+     4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482, 4482,
+     4482, 4482, 4482, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+     4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+     4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+     4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+
+     4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484, 4484,
+     4484, 4484, 4484, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486, 4486,
+     4486, 4486, 4486, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+
+     4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488, 4488,
+     4488, 4488, 4488, 4493, 4493, 4493, 4493, 4493, 4493, 4493,
+     4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493,
+     4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493,
+     4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493,
+     4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493, 4493,
+     4493, 4493, 4493, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
+     4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
+     4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
+     4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
+
+     4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496, 4496,
+     4496, 4496, 4496, 4497, 4497, 4497, 4497, 4497, 4497, 4497,
+     4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497,
+     4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497,
+     4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497,
+     4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497, 4497,
+     4497, 4497, 4497, 4499, 4499, 4499, 4499, 4499, 4499, 4499,
+     4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499,
+     4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499,
+     4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499,
+
+     4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499, 4499,
+     4499, 4499, 4499, 4500,    0, 4500,    0,    0,    0,    0,
+        0, 4500, 4500, 4500, 4500,    0,    0,    0,    0,    0,
+        0,    0, 4500, 4500, 4500, 4500, 4500,    0, 4500,    0,
+        0,    0,    0,    0,    0, 4500, 4501, 4501, 4501, 4501,
+     4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501,
+     4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501,
+     4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501,
+     4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501, 4501,
+     4501, 4501, 4501, 4501, 4501, 4501, 4502,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0, 4502,    0,    0,    0,
+        0,    0, 4502, 4502, 4502, 4502, 4502, 4502, 4502, 4502,
+        0,    0,    0, 4502, 4502, 4502, 4502, 4502, 4502, 4502,
+     4502, 4502, 4502, 4502, 4502, 4502, 4502, 4503,    0, 4503,
+        0,    0,    0,    0,    0, 4503, 4503, 4503, 4503,    0,
+        0,    0,    0,    0,    0,    0, 4503, 4503, 4503, 4503,
+     4503,    0, 4503,    0,    0,    0,    0,    0,    0, 4503,
+     4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506,
+     4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506,
+     4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506,
+
+     4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506,
+     4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506, 4506,
+     4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
+     4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
+     4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
+     4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
+     4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509, 4509,
+     4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510,
+     4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510,
+     4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510,
+
+     4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510,
+     4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510, 4510,
+     4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512,
+     4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512,
+     4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512,
+     4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512,
+     4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512, 4512,
+     4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
+     4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
+     4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
+
+     4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
+     4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514, 4514,
+     4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516,
+     4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516,
+     4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516,
+     4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516,
+     4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516, 4516,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518, 4518,
+     4519,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     4519,    0,    0,    0,    0,    0, 4519, 4519, 4519, 4519,
+     4519, 4519, 4519, 4519,    0,    0,    0, 4519, 4519, 4519,
+     4519, 4519, 4519, 4519, 4519, 4519, 4519, 4519, 4519, 4519,
+     4519, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
+     4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
+     4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
+     4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
+
+     4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520, 4520,
+     4520, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522,
+     4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522,
+     4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522,
+     4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522,
+     4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522, 4522,
+     4522, 4525,    0, 4525,    0,    0,    0,    0,    0, 4525,
+     4525, 4525, 4525,    0,    0,    0,    0,    0,    0,    0,
+     4525, 4525, 4525, 4525, 4525,    0, 4525,    0,    0,    0,
+        0,    0,    0, 4525, 4526, 4526, 4526, 4526, 4526, 4526,
+
+     4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526,
+     4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526,
+     4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526,
+     4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526, 4526,
+     4526, 4526, 4526, 4526, 4528, 4528, 4528, 4528, 4528, 4528,
+     4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528,
+     4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528,
+     4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528,
+     4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528, 4528,
+     4528, 4528, 4528, 4528, 4533, 4533, 4533, 4533, 4533, 4533,
+
+     4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533,
+     4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533,
+     4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533,
+     4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533, 4533,
+     4533, 4533, 4533, 4533, 4536, 4536, 4536, 4536, 4536, 4536,
+     4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536,
+     4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536,
+     4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536,
+     4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536, 4536,
+     4536, 4536, 4536, 4536, 4538, 4538, 4538, 4538, 4538, 4538,
+
+     4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538,
+     4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538,
+     4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538,
+     4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538, 4538,
+     4538, 4538, 4538, 4538, 4540, 4540, 4540, 4540, 4540, 4540,
+     4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540,
+     4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540,
+     4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540,
+     4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540, 4540,
+     4540, 4540, 4540, 4540, 4542, 4542, 4542, 4542, 4542, 4542,
+
+     4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542,
+     4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542,
+     4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542,
+     4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542, 4542,
+     4542, 4542, 4542, 4542, 4543,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4543,    0,    0,    0,    0,    0,
+     4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,    0,    0,
+        0, 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543, 4543,
+     4543, 4543, 4543, 4543, 4543, 4544, 4544, 4544, 4544, 4544,
+     4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544,
+
+     4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544,
+     4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544,
+     4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544, 4544,
+     4544, 4544, 4544, 4544, 4544, 4546, 4546, 4546, 4546, 4546,
+     4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546,
+     4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546,
+     4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546,
+     4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546, 4546,
+     4546, 4546, 4546, 4546, 4546, 4547,    0, 4547,    0,    0,
+        0,    0,    0, 4547, 4547, 4547, 4547,    0,    0,    0,
+
+        0,    0,    0,    0, 4547, 4547, 4547, 4547, 4547,    0,
+     4547,    0,    0,    0,    0,    0,    0, 4547, 4551, 4551,
+     4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551,
+     4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551,
+     4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551,
+     4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551,
+     4551, 4551, 4551, 4551, 4551, 4551, 4551, 4551, 4553, 4553,
+     4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553,
+     4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553,
+     4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553,
+
+     4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553,
+     4553, 4553, 4553, 4553, 4553, 4553, 4553, 4553, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558,
+     4558, 4558, 4558, 4558, 4558, 4558, 4558, 4558, 4564, 4564,
+     4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564,
+     4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564,
+     4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564,
+
+     4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564,
+     4564, 4564, 4564, 4564, 4564, 4564, 4564, 4564, 4566,    0,
+        0,    0,    0,    0,    0,    0, 4566,    0, 4566,    0,
+        0,    0,    0,    0, 4566, 4566, 4566, 4566, 4566, 4566,
+     4566, 4566,    0,    0,    0, 4566, 4566, 4566, 4566, 4566,
+     4566, 4566, 4566, 4566, 4566, 4566, 4566, 4566, 4566, 4567,
+        0, 4567,    0,    0,    0,    0,    0, 4567, 4567, 4567,
+     4567,    0,    0,    0,    0,    0,    0,    0, 4567, 4567,
+     4567, 4567, 4567,    0, 4567,    0,    0,    0,    0,    0,
+        0, 4567, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569,
+
+     4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569,
+     4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569,
+     4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569,
+     4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569, 4569,
+     4569, 4569, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570,
+     4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570,
+     4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570,
+     4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570,
+     4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570, 4570,
+     4570, 4570, 4572,    0, 4572,    0,    0,    0,    0,    0,
+
+     4572, 4572, 4572, 4572,    0,    0,    0,    0,    0,    0,
+        0, 4572, 4572, 4572, 4572, 4572,    0, 4572,    0,    0,
+        0,    0,    0,    0, 4572, 4573, 4573, 4573, 4573, 4573,
+     4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573,
+     4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573,
+     4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573,
+     4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573, 4573,
+     4573, 4573, 4573, 4573, 4573, 4576, 4576, 4576, 4576, 4576,
+     4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576,
+     4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576,
+
+     4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576,
+     4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576, 4576,
+     4576, 4576, 4576, 4576, 4576, 4578, 4578, 4578, 4578, 4578,
+     4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
+     4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
+     4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
+     4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578, 4578,
+     4578, 4578, 4578, 4578, 4578, 4579, 4579, 4579, 4579, 4579,
+     4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
+     4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
+
+     4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
+     4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579, 4579,
+     4579, 4579, 4579, 4579, 4579, 4580,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4580,    0,    0,    0,    0,
+        0, 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,    0,
+        0,    0, 4580, 4580, 4580, 4580, 4580, 4580, 4580, 4580,
+     4580, 4580, 4580, 4580, 4580, 4580, 4582, 4582, 4582, 4582,
+     4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582,
+     4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582,
+     4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582,
+
+     4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582, 4582,
+     4582, 4582, 4582, 4582, 4582, 4582, 4583, 4583, 4583, 4583,
+     4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583,
+     4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583,
+     4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583,
+     4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583, 4583,
+     4583, 4583, 4583, 4583, 4583, 4583, 4585, 4585, 4585, 4585,
+     4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585,
+     4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585,
+     4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585,
+
+     4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585, 4585,
+     4585, 4585, 4585, 4585, 4585, 4585, 4586,    0, 4586,    0,
+        0,    0,    0,    0, 4586, 4586, 4586, 4586,    0,    0,
+        0,    0,    0,    0,    0, 4586, 4586, 4586, 4586, 4586,
+        0, 4586,    0,    0,    0,    0,    0,    0, 4586, 4587,
+     4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587,
+     4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587,
+     4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587,
+     4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587,
+     4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4587, 4588,
+
+     4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588,
+     4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588,
+     4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588,
+     4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588,
+     4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4588, 4591,
+        0, 4591,    0,    0,    0,    0,    0, 4591, 4591, 4591,
+     4591,    0,    0,    0,    0,    0,    0,    0, 4591, 4591,
+     4591, 4591, 4591,    0, 4591,    0,    0,    0,    0,    0,
+        0, 4591, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593,
+     4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593,
+
+     4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593,
+     4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593,
+     4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593, 4593,
+     4593, 4593, 4595,    0, 4595, 4595, 4595,    0,    0,    0,
+        0,    0, 4595, 4595, 4595, 4595,    0,    0,    0,    0,
+        0,    0,    0, 4595, 4595, 4595, 4595, 4595,    0, 4595,
+        0,    0,    0,    0,    0,    0, 4595, 4600, 4600, 4600,
+     4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600,
+     4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600,
+     4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600,
+
+     4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600, 4600,
+     4600, 4600, 4600, 4600, 4600, 4600, 4600, 4605, 4605, 4605,
+     4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605,
+     4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605,
+     4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605,
+     4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605, 4605,
+     4605, 4605, 4605, 4605, 4605, 4605, 4605, 4607,    0,    0,
+        0,    0,    0,    0,    0, 4607,    0, 4607,    0,    0,
+        0,    0,    0, 4607, 4607, 4607, 4607, 4607, 4607, 4607,
+     4607,    0,    0,    0, 4607, 4607, 4607, 4607, 4607, 4607,
+
+     4607, 4607, 4607, 4607, 4607, 4607, 4607, 4607, 4609, 4609,
+     4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609,
+     4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609,
+     4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609,
+     4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609,
+     4609, 4609, 4609, 4609, 4609, 4609, 4609, 4609, 4610,    0,
+     4610,    0,    0,    0,    0,    0, 4610, 4610, 4610, 4610,
+        0,    0,    0,    0,    0,    0,    0, 4610, 4610, 4610,
+     4610, 4610,    0, 4610,    0,    0,    0,    0,    0,    0,
+     4610, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611,
+
+     4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611,
+     4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611,
+     4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611,
+     4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611,
+     4611, 4613,    0, 4613,    0,    0,    0,    0,    0, 4613,
+     4613, 4613, 4613,    0,    0,    0,    0,    0,    0,    0,
+     4613, 4613, 4613, 4613, 4613,    0, 4613,    0,    0,    0,
+        0,    0,    0, 4613, 4618, 4618, 4618, 4618, 4618, 4618,
+     4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618,
+     4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618,
+
+     4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618,
+     4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618, 4618,
+     4618, 4618, 4618, 4618, 4621, 4621, 4621, 4621, 4621, 4621,
+     4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621,
+     4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621,
+     4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621,
+     4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621, 4621,
+     4621, 4621, 4621, 4621, 4623, 4623, 4623, 4623, 4623, 4623,
+     4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623,
+     4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623,
+
+     4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623,
+     4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623, 4623,
+     4623, 4623, 4623, 4623, 4629, 4629, 4629, 4629, 4629, 4629,
+     4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629,
+     4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629,
+     4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629,
+     4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629, 4629,
+     4629, 4629, 4629, 4629, 4630, 4630, 4630, 4630, 4630, 4630,
+     4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630,
+     4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630,
+
+     4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630,
+     4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630, 4630,
+     4630, 4630, 4630, 4630, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631, 4631,
+     4631, 4631, 4631, 4631, 4633,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4633,    0,    0,    0,    0,    0,
+     4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,    0,    0,
+
+        0, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633, 4633,
+     4633, 4633, 4633, 4633, 4633, 4637, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637, 4637,
+     4637, 4637, 4637, 4637, 4637, 4644, 4644, 4644, 4644, 4644,
+     4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644,
+     4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644,
+     4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644,
+
+     4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644, 4644,
+     4644, 4644, 4644, 4644, 4644, 4646,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4646,    0,    0,    0,    0,
+        0, 4646, 4646, 4646, 4646, 4646, 4646, 4646, 4646,    0,
+        0,    0, 4646, 4646, 4646, 4646, 4646, 4646, 4646, 4646,
+     4646, 4646, 4646, 4646, 4646, 4646, 4649, 4649, 4649, 4649,
+     4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
+     4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
+     4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
+     4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649, 4649,
+
+     4649, 4649, 4649, 4649, 4649, 4649, 4652, 4652, 4652, 4652,
+     4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652,
+     4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652,
+     4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652,
+     4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652, 4652,
+     4652, 4652, 4652, 4652, 4652, 4652, 4654, 4654, 4654, 4654,
+     4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654,
+     4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654,
+     4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654,
+     4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654, 4654,
+
+     4654, 4654, 4654, 4654, 4654, 4654, 4656, 4656, 4656, 4656,
+     4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656,
+     4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656,
+     4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656,
+     4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656,
+     4656, 4656, 4656, 4656, 4656, 4656, 4658, 4658, 4658, 4658,
+     4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658,
+     4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658,
+     4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658,
+     4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658, 4658,
+
+     4658, 4658, 4658, 4658, 4658, 4658, 4659, 4659, 4659, 4659,
+     4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659,
+     4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659,
+     4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659,
+     4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659, 4659,
+     4659, 4659, 4659, 4659, 4659, 4659, 4660,    0,    0,    0,
+        0,    0,    0,    0,    0,    0, 4660,    0,    0,    0,
+        0,    0, 4660, 4660, 4660, 4660, 4660, 4660, 4660, 4660,
+        0,    0,    0, 4660, 4660, 4660, 4660, 4660, 4660, 4660,
+     4660, 4660, 4660, 4660, 4660, 4660, 4660, 4662, 4662, 4662,
+
+     4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662,
+     4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662,
+     4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662,
+     4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662, 4662,
+     4662, 4662, 4662, 4662, 4662, 4662, 4662, 4663, 4663, 4663,
+     4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
+     4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
+     4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
+     4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663, 4663,
+     4663, 4663, 4663, 4663, 4663, 4663, 4663, 4665,    0, 4665,
+
+        0,    0,    0,    0,    0, 4665, 4665, 4665, 4665,    0,
+        0,    0,    0,    0,    0,    0, 4665, 4665, 4665, 4665,
+     4665,    0, 4665,    0,    0,    0,    0,    0,    0, 4665,
+     4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
+     4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
+     4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
+     4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
+     4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666, 4666,
+     4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667,
+     4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667,
+
+     4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667,
+     4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667,
+     4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667, 4667,
+     4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669,
+     4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669,
+     4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669,
+     4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669,
+     4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669, 4669,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671, 4671,
+     4672,    0, 4672,    0,    0,    0,    0,    0, 4672, 4672,
+     4672, 4672,    0,    0,    0,    0,    0,    0,    0, 4672,
+     4672, 4672, 4672, 4672,    0, 4672,    0,    0,    0,    0,
+        0,    0, 4672, 4673, 4673, 4673, 4673, 4673, 4673, 4673,
+     4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673,
+     4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673,
+     4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673,
+
+     4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673, 4673,
+     4673, 4673, 4673, 4675,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4675,    0,    0,    0,    0,    0, 4675,
+     4675, 4675, 4675, 4675, 4675, 4675, 4675,    0,    0,    0,
+     4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675, 4675,
+     4675, 4675, 4675, 4675, 4678, 4678, 4678, 4678, 4678, 4678,
+     4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
+     4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
+     4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
+     4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678, 4678,
+
+     4678, 4678, 4678, 4678, 4679, 4679, 4679, 4679, 4679, 4679,
+     4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679,
+     4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679,
+     4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679,
+     4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679, 4679,
+     4679, 4679, 4679, 4679, 4681, 4681, 4681, 4681, 4681, 4681,
+     4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681,
+     4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681,
+     4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681,
+     4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681, 4681,
+
+     4681, 4681, 4681, 4681, 4682,    0, 4682,    0,    0,    0,
+        0,    0, 4682, 4682, 4682, 4682,    0,    0,    0,    0,
+        0,    0,    0, 4682, 4682, 4682, 4682, 4682,    0, 4682,
+        0,    0,    0,    0,    0,    0, 4682, 4683, 4683, 4683,
+     4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683,
+     4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683,
+     4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683,
+     4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683, 4683,
+     4683, 4683, 4683, 4683, 4683, 4683, 4683, 4688,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 4688,    0,    0,
+
+        0,    0,    0, 4688, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688,    0,    0,    0, 4688, 4688, 4688, 4688, 4688, 4688,
+     4688, 4688, 4688, 4688, 4688, 4688, 4688, 4688, 4689, 4689,
+     4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689,
+     4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689,
+     4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689,
+     4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689,
+     4689, 4689, 4689, 4689, 4689, 4689, 4689, 4689, 4692,    0,
+     4692,    0,    0,    0,    0,    0, 4692, 4692, 4692, 4692,
+        0,    0,    0,    0,    0,    0,    0, 4692, 4692, 4692,
+
+     4692, 4692,    0, 4692,    0,    0,    0,    0,    0,    0,
+     4692, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693, 4693,
+     4693, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694,
+     4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694,
+     4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694,
+     4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694,
+
+     4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694, 4694,
+     4694, 4695,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 4695,    0,    0,    0,    0,    0, 4695, 4695, 4695,
+     4695, 4695, 4695, 4695, 4695,    0,    0,    0, 4695, 4695,
+     4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695, 4695,
+     4695, 4695, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696,
+     4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696,
+     4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696,
+     4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696,
+     4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696, 4696,
+
+     4696, 4696, 4697,    0, 4697,    0,    0,    0,    0,    0,
+     4697, 4697, 4697, 4697,    0,    0,    0,    0,    0,    0,
+        0, 4697, 4697, 4697, 4697, 4697,    0, 4697,    0,    0,
+        0,    0,    0,    0, 4697, 4698, 4698, 4698, 4698, 4698,
+     4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698,
+     4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698,
+     4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698,
+     4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698, 4698,
+     4698, 4698, 4698, 4698, 4698, 4699, 4699, 4699, 4699, 4699,
+     4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699,
+
+     4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699,
+     4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699,
+     4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699, 4699,
+     4699, 4699, 4699, 4699, 4699, 4701, 4701, 4701, 4701, 4701,
+     4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701,
+     4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701,
+     4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701,
+     4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701, 4701,
+     4701, 4701, 4701, 4701, 4701, 4703, 4703, 4703, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703,
+
+     4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703, 4703,
+     4703, 4703, 4703, 4703, 4703, 4704, 4704, 4704, 4704, 4704,
+     4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704,
+     4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704,
+     4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704,
+     4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704, 4704,
+     4704, 4704, 4704, 4704, 4704, 4705,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4705,    0,    0,    0,    0,
+
+        0, 4705, 4705, 4705, 4705, 4705, 4705, 4705, 4705,    0,
+        0,    0, 4705, 4705, 4705, 4705, 4705, 4705, 4705, 4705,
+     4705, 4705, 4705, 4705, 4705, 4705, 4706, 4706, 4706, 4706,
+     4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706,
+     4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706,
+     4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706,
+     4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706, 4706,
+     4706, 4706, 4706, 4706, 4706, 4706, 4707,    0, 4707,    0,
+        0,    0,    0,    0, 4707, 4707, 4707, 4707,    0,    0,
+        0,    0,    0,    0,    0, 4707, 4707, 4707, 4707, 4707,
+
+        0, 4707,    0,    0,    0,    0,    0,    0, 4707, 4710,
+     4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710,
+     4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710,
+     4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710,
+     4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710,
+     4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4710, 4714,
+     4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
+     4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
+     4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
+     4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714,
+
+     4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4714, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715,
+     4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4715, 4716,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 4716,
+        0,    0,    0,    0,    0, 4716, 4716, 4716, 4716, 4716,
+     4716, 4716, 4716,    0,    0,    0, 4716, 4716, 4716, 4716,
+     4716, 4716, 4716, 4716, 4716, 4716, 4716, 4716, 4716, 4716,
+
+     4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717,
+     4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717,
+     4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717,
+     4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717,
+     4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717, 4717,
+     4720,    0, 4720,    0,    0,    0,    0,    0, 4720, 4720,
+     4720, 4720,    0,    0,    0,    0,    0,    0,    0, 4720,
+     4720, 4720, 4720, 4720,    0, 4720,    0,    0,    0,    0,
+        0,    0, 4720, 4721, 4721, 4721, 4721, 4721, 4721, 4721,
+     4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721,
+
+     4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721,
+     4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721,
+     4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721, 4721,
+     4721, 4721, 4721, 4726, 4726, 4726, 4726, 4726, 4726, 4726,
+     4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726,
+     4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726,
+     4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726,
+     4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726, 4726,
+     4726, 4726, 4726, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
+     4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
+
+     4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
+     4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
+     4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730, 4730,
+     4730, 4730, 4730, 4731, 4731, 4731, 4731, 4731, 4731, 4731,
+     4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731,
+     4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731,
+     4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731,
+     4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731, 4731,
+     4731, 4731, 4731, 4733, 4733, 4733, 4733, 4733, 4733, 4733,
+     4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733,
+
+     4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733,
+     4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733,
+     4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733, 4733,
+     4733, 4733, 4733, 4735, 4735, 4735, 4735, 4735, 4735, 4735,
+     4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735,
+     4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735,
+     4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735,
+     4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735, 4735,
+     4735, 4735, 4735, 4737, 4737, 4737, 4737, 4737, 4737, 4737,
+     4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737,
+
+     4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737,
+     4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737,
+     4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737, 4737,
+     4737, 4737, 4737, 4739,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4739,    0,    0,    0,    0,    0, 4739,
+     4739, 4739, 4739, 4739, 4739, 4739, 4739,    0,    0,    0,
+     4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739, 4739,
+     4739, 4739, 4739, 4739, 4740, 4740, 4740, 4740, 4740, 4740,
+     4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740,
+     4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740,
+
+     4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740,
+     4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740, 4740,
+     4740, 4740, 4740, 4740, 4741, 4741, 4741, 4741, 4741, 4741,
+     4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741,
+     4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741,
+     4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741,
+     4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741, 4741,
+     4741, 4741, 4741, 4741, 4743, 4743, 4743, 4743, 4743, 4743,
+     4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743,
+     4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743,
+
+     4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743,
+     4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743, 4743,
+     4743, 4743, 4743, 4743, 4744,    0, 4744,    0,    0,    0,
+        0,    0, 4744, 4744, 4744, 4744,    0,    0,    0,    0,
+        0,    0,    0, 4744, 4744, 4744, 4744, 4744,    0, 4744,
+        0,    0,    0,    0,    0,    0, 4744, 4751, 4751, 4751,
+     4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751,
+     4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751,
+     4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751,
+     4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751, 4751,
+
+     4751, 4751, 4751, 4751, 4751, 4751, 4751, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754, 4754,
+     4754, 4754, 4754, 4754, 4754, 4754, 4754, 4761, 4761, 4761,
+     4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761,
+     4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761,
+     4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761,
+     4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761, 4761,
+
+     4761, 4761, 4761, 4761, 4761, 4761, 4761, 4764, 4764, 4764,
+     4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764,
+     4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764,
+     4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764,
+     4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764, 4764,
+     4764, 4764, 4764, 4764, 4764, 4764, 4764, 4766, 4766, 4766,
+     4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
+     4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
+     4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
+     4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766, 4766,
+
+     4766, 4766, 4766, 4766, 4766, 4766, 4766, 4768,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 4768,    0,    0,
+        0,    0,    0, 4768, 4768, 4768, 4768, 4768, 4768, 4768,
+     4768,    0,    0,    0, 4768, 4768, 4768, 4768, 4768, 4768,
+     4768, 4768, 4768, 4768, 4768, 4768, 4768, 4768, 4772, 4772,
+     4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772,
+     4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772,
+     4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772,
+     4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772,
+     4772, 4772, 4772, 4772, 4772, 4772, 4772, 4772, 4773, 4773,
+
+     4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773,
+     4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773,
+     4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773,
+     4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773,
+     4773, 4773, 4773, 4773, 4773, 4773, 4773, 4773, 4774, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774,
+     4774, 4774, 4774, 4774, 4774, 4774, 4774, 4774, 4775, 4775,
+
+     4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775,
+     4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775,
+     4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775,
+     4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775,
+     4775, 4775, 4775, 4775, 4775, 4775, 4775, 4775, 4776,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 4776,    0,
+        0,    0,    0,    0, 4776, 4776, 4776, 4776, 4776, 4776,
+     4776, 4776,    0,    0,    0, 4776, 4776, 4776, 4776, 4776,
+     4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4776, 4777,
+     4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777,
+
+     4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777,
+     4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777,
+     4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777,
+     4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4777, 4778,
+        0, 4778,    0,    0,    0,    0,    0, 4778, 4778, 4778,
+     4778,    0,    0,    0,    0,    0,    0,    0, 4778, 4778,
+     4778, 4778, 4778,    0, 4778,    0,    0,    0,    0,    0,
+        0, 4778, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779,
+     4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779,
+     4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779,
+
+     4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779,
+     4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779, 4779,
+     4779, 4779, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780, 4780,
+     4780, 4780, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781,
+     4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781,
+     4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781,
+
+     4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781,
+     4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781, 4781,
+     4781, 4781, 4782,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 4782,    0,    0,    0,    0,    0, 4782, 4782,
+     4782, 4782, 4782, 4782, 4782, 4782,    0,    0,    0, 4782,
+     4782, 4782, 4782, 4782, 4782, 4782, 4782, 4782, 4782, 4782,
+     4782, 4782, 4782, 4784,    0, 4784,    0,    0,    0,    0,
+        0, 4784, 4784, 4784, 4784,    0,    0,    0,    0,    0,
+        0,    0, 4784, 4784, 4784, 4784, 4784,    0, 4784,    0,
+        0,    0,    0,    0,    0, 4784, 4785, 4785, 4785, 4785,
+
+     4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785, 4785,
+     4785, 4785, 4785, 4785, 4785, 4785, 4786, 4786, 4786, 4786,
+     4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786,
+     4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786,
+     4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786,
+     4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786, 4786,
+     4786, 4786, 4786, 4786, 4786, 4786, 4787,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0, 4787,    0,    0,    0,
+        0,    0, 4787, 4787, 4787, 4787, 4787, 4787, 4787, 4787,
+        0,    0,    0, 4787, 4787, 4787, 4787, 4787, 4787, 4787,
+     4787, 4787, 4787, 4787, 4787, 4787, 4787, 4788, 4788, 4788,
+     4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788,
+     4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788,
+     4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788,
+     4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788, 4788,
+     4788, 4788, 4788, 4788, 4788, 4788, 4788, 4789,    0, 4789,
+        0,    0,    0,    0,    0, 4789, 4789, 4789, 4789,    0,
+
+        0,    0,    0,    0,    0,    0, 4789, 4789, 4789, 4789,
+     4789,    0, 4789,    0,    0,    0,    0,    0,    0, 4789,
+     4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790,
+     4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790,
+     4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790,
+     4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790,
+     4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790, 4790,
+     4794,    0,    0,    0,    0,    0,    0,    0, 4794,    0,
+     4794,    0,    0,    0,    0,    0, 4794, 4794, 4794, 4794,
+     4794, 4794, 4794, 4794,    0,    0,    0, 4794, 4794, 4794,
+
+     4794, 4794, 4794, 4794, 4794, 4794, 4794, 4794, 4794, 4794,
+     4794, 4795,    0, 4795,    0,    0,    0,    0,    0, 4795,
+     4795, 4795, 4795,    0,    0,    0,    0,    0,    0,    0,
+     4795, 4795, 4795, 4795, 4795,    0, 4795,    0,    0,    0,
+        0,    0,    0, 4795, 4797, 4797, 4797, 4797, 4797, 4797,
+     4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797,
+     4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797,
+     4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797,
+     4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797, 4797,
+     4797, 4797, 4797, 4797, 4798, 4798, 4798, 4798, 4798, 4798,
+
+     4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798,
+     4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798,
+     4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798,
+     4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798, 4798,
+     4798, 4798, 4798, 4798, 4800,    0, 4800,    0,    0,    0,
+        0,    0, 4800, 4800, 4800, 4800,    0,    0,    0,    0,
+        0,    0,    0, 4800, 4800, 4800, 4800, 4800,    0, 4800,
+        0,    0,    0,    0,    0,    0, 4800, 4801, 4801, 4801,
+     4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801,
+     4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801,
+
+     4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801,
+     4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801, 4801,
+     4801, 4801, 4801, 4801, 4801, 4801, 4801, 4803,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 4803,    0,    0,
+        0,    0,    0, 4803, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803,    0,    0,    0, 4803, 4803, 4803, 4803, 4803, 4803,
+     4803, 4803, 4803, 4803, 4803, 4803, 4803, 4803, 4804,    0,
+     4804,    0,    0,    0,    0,    0, 4804, 4804, 4804, 4804,
+        0,    0,    0,    0,    0,    0,    0, 4804, 4804, 4804,
+     4804, 4804,    0, 4804,    0,    0,    0,    0,    0,    0,
+
+     4804, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805,
+     4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805,
+     4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805,
+     4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805,
+     4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805,
+     4805, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807,
+     4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807,
+     4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807,
+     4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807,
+     4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807, 4807,
+
+     4807, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809,
+     4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809,
+     4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809,
+     4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809,
+     4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809, 4809,
+     4809, 4810,    0, 4810,    0,    0,    0,    0,    0, 4810,
+     4810, 4810, 4810,    0,    0,    0,    0,    0,    0,    0,
+     4810, 4810, 4810, 4810, 4810,    0, 4810,    0,    0,    0,
+        0,    0,    0, 4810, 4816, 4816, 4816, 4816, 4816, 4816,
+     4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816,
+
+     4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816,
+     4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816,
+     4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816, 4816,
+     4816, 4816, 4816, 4816, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818, 4818,
+     4818, 4818, 4818, 4818, 4820, 4820, 4820, 4820, 4820, 4820,
+     4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820,
+
+     4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820,
+     4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820,
+     4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820, 4820,
+     4820, 4820, 4820, 4820, 4821,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4821,    0,    0,    0,    0,    0,
+     4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821,    0,    0,
+        0, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821,
+     4821, 4821, 4821, 4821, 4821, 4823,    0, 4823,    0,    0,
+        0,    0,    0, 4823, 4823, 4823, 4823,    0,    0,    0,
+        0,    0,    0,    0, 4823, 4823, 4823, 4823, 4823,    0,
+
+     4823,    0,    0,    0,    0,    0,    0, 4823, 4824, 4824,
+     4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824,
+     4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824,
+     4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824,
+     4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824,
+     4824, 4824, 4824, 4824, 4824, 4824, 4824, 4824, 4825, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825,
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825,
+
+     4825, 4825, 4825, 4825, 4825, 4825, 4825, 4825, 4826, 4826,
+     4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826,
+     4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826,
+     4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826,
+     4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826,
+     4826, 4826, 4826, 4826, 4826, 4826, 4826, 4826, 4827,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 4827,    0,
+        0,    0,    0,    0, 4827, 4827, 4827, 4827, 4827, 4827,
+     4827, 4827,    0,    0,    0, 4827, 4827, 4827, 4827, 4827,
+     4827, 4827, 4827, 4827, 4827, 4827, 4827, 4827, 4827, 4828,
+
+     4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828,
+     4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828,
+     4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828,
+     4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828,
+     4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4828, 4829,
+        0, 4829,    0,    0,    0,    0,    0, 4829, 4829, 4829,
+     4829,    0,    0,    0,    0,    0,    0,    0, 4829, 4829,
+     4829, 4829, 4829,    0, 4829,    0,    0,    0,    0,    0,
+        0, 4829, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834,
+     4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834,
+
+     4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834,
+     4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834,
+     4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834, 4834,
+     4834, 4834, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837, 4837,
+     4837, 4837, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838, 4838,
+     4838, 4838, 4839,    0, 4839,    0,    0,    0,    0,    0,
+     4839, 4839, 4839, 4839,    0,    0,    0,    0,    0,    0,
+        0, 4839, 4839, 4839, 4839, 4839,    0, 4839,    0,    0,
+        0,    0,    0,    0, 4839, 4840,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 4840,    0,    0,    0,    0,
+        0, 4840, 4840, 4840, 4840, 4840, 4840, 4840, 4840,    0,
+        0,    0, 4840, 4840, 4840, 4840, 4840, 4840, 4840, 4840,
+
+     4840, 4840, 4840, 4840, 4840, 4840, 4843, 4843, 4843, 4843,
+     4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843,
+     4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843,
+     4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843,
+     4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843, 4843,
+     4843, 4843, 4843, 4843, 4843, 4843, 4845, 4845, 4845, 4845,
+     4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845,
+     4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845,
+     4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845,
+     4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845, 4845,
+
+     4845, 4845, 4845, 4845, 4845, 4845, 4846,    0, 4846,    0,
+        0,    0,    0,    0, 4846, 4846, 4846, 4846,    0,    0,
+        0,    0,    0,    0,    0, 4846, 4846, 4846, 4846, 4846,
+        0, 4846,    0,    0,    0,    0,    0,    0, 4846, 4850,
+     4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850,
+     4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850,
+     4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850,
+     4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850,
+     4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4850, 4856,
+     4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856,
+
+     4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856,
+     4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856,
+     4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856,
+     4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4856, 4858,
+     4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858,
+     4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858,
+     4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858,
+     4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858,
+     4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4858, 4860,
+     4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860,
+
+     4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860,
+     4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860,
+     4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860,
+     4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4860, 4861,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 4861,
+        0,    0,    0,    0,    0, 4861, 4861, 4861, 4861, 4861,
+     4861, 4861, 4861,    0,    0,    0, 4861, 4861, 4861, 4861,
+     4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861, 4861,
+     4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863,
+     4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863,
+
+     4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863,
+     4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863,
+     4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863, 4863,
+     4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864,
+     4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864,
+     4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864,
+     4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864,
+     4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864, 4864,
+     4866,    0, 4866,    0,    0,    0,    0,    0, 4866, 4866,
+     4866, 4866,    0,    0,    0,    0,    0,    0,    0, 4866,
+
+     4866, 4866, 4866, 4866,    0, 4866,    0,    0,    0,    0,
+        0,    0, 4866, 4867, 4867, 4867, 4867, 4867, 4867, 4867,
+     4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867,
+     4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867,
+     4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867,
+     4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867, 4867,
+     4867, 4867, 4867, 4868, 4868, 4868, 4868, 4868, 4868, 4868,
+     4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868,
+     4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868,
+     4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868,
+
+     4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868,
+     4868, 4868, 4868, 4870, 4870, 4870, 4870, 4870, 4870, 4870,
+     4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870,
+     4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870,
+     4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870,
+     4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870, 4870,
+     4870, 4870, 4870, 4876, 4876, 4876, 4876, 4876, 4876, 4876,
+     4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876,
+     4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876,
+     4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876,
+
+     4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876, 4876,
+     4876, 4876, 4876, 4879, 4879, 4879, 4879, 4879, 4879, 4879,
+     4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879,
+     4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879,
+     4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879,
+     4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879, 4879,
+     4879, 4879, 4879, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+     4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+     4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+     4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+
+     4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881, 4881,
+     4881, 4881, 4881, 4888, 4888, 4888, 4888, 4888, 4888, 4888,
+     4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888,
+     4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888,
+     4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888,
+     4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888, 4888,
+     4888, 4888, 4888, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+
+     4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890, 4890,
+     4890, 4890, 4890, 4891, 4891, 4891, 4891, 4891, 4891, 4891,
+     4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891,
+     4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891,
+     4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891,
+     4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891, 4891,
+     4891, 4891, 4891, 4892,    0,    0,    0,    0,    0,    0,
+        0,    0,    0, 4892,    0,    0,    0,    0,    0, 4892,
+     4892, 4892, 4892, 4892, 4892, 4892, 4892,    0,    0,    0,
+     4892, 4892, 4892, 4892, 4892, 4892, 4892, 4892, 4892, 4892,
+
+     4892, 4892, 4892, 4892, 4893, 4893, 4893, 4893, 4893, 4893,
+     4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893,
+     4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893,
+     4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893,
+     4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893, 4893,
+     4893, 4893, 4893, 4893, 4894,    0, 4894,    0,    0,    0,
+        0,    0, 4894, 4894, 4894, 4894,    0,    0,    0,    0,
+        0,    0,    0, 4894, 4894, 4894, 4894, 4894,    0, 4894,
+        0,    0,    0,    0,    0,    0, 4894, 4895, 4895, 4895,
+     4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895,
+
+     4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895,
+     4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895,
+     4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895, 4895,
+     4895, 4895, 4895, 4895, 4895, 4895, 4895, 4897, 4897, 4897,
+     4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897,
+     4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897,
+     4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897,
+     4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897, 4897,
+     4897, 4897, 4897, 4897, 4897, 4897, 4897, 4899, 4899, 4899,
+     4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899,
+
+     4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899,
+     4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899,
+     4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899, 4899,
+     4899, 4899, 4899, 4899, 4899, 4899, 4899, 4900, 4900, 4900,
+     4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900,
+     4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900,
+     4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900,
+     4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900, 4900,
+     4900, 4900, 4900, 4900, 4900, 4900, 4900, 4901, 4901, 4901,
+     4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901,
+
+     4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901,
+     4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901,
+     4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901, 4901,
+     4901, 4901, 4901, 4901, 4901, 4901, 4901, 4903, 4903, 4903,
+     4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903,
+     4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903,
+     4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903,
+     4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903, 4903,
+     4903, 4903, 4903, 4903, 4903, 4903, 4903, 4904,    0, 4904,
+        0,    0,    0,    0,    0, 4904, 4904, 4904, 4904,    0,
+
+        0,    0,    0,    0,    0,    0, 4904, 4904, 4904, 4904,
+     4904,    0, 4904,    0,    0,    0,    0,    0,    0, 4904,
+     4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905,
+     4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905,
+     4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905,
+     4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905,
+     4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905, 4905,
+     4906,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     4906,    0,    0,    0,    0,    0, 4906, 4906, 4906, 4906,
+     4906, 4906, 4906, 4906,    0,    0,    0, 4906, 4906, 4906,
+
+     4906, 4906, 4906, 4906, 4906, 4906, 4906, 4906, 4906, 4906,
+     4906, 4907,    0, 4907,    0,    0,    0,    0,    0, 4907,
+     4907, 4907, 4907,    0,    0,    0,    0,    0,    0,    0,
+     4907, 4907, 4907, 4907, 4907,    0, 4907,    0,    0,    0,
+        0,    0,    0, 4907, 4912, 4912, 4912, 4912, 4912, 4912,
+     4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912,
+     4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912,
+     4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912,
+     4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912, 4912,
+     4912, 4912, 4912, 4912, 4914, 4914, 4914, 4914, 4914, 4914,
+
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914, 4914,
+     4914, 4914, 4914, 4914, 4915,    0, 4915,    0,    0,    0,
+        0,    0, 4915, 4915, 4915, 4915,    0,    0,    0,    0,
+        0,    0,    0, 4915, 4915, 4915, 4915, 4915,    0, 4915,
+        0,    0,    0,    0,    0,    0, 4915, 4916,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 4916,    0,    0,
+        0,    0,    0, 4916, 4916, 4916, 4916, 4916, 4916, 4916,
+
+     4916,    0,    0,    0, 4916, 4916, 4916, 4916, 4916, 4916,
+     4916, 4916, 4916, 4916, 4916, 4916, 4916, 4916, 4919, 4919,
+     4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919,
+     4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919,
+     4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919,
+     4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919,
+     4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4920, 4920,
+     4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920,
+     4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920,
+     4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920,
+
+     4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920,
+     4920, 4920, 4920, 4920, 4920, 4920, 4920, 4920, 4922, 4922,
+     4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922,
+     4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922,
+     4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922,
+     4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922,
+     4922, 4922, 4922, 4922, 4922, 4922, 4922, 4922, 4923,    0,
+     4923,    0,    0,    0,    0,    0, 4923, 4923, 4923, 4923,
+        0,    0,    0,    0,    0,    0,    0, 4923, 4923, 4923,
+     4923, 4923,    0, 4923,    0,    0,    0,    0,    0,    0,
+
+     4923, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929,
+     4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929,
+     4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929,
+     4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929,
+     4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929, 4929,
+     4929, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932,
+     4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932,
+     4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932,
+     4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932,
+     4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932, 4932,
+
+     4932, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934, 4934,
+     4934, 4935,    0, 4935,    0,    0,    0,    0,    0, 4935,
+     4935, 4935, 4935,    0,    0,    0,    0,    0,    0,    0,
+     4935, 4935, 4935, 4935, 4935,    0, 4935,    0,    0,    0,
+        0,    0,    0, 4935, 4937,    0,    0,    0,    0,    0,
+        0,    0,    0,    0, 4937,    0,    0,    0,    0,    0,
+
+     4937, 4937, 4937, 4937, 4937, 4937, 4937, 4937,    0,    0,
+        0, 4937, 4937, 4937, 4937, 4937, 4937, 4937, 4937, 4937,
+     4937, 4937, 4937, 4937, 4937, 4940, 4940, 4940, 4940, 4940,
+     4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940,
+     4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940,
+     4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940,
+     4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940, 4940,
+     4940, 4940, 4940, 4940, 4940, 4942,    0, 4942,    0,    0,
+        0,    0,    0, 4942, 4942, 4942, 4942,    0,    0,    0,
+        0,    0,    0,    0, 4942, 4942, 4942, 4942, 4942,    0,
+
+     4942,    0,    0,    0,    0,    0,    0, 4942, 4946, 4946,
+     4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946,
+     4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946,
+     4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946,
+     4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946,
+     4946, 4946, 4946, 4946, 4946, 4946, 4946, 4946, 4947, 4947,
+     4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947,
+     4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947,
+     4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947,
+     4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947,
+
+     4947, 4947, 4947, 4947, 4947, 4947, 4947, 4947, 4949, 4949,
+     4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949,
+     4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949,
+     4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949,
+     4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949,
+     4949, 4949, 4949, 4949, 4949, 4949, 4949, 4949, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950,
+
+     4950, 4950, 4950, 4950, 4950, 4950, 4950, 4950, 4951, 4951,
+     4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951,
+     4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951,
+     4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951,
+     4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951,
+     4951, 4951, 4951, 4951, 4951, 4951, 4951, 4951, 4952,    0,
+        0,    0,    0,    0,    0,    0,    0,    0, 4952,    0,
+        0,    0,    0,    0, 4952, 4952, 4952, 4952, 4952, 4952,
+     4952, 4952,    0,    0,    0, 4952, 4952, 4952, 4952, 4952,
+     4952, 4952, 4952, 4952, 4952, 4952, 4952, 4952, 4952, 4953,
+
+     4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953,
+     4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953,
+     4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953,
+     4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953,
+     4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4953, 4956,
+        0, 4956,    0,    0,    0,    0,    0, 4956, 4956, 4956,
+     4956,    0,    0,    0,    0,    0,    0,    0, 4956, 4956,
+     4956, 4956, 4956,    0, 4956,    0,    0,    0,    0,    0,
+        0, 4956, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959,
+     4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959,
+
+     4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959,
+     4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959,
+     4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959, 4959,
+     4959, 4959, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961, 4961,
+     4961, 4961, 4962,    0,    0,    0,    0,    0,    0,    0,
+        0,    0, 4962,    0,    0,    0,    0,    0, 4962, 4962,
+
+     4962, 4962, 4962, 4962, 4962, 4962,    0,    0,    0, 4962,
+     4962, 4962, 4962, 4962, 4962, 4962, 4962, 4962, 4962, 4962,
+     4962, 4962, 4962, 4968, 4968, 4968, 4968, 4968, 4968, 4968,
+     4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968,
+     4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968,
+     4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968,
+     4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968, 4968,
+     4968, 4968, 4968, 4973, 4973, 4973, 4973, 4973, 4973, 4973,
+     4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973,
+     4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973,
+
+     4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973,
+     4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973, 4973,
+     4973, 4973, 4973, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975, 4975,
+     4975, 4975, 4975, 4976, 4976, 4976, 4976, 4976, 4976, 4976,
+     4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976,
+     4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976,
+
+     4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976,
+     4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976,
+     4976, 4976, 4976, 4978, 4978, 4978, 4978, 4978, 4978, 4978,
+     4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978,
+     4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978,
+     4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978,
+     4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978, 4978,
+     4978, 4978, 4978, 4979, 4979, 4979, 4979, 4979, 4979, 4979,
+     4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979,
+     4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979,
+
+     4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979,
+     4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979, 4979,
+     4979, 4979, 4979, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981, 4981,
+     4981, 4981, 4981, 4982, 4982, 4982, 4982, 4982, 4982, 4982,
+     4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982,
+     4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982,
+
+     4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982,
+     4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982, 4982,
+     4982, 4982, 4982, 4984,    0,    0,    0,    0,    0,    0,
+        0, 4984,    0, 4984,    0,    0,    0,    0,    0, 4984,
+     4984, 4984, 4984, 4984, 4984, 4984, 4984,    0,    0,    0,
+     4984, 4984, 4984, 4984, 4984, 4984, 4984, 4984, 4984, 4984,
+     4984, 4984, 4984, 4984, 4985, 4985, 4985, 4985, 4985, 4985,
+     4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985,
+     4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985,
+     4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985,
+
+     4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985, 4985,
+     4985, 4985, 4985, 4985, 4986,    0, 4986,    0,    0,    0,
+        0,    0, 4986, 4986, 4986, 4986,    0,    0,    0,    0,
+        0,    0,    0, 4986, 4986, 4986, 4986, 4986,    0, 4986,
+        0,    0,    0,    0,    0,    0, 4986, 4987, 4987, 4987,
+     4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987,
+     4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987,
+     4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987,
+     4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987, 4987,
+     4987, 4987, 4987, 4987, 4987, 4987, 4987, 4988, 4988, 4988,
+
+     4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988,
+     4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988,
+     4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988,
+     4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988, 4988,
+     4988, 4988, 4988, 4988, 4988, 4988, 4988, 4990,    0, 4990,
+        0,    0,    0,    0,    0, 4990, 4990, 4990, 4990,    0,
+        0,    0,    0,    0,    0,    0, 4990, 4990, 4990, 4990,
+     4990,    0, 4990,    0,    0,    0,    0,    0,    0, 4990,
+     4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992,
+     4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992,
+
+     4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992,
+     4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992,
+     4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995, 4995,
+     4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998,
+     4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998,
+
+     4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998,
+     4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998,
+     4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998, 4998,
+     4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999,
+     4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999,
+     4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999,
+     4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999,
+     4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999, 4999,
+     5000,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+     5000,    0,    0,    0,    0,    0, 5000, 5000, 5000, 5000,
+
+     5000, 5000, 5000, 5000,    0,    0,    0, 5000, 5000, 5000,
+     5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000,
+     5000, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001,
+     5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001,
+     5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001,
+     5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001,
+     5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001,
+     5001, 5002,    0,    0,    0,    0,    0,    0,    0,    0,
+        0, 5002,    0,    0,    0,    0,    0, 5002, 5002, 5002,
+     5002, 5002, 5002, 5002, 5002,    0,    0,    0, 5002, 5002,
+
+     5002, 5002, 5002, 5002, 5002, 5002, 5002, 5002, 5002, 5002,
+     5002, 5002, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003,
+     5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003,
+     5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003,
+     5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003,
+     5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003, 5003,
+     5003, 5003, 5004,    0, 5004,    0,    0,    0,    0,    0,
+     5004, 5004, 5004, 5004,    0,    0,    0,    0,    0,    0,
+        0, 5004, 5004, 5004, 5004, 5004,    0, 5004,    0,    0,
+        0,    0,    0,    0, 5004, 5005, 5005, 5005, 5005, 5005,
+
+     5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005,
+     5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005,
+     5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005,
+     5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005, 5005,
+     5005, 5005, 5005, 5005, 5005, 5007, 5007, 5007, 5007, 5007,
+     5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007,
+     5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007,
+     5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007,
+     5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007, 5007,
+     5007, 5007, 5007, 5007, 5007, 5008, 5008, 5008, 5008, 5008,
+
+     5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008,
+     5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008,
+     5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008,
+     5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008, 5008,
+     5008, 5008, 5008, 5008, 5008, 5010, 5010, 5010, 5010, 5010,
+     5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010,
+     5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010,
+     5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010,
+     5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010, 5010,
+     5010, 5010, 5010, 5010, 5010, 5014, 5014, 5014, 5014, 5014,
+
+     5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014,
+     5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014,
+     5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014,
+     5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014, 5014,
+     5014, 5014, 5014, 5014, 5014, 5015,    0,    0,    0,    0,
+        0,    0,    0,    0,    0, 5015,    0,    0,    0,    0,
+        0, 5015, 5015, 5015, 5015, 5015, 5015, 5015, 5015,    0,
+        0,    0, 5015, 5015, 5015, 5015, 5015, 5015, 5015, 5015,
+     5015, 5015, 5015, 5015, 5015, 5015, 5017, 5017, 5017, 5017,
+     5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017,
+
+     5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017,
+     5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017,
+     5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 5017,
+     5017, 5017, 5017, 5017, 5017, 5017, 5018, 5018, 5018, 5018,
+     5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018,
+     5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018,
+     5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018,
+     5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018, 5018,
+     5018, 5018, 5018, 5018, 5018, 5018, 5020, 5020, 5020, 5020,
+     5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020,
+
+     5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020,
+     5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020,
+     5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020, 5020,
+     5020, 5020, 5020, 5020, 5020, 5020, 5021,    0, 5021,    0,
+        0,    0,    0,    0, 5021, 5021, 5021, 5021,    0,    0,
+        0,    0,    0,    0,    0, 5021, 5021, 5021, 5021, 5021,
+        0, 5021,    0,    0,    0,    0,    0,    0, 5021, 5022,
+     5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022,
+     5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022,
+     5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022,
+
+     5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022,
+     5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5022, 5023,
+     5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023,
+     5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023,
+     5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023,
+     5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023,
+     5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5027,
+     5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027,
+     5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027,
+     5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027,
+
+     5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027,
+     5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5027, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029,
+     5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5029, 5031,
+     5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031,
+     5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031,
+     5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031,
+
+     5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031,
+     5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5031, 5033,
+     5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033,
+     5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033,
+     5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033,
+     5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033,
+     5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5033, 5035,
+     5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035,
+     5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035,
+     5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035,
+
+     5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035,
+     5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5035, 5037,
+     5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037,
+     5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037,
+     5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037,
+     5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037,
+     5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5037, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038,
+
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038,
+     5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5038, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041,
+     5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5041, 5048,
+     5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048,
+     5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048,
+     5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048,
+
+     5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048,
+     5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5048, 5054,
+     5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054,
+     5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054,
+     5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054,
+     5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054,
+     5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5054, 5060,
+     5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060,
+     5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060,
+     5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060,
+
+     5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060,
+     5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5060, 5064,
+     5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064,
+     5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064,
+     5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064,
+     5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064,
+     5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5064, 5066,
+        0,    0,    0,    0,    0,    0,    0,    0,    0, 5066,
+        0,    0,    0,    0,    0, 5066, 5066, 5066, 5066, 5066,
+     5066, 5066, 5066,    0,    0,    0, 5066, 5066, 5066, 5066,
+
+     5066, 5066, 5066, 5066, 5066, 5066, 5066, 5066, 5066, 5066,
+     5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067,
+     5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067,
+     5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067,
+     5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067,
+     5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067,
+     5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068,
+     5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068,
+     5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068,
+     5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068,
+
+     5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068, 5068,
+     5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070,
+     5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070,
+     5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070,
+     5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070,
+     5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070, 5070,
+     5071,    0, 5071,    0,    0,    0,    0,    0, 5071, 5071,
+     5071, 5071,    0,    0,    0,    0,    0,    0,    0, 5071,
+     5071, 5071, 5071, 5071,    0, 5071,    0,    0,    0,    0,
+        0,    0, 5071, 5079, 5079, 5079, 5079, 5079, 5079, 5079,
+
+     5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079,
+     5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079,
+     5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079,
+     5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079, 5079,
+     5079, 5079, 5079, 5080, 5080, 5080, 5080, 5080, 5080, 5080,
+     5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080,
+     5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080,
+     5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080,
+     5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080, 5080,
+     5080, 5080, 5080, 5081,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0, 5081,    0,    0,    0,    0,    0, 5081,
+     5081, 5081, 5081, 5081, 5081, 5081, 5081,    0,    0,    0,
+     5081, 5081, 5081, 5081, 5081, 5081, 5081, 5081, 5081, 5081,
+     5081, 5081, 5081, 5081, 5082, 5082, 5082, 5082, 5082, 5082,
+     5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082,
+     5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082,
+     5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082,
+     5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082, 5082,
+     5082, 5082, 5082, 5082, 5083, 5083, 5083, 5083, 5083, 5083,
+     5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083,
+
+     5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083,
+     5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083,
+     5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083, 5083,
+     5083, 5083, 5083, 5083, 5085, 5085, 5085, 5085, 5085, 5085,
+     5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085,
+     5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085,
+     5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085,
+     5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085, 5085,
+     5085, 5085, 5085, 5085, 5086,    0, 5086,    0,    0,    0,
+        0,    0, 5086, 5086, 5086, 5086,    0,    0,    0,    0,
+
+        0,    0,    0, 5086, 5086, 5086, 5086, 5086,    0, 5086,
+        0,    0,    0,    0,    0,    0, 5086, 5094, 5094, 5094,
+     5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094,
+     5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094,
+     5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094,
+     5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094, 5094,
+     5094, 5094, 5094, 5094, 5094, 5094, 5094, 5096, 5096, 5096,
+     5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096,
+     5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096,
+     5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096,
+
+     5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096, 5096,
+     5096, 5096, 5096, 5096, 5096, 5096, 5096, 5100, 5100, 5100,
+     5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100,
+     5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100,
+     5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100,
+     5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100, 5100,
+     5100, 5100, 5100, 5100, 5100, 5100, 5100, 5105, 5105, 5105,
+     5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105,
+     5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105,
+     5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105,
+
+     5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105, 5105,
+     5105, 5105, 5105, 5105, 5105, 5105, 5105, 5109, 5109, 5109,
+     5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109,
+     5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109,
+     5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109,
+     5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109, 5109,
+     5109, 5109, 5109, 5109, 5109, 5109, 5109, 5110, 5110, 5110,
+     5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110,
+     5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110,
+     5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110,
+
+     5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110, 5110,
+     5110, 5110, 5110, 5110, 5110, 5110, 5110, 5113,    0,    0,
+        0,    0,    0,    0,    0,    0,    0, 5113,    0,    0,
+        0,    0,    0, 5113, 5113, 5113, 5113, 5113, 5113, 5113,
+     5113,    0,    0,    0, 5113, 5113, 5113, 5113, 5113, 5113,
+     5113, 5113, 5113, 5113, 5113, 5113, 5113, 5113, 5114, 5114,
+     5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114,
+     5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114,
+     5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114,
+     5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114,
+
+     5114, 5114, 5114, 5114, 5114, 5114, 5114, 5114, 5116, 5116,
+     5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116,
+     5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116,
+     5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116,
+     5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116,
+     5116, 5116, 5116, 5116, 5116, 5116, 5116, 5116, 5117,    0,
+     5117,    0,    0,    0,    0,    0, 5117, 5117, 5117, 5117,
+        0,    0,    0,    0,    0,    0,    0, 5117, 5117, 5117,
+     5117, 5117,    0, 5117,    0,    0,    0,    0,    0,    0,
+     5117, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119,
+
+     5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119,
+     5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119,
+     5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119,
+     5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119, 5119,
+     5119, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122, 5122,
+     5122, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124,
+
+     5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124,
+     5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124,
+     5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124,
+     5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124, 5124,
+     5124, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126,
+     5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126,
+     5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126,
+     5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126,
+     5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126, 5126,
+     5126, 5127,    0, 5127, 5127, 5127,    0,    0,    0,    0,
+
+        0, 5127, 5127, 5127, 5127,    0,    0,    0,    0,    0,
+        0,    0, 5127, 5127, 5127, 5127, 5127,    0, 5127,    0,
+        0,    0,    0,    0,    0, 5127, 5128, 5128, 5128, 5128,
+     5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128,
+     5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128,
+     5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128,
+     5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128, 5128,
+     5128, 5128, 5128, 5128, 5128, 5128, 5134, 5134, 5134, 5134,
+     5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134,
+     5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134,
+
+     5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134,
+     5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134, 5134,
+     5134, 5134, 5134, 5134, 5134, 5134, 5136, 5136, 5136, 5136,
+     5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136,
+     5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136,
+     5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136,
+     5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136, 5136,
+     5136, 5136, 5136, 5136, 5136, 5136, 5144, 5144, 5144, 5144,
+     5144, 5144, 5144, 5144, 5144, 5144, 5144, 5144, 5144, 5144,
+     5144, 5144, 5144, 5144, 5145, 5145, 5145, 5145, 5145, 5145,
+
+     5145, 5145, 5145, 5145, 5145, 5145, 5145, 5145, 5145, 5145,
+     5145, 5145, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146,
+     5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146,
+     5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147,
+     5147, 5147, 5147, 5147, 5147, 5147, 5147, 5147, 5148, 5148,
+     5148, 5148, 5148, 5148, 5148, 5148, 5148, 5148, 5148, 5148,
+     5148, 5148, 5148, 5148, 5148, 5148, 5149,    0,    0,    0,
+        0,    0,    0, 5149,    0, 5149, 5149, 5150,    0, 5150,
+        0, 5150, 5151,    0,    0,    0,    0,    0,    0, 5151,
+        0, 5151, 5151, 5152, 5152, 5152,    0,    0, 5152,    0,
+
+     5152,    0, 5152,    0, 5152,    0,    0, 5152, 5152, 5153,
+     5153, 5153,    0,    0, 5153, 5153,    0, 5153, 5153, 5153,
+     5153, 5153,    0, 5153, 5153, 5154, 5154, 5154,    0,    0,
+     5154,    0,    0,    0,    0,    0, 5154,    0,    0, 5154,
+     5154, 5154, 5155, 5155, 5155, 5155, 5155, 5155, 5155, 5155,
+     5155, 5155, 5155, 5155, 5155, 5155, 5155, 5155, 5155, 5155,
+     5156, 5156, 5156, 5156, 5156, 5156, 5156, 5156, 5156, 5156,
+        0, 5156, 5156, 5156, 5156, 5156, 5156, 5156, 5157, 5157,
+     5157, 5157, 5157, 5157, 5157, 5157, 5157, 5157, 5157, 5157,
+     5157, 5157, 5157, 5157, 5157, 5157, 5158, 5158, 5158, 5158,
+
+     5158, 5158, 5158, 5158, 5158, 5158, 5158, 5158, 5158, 5158,
+     5158, 5158, 5158, 5158, 5159,    0,    0,    0,    0,    0,
+        0, 5159,    0, 5159, 5159, 5160, 5160, 5160,    0,    0,
+     5160, 5160,    0, 5160, 5160, 5160, 5160, 5160,    0, 5160,
+     5160, 5161, 5161, 5161,    0, 5161,    0,    0, 5161, 5161,
+        0,    0, 5161,    0,    0, 5161, 5161, 5161, 5162, 5162,
+     5162,    0,    0, 5162, 5162,    0, 5162, 5162, 5162, 5162,
+     5162,    0, 5162, 5162, 5163, 5163, 5163, 5163, 5163, 5163,
+     5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163, 5163,
+     5163, 5163, 5164, 5164, 5164, 5164, 5164, 5164, 5164, 5164,
+
+     5164, 5164, 5164, 5164, 5164, 5164, 5164, 5164, 5164, 5164,
+     5165, 5165, 5165,    0,    0, 5165,    0,    0,    0,    0,
+        0, 5165, 5165,    0, 5165, 5165, 5165, 5166, 5166, 5166,
+     5166, 5166, 5166, 5166, 5166, 5166, 5166, 5166, 5166, 5166,
+     5166, 5166, 5166, 5166, 5166, 5167, 5167, 5167, 5167, 5167,
+     5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167, 5167,
+     5167, 5167, 5167, 5168, 5168, 5168, 5168, 5168, 5168, 5168,
+     5168, 5168, 5168, 5168, 5168, 5168, 5168, 5168, 5168, 5168,
+     5168, 5169, 5169, 5169, 5169, 5169, 5169, 5169, 5169, 5169,
+     5169, 5169, 5169, 5169, 5169, 5169, 5169, 5169, 5169, 5170,
+
+     5170, 5170, 5170, 5170, 5170, 5170, 5170, 5170, 5170, 5170,
+     5170, 5170, 5170, 5170, 5170, 5170, 5170, 5171, 5171, 5171,
+     5171, 5171, 5171, 5171, 5171, 5171, 5171, 5171, 5171, 5171,
+     5171, 5171, 5171, 5171, 5171, 5172, 5172, 5172,    0,    0,
+     5172, 5172,    0, 5172, 5172, 5172, 5172, 5172,    0, 5172,
+     5172, 5173, 5173, 5173, 5173, 5173, 5173, 5173, 5173, 5173,
+     5173, 5173, 5173, 5173, 5173, 5173, 5173, 5173, 5173, 5174,
+     5174, 5174, 5174, 5174, 5174, 5174, 5174, 5174, 5174, 5174,
+     5174, 5174, 5174, 5174, 5174, 5174, 5174, 5175, 5175, 5175,
+     5175, 5175, 5175, 5175, 5175, 5175, 5175, 5175, 5175, 5175,
+
+     5175, 5175, 5175, 5175, 5175, 5176, 5176, 5176, 5176, 5176,
+     5176, 5176, 5176, 5176, 5176, 5176, 5176, 5176, 5176, 5176,
+     5176, 5176, 5176, 5177, 5177, 5177, 5177, 5177, 5177, 5177,
+     5177, 5177, 5177, 5177, 5177, 5177, 5177, 5177, 5177, 5177,
+     5177, 5178, 5178, 5178, 5178, 5178, 5178, 5178, 5178, 5178,
+     5178, 5178, 5178, 5178, 5178, 5178, 5178, 5178, 5178, 5179,
+     5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179,
+     5179, 5179, 5179, 5179, 5179, 5179, 5179, 5180, 5180, 5180,
+     5180, 5180, 5180, 5180, 5180, 5180, 5180, 5180, 5180, 5180,
+     5180, 5180, 5180, 5180, 5180, 5181, 5181, 5181, 5181, 5181,
+
+     5181, 5181, 5181, 5181, 5181, 5181, 5181, 5181, 5181, 5181,
+     5181, 5181, 5181, 5182, 5182, 5182, 5182, 5182, 5182, 5182,
+     5182, 5182, 5182, 5182, 5182, 5182, 5182, 5182, 5182, 5182,
+     5182, 5183, 5183, 5183, 5183, 5183, 5183, 5183, 5183, 5183,
+     5183, 5183, 5183, 5183, 5183, 5183, 5183, 5183, 5183, 5184,
+     5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184, 5184,
+     5184, 5184, 5184, 5184, 5184, 5184, 5184, 5185, 5185, 5185,
+     5185, 5185, 5185, 5185, 5185, 5185, 5185, 5185, 5185, 5185,
+     5185, 5185, 5185, 5185, 5185, 5186, 5186, 5186, 5186, 5186,
+     5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186, 5186,
+
+     5186, 5186, 5186, 5187, 5187, 5187, 5187, 5187, 5187, 5187,
+     5187, 5187, 5187, 5187, 5187, 5187, 5187, 5187, 5187, 5187,
+     5187, 5188, 5188,    0, 5188, 5188, 5188, 5188, 5188, 5188,
+     5188, 5188, 5188, 5188, 5188, 5188, 5188, 5188, 5188, 5189,
+     5189, 5189, 5189, 5189, 5189, 5189, 5189, 5189, 5189, 5189,
+     5189, 5189, 5189, 5189, 5189, 5189, 5189, 5190, 5190, 5190,
+     5190, 5190, 5190, 5190, 5190, 5190, 5190, 5190, 5190, 5190,
+     5190, 5190, 5190, 5190, 5190, 5191, 5191, 5191, 5191, 5191,
+     5191, 5191, 5191, 5191, 5191, 5191, 5191, 5191, 5191, 5191,
+     5191, 5191, 5191, 5192, 5192, 5192, 5192, 5192, 5192, 5192,
+
+     5192, 5192, 5192, 5192, 5192, 5192, 5192, 5192, 5192, 5192,
+     5192, 5193, 5193, 5193, 5193, 5193, 5193, 5193, 5193, 5193,
+     5193, 5193, 5193, 5193, 5193, 5193, 5193, 5193, 5193, 5194,
+     5194, 5194,    0,    0, 5194,    0,    0,    0,    0,    0,
+     5194,    0,    0, 5194, 5194, 5195, 5195, 5195, 5195, 5195,
+     5195, 5195, 5195, 5195, 5195, 5195, 5195, 5195, 5195, 5195,
+     5195, 5195, 5195, 5196,    0,    0,    0,    0, 5196,    0,
+        0,    0, 5196,    0,    0,    0,    0, 5196, 5196, 5197,
+     5197,    0, 5197, 5197, 5197, 5197, 5197, 5197, 5197, 5197,
+     5197, 5197, 5197, 5197, 5197, 5197, 5197, 5198, 5198, 5198,
+
+     5198, 5198, 5198, 5198, 5198, 5198, 5198, 5198, 5198, 5198,
+     5198, 5198, 5198, 5198, 5198, 5199, 5199, 5199, 5199, 5199,
+     5199, 5199, 5199, 5199, 5199, 5199, 5199, 5199, 5199, 5199,
+     5199, 5199, 5199, 5200, 5200, 5200, 5200, 5200, 5200, 5200,
+     5200, 5200, 5200, 5200, 5200, 5200, 5200, 5200, 5200, 5200,
+     5200, 5201, 5201, 5201,    0,    0, 5201,    0, 5201, 5201,
+        0,    0, 5201, 5201,    0, 5201, 5201, 5201, 5202, 5202,
+     5202, 5202, 5202, 5202, 5202, 5202, 5202, 5202, 5202, 5202,
+     5202, 5202, 5202, 5202, 5202, 5202, 5203, 5203, 5203, 5203,
+     5203, 5203, 5203, 5203, 5203, 5203, 5203, 5203, 5203, 5203,
+
+     5203, 5203, 5203, 5203, 5204,    0,    0,    0,    0,    0,
+        0, 5204,    0, 5204, 5204, 5205,    0, 5205,    0,    0,
+     5205,    0,    0,    0,    0,    0,    0,    0,    0, 5205,
+     5205, 5206, 5206, 5206,    0,    0, 5206,    0, 5206, 5206,
+        0,    0, 5206,    0,    0, 5206, 5206, 5206, 5207, 5207,
+     5207,    0,    0, 5207,    0, 5207, 5207,    0,    0, 5207,
+     5207,    0, 5207, 5207, 5207, 5208, 5208, 5208, 5208, 5208,
+     5208, 5208, 5208, 5208, 5208, 5208, 5208, 5208, 5208, 5208,
+     5208, 5208, 5208, 5209,    0,    0,    0,    0,    0,    0,
+     5209,    0, 5209, 5209, 5210, 5210,    0, 5210,    0, 5210,
+
+     5210, 5210, 5210, 5210, 5210, 5210, 5210, 5210, 5210, 5210,
+     5210, 5210, 5211, 5211,    0, 5211, 5211, 5211, 5211, 5211,
+     5211, 5211, 5211, 5211, 5211, 5211,    0, 5211, 5211, 5211,
+     5212, 5212, 5212,    0,    0, 5212,    0,    0,    0, 5212,
+        0, 5212,    0,    0, 5212, 5212, 5213, 5213, 5213, 5213,
+     5213, 5213, 5213, 5213, 5213, 5213, 5213, 5213, 5213, 5213,
+     5213, 5213, 5213, 5213, 5214, 5214, 5214, 5214, 5214, 5214,
+     5214, 5214, 5214, 5214, 5214, 5214, 5214, 5214, 5214, 5214,
+     5214, 5214, 5215, 5215, 5215, 5215, 5215, 5215, 5215, 5215,
+     5215, 5215, 5215, 5215, 5215, 5215, 5215, 5215, 5215, 5215,
+
+     5216, 5216, 5216, 5216, 5216, 5216, 5216, 5216, 5216, 5216,
+     5216, 5216, 5216, 5216, 5216, 5216, 5216, 5216, 5217, 5217,
+     5217,    0,    0, 5217,    0, 5217, 5217,    0,    0, 5217,
+     5217,    0, 5217, 5217, 5217, 5218, 5218, 5218, 5218, 5218,
+     5218, 5218, 5218, 5218, 5218, 5218, 5218, 5218, 5218, 5218,
+     5218, 5218, 5218, 5219, 5219, 5219, 5219, 5219, 5219, 5219,
+     5219, 5219, 5219, 5219, 5219, 5219, 5219, 5219, 5219, 5219,
+     5219, 5220, 5220, 5220, 5220, 5220, 5220, 5220, 5220, 5220,
+     5220, 5220, 5220, 5220, 5220, 5220, 5220, 5220, 5220, 5221,
+     5221, 5221, 5221, 5221, 5221, 5221, 5221, 5221, 5221, 5221,
+
+     5221, 5221, 5221, 5221, 5221, 5221, 5221, 5222, 5222, 5222,
+     5222, 5222, 5222, 5222, 5222, 5222, 5222, 5222, 5222, 5222,
+     5222, 5222, 5222, 5222, 5222, 5223, 5223, 5223, 5223, 5223,
+     5223, 5223, 5223, 5223, 5223, 5223, 5223, 5223, 5223, 5223,
+     5223, 5223, 5223, 5224, 5224, 5224,    0,    0, 5224, 5224,
+        0, 5224, 5224, 5224, 5224, 5224,    0, 5224, 5224, 5225,
+     5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225, 5225,
+     5225, 5225, 5225, 5225, 5225, 5225, 5225, 5226, 5226, 5226,
+     5226, 5226, 5226, 5226, 5226, 5226, 5226, 5226, 5226, 5226,
+     5226, 5226, 5226, 5226, 5226, 5227, 5227, 5227, 5227, 5227,
+
+     5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227, 5227,
+     5227, 5227, 5227, 5228, 5228, 5228, 5228, 5228, 5228, 5228,
+     5228, 5228, 5228, 5228, 5228, 5228, 5228, 5228, 5228, 5228,
+     5228, 5229, 5229, 5229, 5229, 5229, 5229, 5229, 5229, 5229,
+     5229, 5229, 5229, 5229, 5229, 5229, 5229, 5229, 5229, 5230,
+     5230, 5230, 5230, 5230, 5230, 5230, 5230, 5230, 5230, 5230,
+     5230, 5230, 5230, 5230, 5230, 5230, 5230, 5231, 5231, 5231,
+     5231, 5231, 5231, 5231, 5231, 5231, 5231, 5231, 5231, 5231,
+     5231, 5231, 5231, 5231, 5231, 5232, 5232, 5232, 5232, 5232,
+     5232, 5232, 5232, 5232, 5232, 5232, 5232, 5232, 5232, 5232,
+
+     5232, 5232, 5232, 5233, 5233, 5233, 5233, 5233, 5233, 5233,
+     5233, 5233, 5233, 5233, 5233, 5233, 5233, 5233, 5233, 5233,
+     5233, 5234, 5234, 5234, 5234, 5234, 5234, 5234, 5234, 5234,
+     5234, 5234, 5234, 5234, 5234, 5234, 5234, 5234, 5234, 5235,
+     5235, 5235, 5235, 5235, 5235, 5235, 5235, 5235, 5235, 5235,
+     5235, 5235, 5235, 5235, 5235, 5235, 5235, 5236, 5236, 5236,
+        0,    0, 5236,    0, 5236, 5236,    0,    0, 5236, 5236,
+        0, 5236, 5236, 5236, 5237, 5237, 5237, 5237, 5237, 5237,
+     5237, 5237, 5237, 5237, 5237, 5237, 5237, 5237, 5237, 5237,
+     5237, 5237, 5238, 5238, 5238, 5238, 5238, 5238, 5238, 5238,
+
+     5238, 5238, 5238, 5238, 5238, 5238, 5238, 5238, 5238, 5238,
+     5239, 5239, 5239, 5239, 5239, 5239, 5239, 5239, 5239, 5239,
+     5239, 5239, 5239, 5239, 5239, 5239, 5239, 5239, 5240, 5240,
+     5240, 5240, 5240, 5240, 5240, 5240, 5240, 5240, 5240, 5240,
+     5240, 5240, 5240, 5240, 5240, 5240, 5241, 5241, 5241, 5241,
+     5241, 5241, 5241, 5241, 5241, 5241, 5241, 5241, 5241, 5241,
+     5241, 5241, 5241, 5241, 5242, 5242, 5242, 5242, 5242, 5242,
+     5242, 5242, 5242, 5242, 5242, 5242, 5242, 5242, 5242, 5242,
+     5242, 5242, 5243, 5243, 5243, 5243, 5243, 5243, 5243, 5243,
+     5243, 5243, 5243, 5243, 5243, 5243, 5243, 5243, 5243, 5243,
+
+     5244, 5244, 5244, 5244, 5244, 5244, 5244, 5244, 5244, 5244,
+     5244, 5244, 5244, 5244, 5244, 5244, 5244, 5244, 5245, 5245,
+     5245, 5245, 5245, 5245, 5245, 5245, 5245, 5245, 5245, 5245,
+     5245, 5245, 5245, 5245, 5245, 5245, 5246, 5246, 5246, 5246,
+     5246, 5246, 5246, 5246, 5246, 5246, 5246, 5246, 5246, 5246,
+     5246, 5246, 5246, 5246, 5247, 5247, 5247, 5247, 5247, 5247,
+     5247, 5247, 5247, 5247, 5247, 5247, 5247, 5247, 5247, 5247,
+     5247, 5247, 5248, 5248, 5248, 5248, 5248, 5248, 5248, 5248,
+     5248, 5248, 5248, 5248, 5248, 5248, 5248, 5248, 5248, 5248,
+     5249, 5249, 5249, 5249, 5249, 5249, 5249, 5249, 5249, 5249,
+
+     5249, 5249, 5249, 5249, 5249, 5249, 5249, 5249, 5250, 5250,
+     5250, 5250, 5250, 5250, 5250, 5250, 5250, 5250, 5250, 5250,
+     5250, 5250, 5250, 5250, 5250, 5250, 5251, 5251, 5251, 5251,
+     5251, 5251, 5251, 5251, 5251, 5251, 5251, 5251, 5251, 5251,
+     5251, 5251, 5251, 5251, 5252, 5252, 5252, 5252, 5252, 5252,
+     5252, 5252, 5252, 5252, 5252, 5252, 5252, 5252, 5252, 5252,
+     5252, 5252, 5253, 5253, 5253, 5253, 5253, 5253, 5253, 5253,
+     5253, 5253, 5253, 5253, 5253, 5253, 5253, 5253, 5253, 5253,
+     5254, 5254, 5254,    0,    0, 5254, 5254,    0, 5254, 5254,
+     5254, 5254, 5254,    0, 5254, 5254, 5255, 5255, 5255, 5255,
+
+     5255, 5255, 5255, 5255, 5255, 5255, 5255, 5255, 5255, 5255,
+     5255, 5255, 5255, 5255, 5256, 5256, 5256, 5256, 5256, 5256,
+     5256, 5256, 5256, 5256, 5256, 5256, 5256, 5256, 5256, 5256,
+     5256, 5256, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257,
+     5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257, 5257,
+     5258, 5258, 5258,    0,    0, 5258, 5258,    0, 5258, 5258,
+     5258, 5258, 5258,    0, 5258, 5258, 5259, 5259, 5259, 5259,
+     5259, 5259, 5259, 5259, 5259, 5259, 5259, 5259, 5259, 5259,
+     5259, 5259, 5259, 5259, 5260, 5260, 5260, 5260, 5260, 5260,
+     5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260, 5260,
+
+     5260, 5260, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261,
+     5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261, 5261,
+     5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262,
+     5262, 5262, 5262, 5262, 5262, 5262, 5262, 5262, 5263, 5263,
+     5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263, 5263,
+     5263, 5263, 5263, 5263, 5263, 5263, 5264, 5264, 5264, 5264,
+     5264, 5264, 5264, 5264, 5264, 5264, 5264, 5264, 5264, 5264,
+     5264, 5264, 5264, 5264, 5265, 5265, 5265, 5265, 5265, 5265,
+     5265, 5265, 5265, 5265, 5265, 5265, 5265, 5265, 5265, 5265,
+     5265, 5265, 5266, 5266, 5266, 5266, 5266, 5266, 5266, 5266,
+
+     5266, 5266, 5266, 5266, 5266, 5266, 5266, 5266, 5266, 5266,
+     5267, 5267, 5267, 5267, 5267, 5267, 5267, 5267, 5267, 5267,
+     5267, 5267, 5267, 5267, 5267, 5267, 5267, 5267, 5268, 5268,
+     5268, 5268, 5268, 5268, 5268, 5268, 5268, 5268, 5268, 5268,
+     5268, 5268, 5268, 5268, 5268, 5268, 5269, 5269, 5269, 5269,
+     5269, 5269, 5269, 5269, 5269, 5269, 5269, 5269, 5269, 5269,
+     5269, 5269, 5269, 5269, 5270, 5270, 5270, 5270, 5270, 5270,
+     5270, 5270, 5270, 5270, 5270, 5270, 5270, 5270, 5270, 5270,
+     5270, 5270, 5271, 5271, 5271, 5271, 5271, 5271, 5271, 5271,
+     5271, 5271, 5271, 5271, 5271, 5271, 5271, 5271, 5271, 5271,
+
+     5272, 5272, 5272, 5272, 5272, 5272, 5272, 5272, 5272, 5272,
+     5272, 5272, 5272, 5272, 5272, 5272, 5272, 5272, 5273, 5273,
+     5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273, 5273,
+     5273, 5273, 5273, 5273, 5273, 5273, 5274, 5274, 5274, 5274,
+     5274, 5274, 5274, 5274, 5274, 5274, 5274, 5274, 5274, 5274,
+     5274, 5274, 5274, 5274, 5275, 5275, 5275, 5275, 5275, 5275,
+     5275, 5275, 5275, 5275, 5275, 5275, 5275, 5275, 5275, 5275,
+     5275, 5275, 5276, 5276, 5276, 5276, 5276, 5276, 5276, 5276,
+     5276, 5276, 5276, 5276, 5276, 5276, 5276, 5276, 5276, 5276,
+     5277, 5277, 5277, 5277, 5277, 5277, 5277, 5277, 5277, 5277,
+
+     5277, 5277, 5277, 5277, 5277, 5277, 5277, 5277, 5278, 5278,
+     5278, 5278, 5278, 5278, 5278, 5278, 5278, 5278, 5278, 5278,
+     5278, 5278, 5278, 5278, 5278, 5278, 5279, 5279, 5279, 5279,
+     5279, 5279, 5279, 5279, 5279, 5279, 5279, 5279, 5279, 5279,
+     5279, 5279, 5279, 5279, 5280, 5280, 5280, 5280, 5280, 5280,
+     5280, 5280, 5280, 5280, 5280, 5280, 5280, 5280, 5280, 5280,
+     5280, 5280, 5281, 5281, 5281, 5281, 5281, 5281, 5281, 5281,
+     5281, 5281, 5281, 5281, 5281, 5281, 5281, 5281, 5281, 5281,
+     5282, 5282, 5282, 5282, 5282, 5282, 5282, 5282, 5282, 5282,
+     5282, 5282, 5282, 5282, 5282, 5282, 5282, 5282, 5283, 5283,
+
+     5283, 5283, 5283, 5283, 5283, 5283, 5283, 5283, 5283, 5283,
+     5283, 5283, 5283, 5283, 5283, 5283, 5284, 5284, 5284, 5284,
+     5284, 5284, 5284, 5284, 5284, 5284, 5284, 5284, 5284, 5284,
+     5284, 5284, 5284, 5284, 5285, 5285, 5285, 5285, 5285, 5285,
+     5285, 5285, 5285, 5285, 5285, 5285, 5285, 5285, 5285, 5285,
+     5285, 5285, 5286, 5286, 5286, 5286, 5286, 5286, 5286, 5286,
+     5286, 5286, 5286, 5286, 5286, 5286, 5286, 5286, 5286, 5286,
+     5287, 5287, 5287, 5287, 5287, 5287, 5287, 5287, 5287, 5287,
+     5287, 5287, 5287, 5287, 5287, 5287, 5287, 5287, 5288, 5288,
+     5288, 5288, 5288, 5288, 5288, 5288, 5288, 5288, 5288, 5288,
+
+     5288, 5288, 5288, 5288, 5288, 5288, 5289, 5289, 5289, 5289,
+     5289, 5289, 5289, 5289, 5289, 5289, 5289, 5289, 5289, 5289,
+     5289, 5289, 5289, 5289, 5290, 5290, 5290, 5290, 5290, 5290,
+     5290, 5290, 5290, 5290, 5290, 5290, 5290, 5290, 5290, 5290,
+     5290, 5290, 5291, 5291, 5291, 5291, 5291, 5291, 5291, 5291,
+     5291, 5291, 5291, 5291, 5291, 5291, 5291, 5291, 5291, 5291,
+     5292, 5292, 5292, 5292, 5292, 5292, 5292, 5292, 5292, 5292,
+     5292, 5292, 5292, 5292, 5292, 5292, 5292, 5292, 5293, 5293,
+     5293, 5293, 5293, 5293, 5293, 5293, 5293, 5293, 5293, 5293,
+     5293, 5293, 5293, 5293, 5293, 5293, 5294, 5294, 5294, 5294,
+
+     5294, 5294, 5294, 5294, 5294, 5294, 5294, 5294, 5294, 5294,
+     5294, 5294, 5294, 5294, 5295, 5295, 5295, 5295, 5295, 5295,
+     5295, 5295, 5295, 5295, 5295, 5295, 5295, 5295, 5295, 5295,
+     5295, 5295, 5296, 5296, 5296, 5296, 5296, 5296, 5296, 5296,
+     5296, 5296, 5296, 5296, 5296, 5296, 5296, 5296, 5296, 5296,
+     5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297,
+     5297, 5297, 5297, 5297, 5297, 5297, 5297, 5297, 5298, 5298,
+     5298, 5298, 5298, 5298, 5298, 5298, 5298, 5298, 5298, 5298,
+     5298, 5298, 5298, 5298, 5298, 5298, 5299, 5299, 5299, 5299,
+     5299, 5299, 5299, 5299, 5299, 5299, 5299, 5299, 5299, 5299,
+
+     5299, 5299, 5299, 5299, 5300, 5300, 5300,    0,    0, 5300,
+        0,    0,    0, 5300,    0, 5300,    0,    0, 5300, 5300,
+     5301, 5301, 5301, 5301, 5301, 5301, 5301, 5301, 5301, 5301,
+     5301, 5301, 5301, 5301, 5301, 5301, 5301, 5301, 5302, 5302,
+     5302, 5302, 5302, 5302, 5302, 5302, 5302, 5302, 5302, 5302,
+     5302, 5302, 5302, 5302, 5302, 5302, 5303, 5303, 5303, 5303,
+     5303, 5303, 5303, 5303, 5303, 5303, 5303, 5303, 5303, 5303,
+     5303, 5303, 5303, 5303, 5304, 5304, 5304, 5304, 5304, 5304,
+     5304, 5304, 5304, 5304, 5304, 5304, 5304, 5304, 5304, 5304,
+     5304, 5304, 5305, 5305, 5305, 5305, 5305, 5305, 5305, 5305,
+
+     5305, 5305, 5305, 5305, 5305, 5305, 5305, 5305, 5305, 5305,
+     5306, 5306, 5306, 5306, 5306, 5306, 5306, 5306, 5306, 5306,
+     5306, 5306, 5306, 5306, 5306, 5306, 5306, 5306, 5307, 5307,
+     5307, 5307, 5307, 5307, 5307, 5307, 5307, 5307, 5307, 5307,
+     5307, 5307, 5307, 5307, 5307, 5307, 5308, 5308, 5308, 5308,
+     5308, 5308, 5308, 5308, 5308, 5308, 5308, 5308, 5308, 5308,
+     5308, 5308, 5308, 5308, 5309, 5309, 5309, 5309, 5309, 5309,
+     5309, 5309, 5309, 5309, 5309, 5309, 5309, 5309, 5309, 5309,
+     5309, 5309, 5310, 5310, 5310, 5310, 5310, 5310, 5310, 5310,
+     5310, 5310, 5310, 5310, 5310, 5310, 5310, 5310, 5310, 5310,
+
+     5311, 5311, 5311, 5311, 5311, 5311, 5311, 5311, 5311, 5311,
+     5311, 5311, 5311, 5311, 5311, 5311, 5311, 5311, 5312, 5312,
+     5312, 5312, 5312, 5312, 5312, 5312, 5312, 5312, 5312, 5312,
+     5312, 5312, 5312, 5312, 5312, 5312, 5313, 5313, 5313,    0,
+        0, 5313,    0,    0,    0,    0,    0, 5313,    0,    0,
+     5313, 5313, 5313, 5314, 5314, 5314, 5314, 5314, 5314, 5314,
+     5314, 5314, 5314, 5314, 5314, 5314, 5314, 5314, 5314, 5314,
+     5314, 5315, 5315, 5315, 5315, 5315, 5315, 5315, 5315, 5315,
+     5315, 5315, 5315, 5315, 5315, 5315, 5315, 5315, 5315, 5316,
+     5316, 5316, 5316, 5316, 5316, 5316, 5316, 5316, 5316, 5316,
+
+     5316, 5316, 5316, 5316, 5316, 5316, 5316, 5317, 5317, 5317,
+     5317, 5317, 5317, 5317, 5317, 5317, 5317, 5317, 5317, 5317,
+     5317, 5317, 5317, 5317, 5317, 5318, 5318, 5318, 5318, 5318,
+     5318, 5318, 5318, 5318, 5318, 5318, 5318, 5318, 5318, 5318,
+     5318, 5318, 5318, 5319, 5319, 5319, 5319, 5319, 5319, 5319,
+     5319, 5319, 5319, 5319, 5319, 5319, 5319, 5319, 5319, 5319,
+     5319, 5320, 5320, 5320, 5320, 5320, 5320, 5320, 5320, 5320,
+     5320, 5320, 5320, 5320, 5320, 5320, 5320, 5320, 5320, 5321,
+     5321, 5321, 5321, 5321, 5321, 5321, 5321, 5321, 5321, 5321,
+     5321, 5321, 5321, 5321, 5321, 5321, 5321, 5322, 5322, 5322,
+
+     5322, 5322, 5322, 5322, 5322, 5322, 5322, 5322, 5322, 5322,
+     5322, 5322, 5322, 5322, 5322, 5323, 5323, 5323, 5323, 5323,
+     5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323, 5323,
+     5323, 5323, 5323, 5324, 5324, 5324, 5324, 5324, 5324, 5324,
+     5324, 5324, 5324, 5324, 5324, 5324, 5324, 5324, 5324, 5324,
+     5324, 5325, 5325, 5325, 5325, 5325, 5325, 5325, 5325, 5325,
+     5325, 5325, 5325, 5325, 5325, 5325, 5325, 5325, 5325, 5326,
+     5326, 5326, 5326, 5326, 5326, 5326, 5326, 5326, 5326, 5326,
+     5326, 5326, 5326, 5326, 5326, 5326, 5326, 5327, 5327, 5327,
+     5327, 5327, 5327, 5327, 5327, 5327, 5327, 5327, 5327, 5327,
+
+     5327, 5327, 5327, 5327, 5327, 5328, 5328, 5328, 5328, 5328,
+     5328, 5328, 5328, 5328, 5328, 5328, 5328, 5328, 5328, 5328,
+     5328, 5328, 5328, 5329, 5329, 5329, 5329, 5329, 5329, 5329,
+     5329, 5329, 5329, 5329, 5329, 5329, 5329, 5329, 5329, 5329,
+     5329, 5330, 5330, 5330, 5330, 5330, 5330, 5330, 5330, 5330,
+     5330, 5330, 5330, 5330, 5330, 5330, 5330, 5330, 5330, 5331,
+     5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331,
+     5331, 5331, 5331, 5331, 5331, 5331, 5331, 5332, 5332, 5332,
+     5332, 5332, 5332, 5332, 5332, 5332, 5332, 5332, 5332, 5332,
+     5332, 5332, 5332, 5332, 5332, 5333, 5333, 5333, 5333, 5333,
+
+     5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333, 5333,
+     5333, 5333, 5333, 5334, 5334, 5334, 5334, 5334, 5334, 5334,
+     5334, 5334, 5334, 5334, 5334, 5334, 5334, 5334, 5334, 5334,
+     5334, 5335, 5335, 5335, 5335, 5335, 5335, 5335, 5335, 5335,
+     5335, 5335, 5335, 5335, 5335, 5335, 5335, 5335, 5335, 5336,
+     5336, 5336,    0,    0, 5336, 5336,    0, 5336, 5336, 5336,
+     5336, 5336,    0, 5336, 5336, 5337, 5337, 5337, 5337, 5337,
+     5337, 5337, 5337, 5337, 5337, 5337, 5337, 5337, 5337, 5337,
+     5337, 5337, 5337, 5338, 5338, 5338, 5338, 5338, 5338, 5338,
+     5338, 5338, 5338, 5338, 5338, 5338, 5338, 5338, 5338, 5338,
+
+     5338, 5339, 5339, 5339, 5339, 5339, 5339, 5339, 5339, 5339,
+     5339, 5339, 5339, 5339, 5339, 5339, 5339, 5339, 5339, 5340,
+     5340, 5340, 5340, 5340, 5340, 5340, 5340, 5340, 5340, 5340,
+     5340, 5340, 5340, 5340, 5340, 5340, 5340, 5341, 5341, 5341,
+     5341, 5341, 5341, 5341, 5341, 5341, 5341, 5341, 5341, 5341,
+     5341, 5341, 5341, 5341, 5341, 5342, 5342, 5342, 5342, 5342,
+     5342, 5342, 5342, 5342, 5342, 5342, 5342, 5342, 5342, 5342,
+     5342, 5342, 5342, 5343, 5343, 5343, 5343, 5343, 5343, 5343,
+     5343, 5343, 5343, 5343, 5343, 5343, 5343, 5343, 5343, 5343,
+     5343, 5344, 5344, 5344, 5344, 5344, 5344, 5344, 5344, 5344,
+
+     5344, 5344, 5344, 5344, 5344, 5344, 5344, 5344, 5344, 5345,
+     5345, 5345, 5345, 5345, 5345, 5345, 5345, 5345, 5345, 5345,
+     5345, 5345, 5345, 5345, 5345, 5345, 5345, 5346, 5346, 5346,
+     5346, 5346, 5346, 5346, 5346, 5346, 5346, 5346, 5346, 5346,
+     5346, 5346, 5346, 5346, 5346, 5347, 5347, 5347, 5347, 5347,
+     5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347, 5347,
+     5347, 5347, 5347, 5348, 5348, 5348, 5348, 5348, 5348, 5348,
+     5348, 5348, 5348, 5348, 5348, 5348, 5348, 5348, 5348, 5348,
+     5348, 5349, 5349, 5349, 5349, 5349, 5349, 5349, 5349, 5349,
+     5349, 5349, 5349, 5349, 5349, 5349, 5349, 5349, 5349, 5350,
+
+     5350, 5350, 5350, 5350, 5350, 5350, 5350, 5350, 5350, 5350,
+     5350, 5350, 5350, 5350, 5350, 5350, 5350, 5351, 5351, 5351,
+     5351, 5351, 5351, 5351, 5351, 5351, 5351, 5351, 5351, 5351,
+     5351, 5351, 5351, 5351, 5351, 5352, 5352, 5352, 5352, 5352,
+     5352, 5352, 5352, 5352, 5352, 5352, 5352, 5352, 5352, 5352,
+     5352, 5352, 5352, 5353, 5353, 5353, 5353, 5353, 5353, 5353,
+     5353, 5353, 5353, 5353, 5353, 5353, 5353, 5353, 5353, 5353,
+     5353, 5354, 5354, 5354, 5354, 5354, 5354, 5354, 5354, 5354,
+     5354, 5354, 5354, 5354, 5354, 5354, 5354, 5354, 5354, 5355,
+     5355, 5355, 5355, 5355, 5355, 5355, 5355, 5355, 5355, 5355,
+
+     5355, 5355, 5355, 5355, 5355, 5355, 5355, 5356, 5356, 5356,
+        0,    0, 5356,    0,    0,    0,    0,    0, 5356,    0,
+        0, 5356, 5356, 5356, 5357, 5357, 5357, 5357, 5357, 5357,
+     5357, 5357, 5357, 5357, 5357, 5357, 5357, 5357, 5357, 5357,
+     5357, 5357, 5358, 5358, 5358, 5358, 5358, 5358, 5358, 5358,
+     5358, 5358, 5358, 5358, 5358, 5358, 5358, 5358, 5358, 5358,
+     5359, 5359, 5359, 5359, 5359, 5359, 5359, 5359, 5359, 5359,
+     5359, 5359, 5359, 5359, 5359, 5359, 5359, 5359, 5360, 5360,
+     5360, 5360, 5360, 5360, 5360, 5360, 5360, 5360, 5360, 5360,
+     5360, 5360, 5360, 5360, 5360, 5360, 5361, 5361, 5361, 5361,
+
+     5361, 5361, 5361, 5361, 5361, 5361, 5361, 5361, 5361, 5361,
+     5361, 5361, 5361, 5361, 5362, 5362, 5362, 5362, 5362, 5362,
+     5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362, 5362,
+     5362, 5362, 5363, 5363, 5363, 5363, 5363, 5363, 5363, 5363,
+     5363, 5363, 5363, 5363, 5363, 5363, 5363, 5363, 5363, 5363,
+     5364, 5364, 5364, 5364, 5364, 5364, 5364, 5364, 5364, 5364,
+     5364, 5364, 5364, 5364, 5364, 5364, 5364, 5364, 5365, 5365,
+     5365, 5365, 5365, 5365, 5365, 5365, 5365, 5365, 5365, 5365,
+     5365, 5365, 5365, 5365, 5365, 5365, 5366, 5366, 5366, 5366,
+     5366, 5366, 5366, 5366, 5366, 5366, 5366, 5366, 5366, 5366,
+
+     5366, 5366, 5366, 5366, 5367, 5367, 5367, 5367, 5367, 5367,
+     5367, 5367, 5367, 5367, 5367, 5367, 5367, 5367, 5367, 5367,
+     5367, 5367, 5368, 5368, 5368, 5368, 5368, 5368, 5368, 5368,
+     5368, 5368, 5368, 5368, 5368, 5368, 5368, 5368, 5368, 5368,
+     5369, 5369, 5369, 5369, 5369, 5369, 5369, 5369, 5369, 5369,
+     5369, 5369, 5369, 5369, 5369, 5369, 5369, 5369, 5370, 5370,
+     5370, 5370, 5370, 5370, 5370, 5370, 5370, 5370, 5370, 5370,
+     5370, 5370, 5370, 5370, 5370, 5370, 5371, 5371, 5371, 5371,
+     5371, 5371, 5371, 5371, 5371, 5371, 5371, 5371, 5371, 5371,
+     5371, 5371, 5371, 5371, 5372, 5372, 5372, 5372, 5372, 5372,
+
+     5372, 5372, 5372, 5372, 5372, 5372, 5372, 5372, 5372, 5372,
+     5372, 5372, 5373, 5373, 5373, 5373, 5373, 5373, 5373, 5373,
+     5373, 5373, 5373, 5373, 5373, 5373, 5373, 5373, 5373, 5373,
+     5374, 5374, 5374, 5374, 5374, 5374, 5374, 5374, 5374, 5374,
+     5374, 5374, 5374, 5374, 5374, 5374, 5374, 5374, 5375, 5375,
+     5375, 5375, 5375, 5375, 5375, 5375, 5375, 5375, 5375, 5375,
+     5375, 5375, 5375, 5375, 5375, 5375, 5376, 5376, 5376,    0,
+     5376,    0,    0, 5376, 5376,    0,    0, 5376,    0,    0,
+     5376, 5376, 5376, 5377, 5377, 5377, 5377, 5377, 5377, 5377,
+     5377, 5377, 5377, 5377, 5377, 5377, 5377, 5377, 5377, 5377,
+
+     5377, 5378, 5378, 5378, 5378, 5378, 5378, 5378, 5378, 5378,
+     5378, 5378, 5378, 5378, 5378, 5378, 5378, 5378, 5378, 5379,
+     5379, 5379, 5379, 5379, 5379, 5379, 5379, 5379, 5379, 5379,
+     5379, 5379, 5379, 5379, 5379, 5379, 5379, 5380, 5380, 5380,
+     5380, 5380, 5380, 5380, 5380, 5380, 5380, 5380, 5380, 5380,
+     5380, 5380, 5380, 5380, 5380, 5381, 5381, 5381, 5381, 5381,
+     5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381, 5381,
+     5381, 5381, 5381, 5382, 5382, 5382, 5382, 5382, 5382, 5382,
+     5382, 5382, 5382, 5382, 5382, 5382, 5382, 5382, 5382, 5382,
+     5382, 5383, 5383, 5383, 5383, 5383, 5383, 5383, 5383, 5383,
+
+     5383, 5383, 5383, 5383, 5383, 5383, 5383, 5383, 5383, 5384,
+     5384, 5384, 5384, 5384, 5384, 5384, 5384, 5384, 5384, 5384,
+     5384, 5384, 5384, 5384, 5384, 5384, 5384, 5385, 5385, 5385,
+     5385, 5385, 5385, 5385, 5385, 5385, 5385, 5385, 5385, 5385,
+     5385, 5385, 5385, 5385, 5385, 5386, 5386, 5386, 5386, 5386,
+     5386, 5386, 5386, 5386, 5386, 5386, 5386, 5386, 5386, 5386,
+     5386, 5386, 5386, 5387, 5387, 5387, 5387, 5387, 5387, 5387,
+     5387, 5387, 5387, 5387, 5387, 5387, 5387, 5387, 5387, 5387,
+     5387, 5388, 5388, 5388,    0,    0, 5388, 5388,    0, 5388,
+     5388, 5388, 5388, 5388,    0, 5388, 5388, 5389, 5389, 5389,
+
+     5389, 5389, 5389, 5389, 5389, 5389, 5389, 5389, 5389, 5389,
+     5389, 5389, 5389, 5389, 5389, 5390, 5390, 5390,    0,    0,
+     5390, 5390,    0, 5390, 5390, 5390, 5390, 5390,    0, 5390,
+     5390, 5391, 5391, 5391, 5391, 5391, 5391, 5391, 5391, 5391,
+     5391, 5391, 5391, 5391, 5391, 5391, 5391, 5391, 5391, 5392,
+     5392, 5392, 5392, 5392, 5392, 5392, 5392, 5392, 5392, 5392,
+     5392, 5392, 5392, 5392, 5392, 5392, 5392, 5393, 5393, 5393,
+     5393, 5393, 5393, 5393, 5393, 5393, 5393, 5393, 5393, 5393,
+     5393, 5393, 5393, 5393, 5393, 5394, 5394, 5394, 5394, 5394,
+     5394, 5394, 5394, 5394, 5394, 5394, 5394, 5394, 5394, 5394,
+
+     5394, 5394, 5394, 5395, 5395, 5395, 5395, 5395, 5395, 5395,
+     5395, 5395, 5395, 5395, 5395, 5395, 5395, 5395, 5395, 5395,
+     5395, 5396, 5396, 5396, 5396, 5396, 5396, 5396, 5396, 5396,
+     5396, 5396, 5396, 5396, 5396, 5396, 5396, 5396, 5396, 5397,
+     5397, 5397, 5397, 5397, 5397, 5397, 5397, 5397, 5397, 5397,
+     5397, 5397, 5397, 5397, 5397, 5397, 5397, 5398, 5398, 5398,
+     5398, 5398, 5398, 5398, 5398, 5398, 5398, 5398, 5398, 5398,
+     5398, 5398, 5398, 5398, 5398, 5399, 5399, 5399, 5399, 5399,
+     5399, 5399, 5399, 5399, 5399, 5399, 5399, 5399, 5399, 5399,
+     5399, 5399, 5399, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+
+     5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400,
+     5400, 5401, 5401, 5401, 5401, 5401, 5401, 5401, 5401, 5401,
+     5401, 5401, 5401, 5401, 5401, 5401, 5401, 5401, 5401, 5402,
+     5402, 5402, 5402, 5402, 5402, 5402, 5402, 5402, 5402, 5402,
+     5402, 5402, 5402, 5402, 5402, 5402, 5402, 5403, 5403, 5403,
+     5403, 5403, 5403, 5403, 5403, 5403, 5403, 5403, 5403, 5403,
+     5403, 5403, 5403, 5403, 5403, 5404, 5404, 5404, 5404, 5404,
+     5404, 5404, 5404, 5404, 5404, 5404, 5404, 5404, 5404, 5404,
+     5404, 5404, 5404, 5405, 5405, 5405, 5405, 5405, 5405, 5405,
+     5405, 5405, 5405, 5405, 5405, 5405, 5405, 5405, 5405, 5405,
+
+     5405, 5406, 5406, 5406, 5406, 5406, 5406, 5406, 5406, 5406,
+     5406, 5406, 5406, 5406, 5406, 5406, 5406, 5406, 5406, 5407,
+     5407, 5407, 5407, 5407, 5407, 5407, 5407, 5407, 5407, 5407,
+     5407, 5407, 5407, 5407, 5407, 5407, 5407, 5408, 5408, 5408,
+     5408, 5408, 5408, 5408, 5408, 5408, 5408, 5408, 5408, 5408,
+     5408, 5408, 5408, 5408, 5408, 5409, 5409, 5409, 5409, 5409,
+     5409, 5409, 5409, 5409, 5409, 5409, 5409, 5409, 5409, 5409,
+     5409, 5409, 5409, 5410, 5410, 5410, 5410, 5410, 5410, 5410,
+     5410, 5410, 5410, 5410, 5410, 5410, 5410, 5410, 5410, 5410,
+     5410, 5411, 5411, 5411, 5411, 5411, 5411, 5411, 5411, 5411,
+
+     5411, 5411, 5411, 5411, 5411, 5411, 5411, 5411, 5411, 5412,
+     5412, 5412, 5412, 5412, 5412, 5412, 5412, 5412, 5412, 5412,
+     5412, 5412, 5412, 5412, 5412, 5412, 5412, 5413, 5413, 5413,
+     5413, 5413, 5413, 5413, 5413, 5413, 5413, 5413, 5413, 5413,
+     5413, 5413, 5413, 5413, 5413, 5414, 5414, 5414, 5414, 5414,
+     5414, 5414, 5414, 5414, 5414, 5414, 5414, 5414, 5414, 5414,
+     5414, 5414, 5414, 5415, 5415, 5415, 5415, 5415, 5415, 5415,
+     5415, 5415, 5415, 5415, 5415, 5415, 5415, 5415, 5415, 5415,
+     5415, 5416, 5416, 5416, 5416, 5416, 5416, 5416, 5416, 5416,
+     5416, 5416, 5416, 5416, 5416, 5416, 5416, 5416, 5416, 5417,
+
+     5417, 5417, 5417, 5417, 5417, 5417, 5417, 5417, 5417, 5417,
+     5417, 5417, 5417, 5417, 5417, 5417, 5417, 5418, 5418, 5418,
+     5418, 5418, 5418, 5418, 5418, 5418, 5418, 5418, 5418, 5418,
+     5418, 5418, 5418, 5418, 5418, 5419, 5419, 5419, 5419, 5419,
+     5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419, 5419,
+     5419, 5419, 5419, 5420, 5420, 5420, 5420, 5420, 5420, 5420,
+     5420, 5420, 5420, 5420, 5420, 5420, 5420, 5420, 5420, 5420,
+     5420, 5421, 5421, 5421, 5421, 5421, 5421, 5421, 5421, 5421,
+     5421, 5421, 5421, 5421, 5421, 5421, 5421, 5421, 5421, 5422,
+     5422, 5422, 5422, 5422, 5422, 5422, 5422, 5422, 5422, 5422,
+
+     5422, 5422, 5422, 5422, 5422, 5422, 5422, 5423, 5423, 5423,
+     5423, 5423, 5423, 5423, 5423, 5423, 5423, 5423, 5423, 5423,
+     5423, 5423, 5423, 5423, 5423, 5424, 5424, 5424, 5424, 5424,
+     5424, 5424, 5424, 5424, 5424, 5424, 5424, 5424, 5424, 5424,
+     5424, 5424, 5424, 5425, 5425, 5425, 5425, 5425, 5425, 5425,
+     5425, 5425, 5425, 5425, 5425, 5425, 5425, 5425, 5425, 5425,
+     5425, 5426, 5426, 5426,    0, 5426,    0,    0, 5426, 5426,
+        0,    0, 5426,    0,    0, 5426, 5426, 5426, 5427, 5427,
+     5427,    0,    0, 5427, 5427,    0, 5427, 5427, 5427, 5427,
+     5427,    0, 5427, 5427, 5428, 5428, 5428,    0,    0, 5428,
+
+     5428,    0, 5428, 5428, 5428, 5428, 5428,    0, 5428, 5428,
+     5429, 5429, 5429, 5429, 5429, 5429, 5429, 5429, 5429, 5429,
+     5429, 5429, 5429, 5429, 5429, 5429, 5429, 5429, 5430, 5430,
+     5430, 5430, 5430, 5430, 5430, 5430, 5430, 5430, 5430, 5430,
+     5430, 5430, 5430, 5430, 5430, 5430, 5431, 5431, 5431, 5431,
+     5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431, 5431,
+     5431, 5431, 5431, 5431, 5432, 5432, 5432, 5432, 5432, 5432,
+     5432, 5432, 5432, 5432, 5432, 5432, 5432, 5432, 5432, 5432,
+     5432, 5432, 5433, 5433, 5433, 5433, 5433, 5433, 5433, 5433,
+     5433, 5433, 5433, 5433, 5433, 5433, 5433, 5433, 5433, 5433,
+
+     5434, 5434, 5434, 5434, 5434, 5434, 5434, 5434, 5434, 5434,
+     5434, 5434, 5434, 5434, 5434, 5434, 5434, 5434, 5435, 5435,
+     5435, 5435, 5435, 5435, 5435, 5435, 5435, 5435, 5435, 5435,
+     5435, 5435, 5435, 5435, 5435, 5435, 5436, 5436, 5436, 5436,
+     5436, 5436, 5436, 5436, 5436, 5436, 5436, 5436, 5436, 5436,
+     5436, 5436, 5436, 5436, 5437, 5437, 5437, 5437, 5437, 5437,
+     5437, 5437, 5437, 5437, 5437, 5437, 5437, 5437, 5437, 5437,
+     5437, 5437, 5438, 5438, 5438, 5438, 5438, 5438, 5438, 5438,
+     5438, 5438, 5438, 5438, 5438, 5438, 5438, 5438, 5438, 5438,
+     5439, 5439, 5439, 5439, 5439, 5439, 5439, 5439, 5439, 5439,
+
+     5439, 5439, 5439, 5439, 5439, 5439, 5439, 5439, 5440, 5440,
+     5440, 5440, 5440, 5440, 5440, 5440, 5440, 5440, 5440, 5440,
+     5440, 5440, 5440, 5440, 5440, 5440, 5441, 5441, 5441, 5441,
+     5441, 5441, 5441, 5441, 5441, 5441, 5441, 5441, 5441, 5441,
+     5441, 5441, 5441, 5441, 5442, 5442, 5442, 5442, 5442, 5442,
+     5442, 5442, 5442, 5442, 5442, 5442, 5442, 5442, 5442, 5442,
+     5442, 5442, 5443, 5443, 5443, 5443, 5443, 5443, 5443, 5443,
+     5443, 5443, 5443, 5443, 5443, 5443, 5443, 5443, 5443, 5443,
+     5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444,
+     5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5445, 5445,
+
+     5445, 5445, 5445, 5445, 5445, 5445, 5445, 5445, 5445, 5445,
+     5445, 5445, 5445, 5445, 5445, 5445, 5446, 5446, 5446, 5446,
+     5446, 5446, 5446, 5446, 5446, 5446, 5446, 5446, 5446, 5446,
+     5446, 5446, 5446, 5446, 5447, 5447, 5447, 5447, 5447, 5447,
+     5447, 5447, 5447, 5447, 5447, 5447, 5447, 5447, 5447, 5447,
+     5447, 5447, 5448, 5448, 5448, 5448, 5448, 5448, 5448, 5448,
+     5448, 5448, 5448, 5448, 5448, 5448, 5448, 5448, 5448, 5448,
+     5449, 5449, 5449, 5449, 5449, 5449, 5449, 5449, 5449, 5449,
+     5449, 5449, 5449, 5449, 5449, 5449, 5449, 5449, 5450, 5450,
+     5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450, 5450,
+
+     5450, 5450, 5450, 5450, 5450, 5450, 5451, 5451, 5451, 5451,
+     5451, 5451, 5451, 5451, 5451, 5451, 5451, 5451, 5451, 5451,
+     5451, 5451, 5451, 5451, 5452, 5452, 5452, 5452, 5452, 5452,
+     5452, 5452, 5452, 5452, 5452, 5452, 5452, 5452, 5452, 5452,
+     5452, 5452, 5453, 5453, 5453, 5453, 5453, 5453, 5453, 5453,
+     5453, 5453, 5453, 5453, 5453, 5453, 5453, 5453, 5453, 5453,
+     5454, 5454, 5454, 5454, 5454, 5454, 5454, 5454, 5454, 5454,
+     5454, 5454, 5454, 5454, 5454, 5454, 5454, 5454, 5455, 5455,
+     5455, 5455, 5455, 5455, 5455, 5455, 5455, 5455, 5455, 5455,
+     5455, 5455, 5455, 5455, 5455, 5455, 5456, 5456, 5456, 5456,
+
+     5456, 5456, 5456, 5456, 5456, 5456, 5456, 5456, 5456, 5456,
+     5456, 5456, 5456, 5456, 5457, 5457, 5457, 5457, 5457, 5457,
+     5457, 5457, 5457, 5457, 5457, 5457, 5457, 5457, 5457, 5457,
+     5457, 5457, 5458, 5458, 5458, 5458, 5458, 5458, 5458, 5458,
+     5458, 5458, 5458, 5458, 5458, 5458, 5458, 5458, 5458, 5458,
+     5459, 5459, 5459, 5459, 5459, 5459, 5459, 5459, 5459, 5459,
+     5459, 5459, 5459, 5459, 5459, 5459, 5459, 5459, 5460, 5460,
+     5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460, 5460,
+     5460, 5460, 5460, 5460, 5460, 5460, 5461, 5461, 5461, 5461,
+     5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461, 5461,
+
+     5461, 5461, 5461, 5461, 5462, 5462, 5462, 5462, 5462, 5462,
+     5462, 5462, 5462, 5462, 5462, 5462, 5462, 5462, 5462, 5462,
+     5462, 5462, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463,
+     5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463, 5463,
+     5464, 5464, 5464, 5464, 5464, 5464, 5464, 5464, 5464, 5464,
+     5464, 5464, 5464, 5464, 5464, 5464, 5464, 5464, 5465, 5465,
+     5465, 5465, 5465, 5465, 5465, 5465, 5465, 5465, 5465, 5465,
+     5465, 5465, 5465, 5465, 5465, 5465, 5466, 5466, 5466, 5466,
+     5466, 5466, 5466, 5466, 5466, 5466, 5466, 5466, 5466, 5466,
+     5466, 5466, 5466, 5466, 5467, 5467, 5467, 5467, 5467, 5467,
+
+     5467, 5467, 5467, 5467, 5467, 5467, 5467, 5467, 5467, 5467,
+     5467, 5467, 5468, 5468, 5468, 5468, 5468, 5468, 5468, 5468,
+     5468, 5468, 5468, 5468, 5468, 5468, 5468, 5468, 5468, 5468,
+     5469, 5469, 5469, 5469, 5469, 5469, 5469, 5469, 5469, 5469,
+     5469, 5469, 5469, 5469, 5469, 5469, 5469, 5469, 5470, 5470,
+     5470, 5470, 5470, 5470, 5470, 5470, 5470, 5470, 5470, 5470,
+     5470, 5470, 5470, 5470, 5470, 5470, 5471, 5471, 5471, 5471,
+     5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471, 5471,
+     5471, 5471, 5471, 5471, 5472, 5472, 5472, 5472, 5472, 5472,
+     5472, 5472, 5472, 5472, 5472, 5472, 5472, 5472, 5472, 5472,
+
+     5472, 5472, 5473, 5473, 5473, 5473, 5473, 5473, 5473, 5473,
+     5473, 5473, 5473, 5473, 5473, 5473, 5473, 5473, 5473, 5473,
+     5474, 5474, 5474, 5474, 5474, 5474, 5474, 5474, 5474, 5474,
+     5474, 5474, 5474, 5474, 5474, 5474, 5474, 5474, 5475, 5475,
+     5475, 5475, 5475, 5475, 5475, 5475, 5475, 5475, 5475, 5475,
+     5475, 5475, 5475, 5475, 5475, 5475, 5476, 5476, 5476, 5476,
+     5476, 5476, 5476, 5476, 5476, 5476, 5476, 5476, 5476, 5476,
+     5476, 5476, 5476, 5476, 5477, 5477, 5477, 5477, 5477, 5477,
+     5477, 5477, 5477, 5477, 5477, 5477, 5477, 5477, 5477, 5477,
+     5477, 5477, 5478, 5478, 5478, 5478, 5478, 5478, 5478, 5478,
+
+     5478, 5478, 5478, 5478, 5478, 5478, 5478, 5478, 5478, 5478,
+     5479, 5479, 5479, 5479, 5479, 5479, 5479, 5479, 5479, 5479,
+     5479, 5479, 5479, 5479, 5479, 5479, 5479, 5479, 5480, 5480,
+     5480, 5480, 5480, 5480, 5480, 5480, 5480, 5480, 5480, 5480,
+     5480, 5480, 5480, 5480, 5480, 5480, 5481, 5481, 5481, 5481,
+     5481, 5481, 5481, 5481, 5481, 5481, 5481, 5481, 5481, 5481,
+     5481, 5481, 5481, 5481, 5482, 5482, 5482, 5482, 5482, 5482,
+     5482, 5482, 5482, 5482, 5482, 5482, 5482, 5482, 5482, 5482,
+     5482, 5482, 5483, 5483, 5483, 5483, 5483, 5483, 5483, 5483,
+     5483, 5483, 5483, 5483, 5483, 5483, 5483, 5483, 5483, 5483,
+
+     5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484,
+     5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 5485, 5485,
+     5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485,
+     5485, 5485, 5485, 5485, 5485, 5485, 5486, 5486, 5486, 5486,
+     5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486, 5486,
+     5486, 5486, 5486, 5486, 5487, 5487, 5487, 5487, 5487, 5487,
+     5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487,
+     5487, 5487, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488,
+     5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488, 5488,
+     5489, 5489, 5489, 5489, 5489, 5489, 5489, 5489, 5489, 5489,
+
+     5489, 5489, 5489, 5489, 5489, 5489, 5489, 5489, 5490, 5490,
+     5490,    0,    0, 5490, 5490,    0, 5490, 5490, 5490, 5490,
+     5490,    0, 5490, 5490, 5491, 5491, 5491, 5491, 5491, 5491,
+     5491, 5491, 5491, 5491, 5491, 5491, 5491, 5491, 5491, 5491,
+     5491, 5491, 5492, 5492, 5492, 5492, 5492, 5492, 5492, 5492,
+     5492, 5492, 5492, 5492, 5492, 5492, 5492, 5492, 5492, 5492,
+     5493, 5493, 5493, 5493, 5493, 5493, 5493, 5493, 5493, 5493,
+     5493, 5493, 5493, 5493, 5493, 5493, 5493, 5493, 5494, 5494,
+     5494, 5494, 5494, 5494, 5494, 5494, 5494, 5494, 5494, 5494,
+     5494, 5494, 5494, 5494, 5494, 5494, 5495, 5495, 5495, 5495,
+
+     5495, 5495, 5495, 5495, 5495, 5495, 5495, 5495, 5495, 5495,
+     5495, 5495, 5495, 5495, 5496, 5496, 5496, 5496, 5496, 5496,
+     5496, 5496, 5496, 5496, 5496, 5496, 5496, 5496, 5496, 5496,
+     5496, 5496, 5497, 5497, 5497, 5497, 5497, 5497, 5497, 5497,
+     5497, 5497, 5497, 5497, 5497, 5497, 5497, 5497, 5497, 5497,
+     5498, 5498, 5498, 5498, 5498, 5498, 5498, 5498, 5498, 5498,
+     5498, 5498, 5498, 5498, 5498, 5498, 5498, 5498, 5499, 5499,
+     5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499, 5499,
+     5499, 5499, 5499, 5499, 5499, 5499, 5500, 5500, 5500, 5500,
+     5500, 5500, 5500, 5500, 5500, 5500, 5500, 5500, 5500, 5500,
+
+     5500, 5500, 5500, 5500, 5501, 5501, 5501, 5501, 5501, 5501,
+     5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501, 5501,
+     5501, 5501, 5502, 5502, 5502, 5502, 5502, 5502, 5502, 5502,
+     5502, 5502, 5502, 5502, 5502, 5502, 5502, 5502, 5502, 5502,
+     5503, 5503, 5503, 5503, 5503, 5503, 5503, 5503, 5503, 5503,
+     5503, 5503, 5503, 5503, 5503, 5503, 5503, 5503, 5504, 5504,
+     5504, 5504, 5504, 5504, 5504, 5504, 5504, 5504, 5504, 5504,
+     5504, 5504, 5504, 5504, 5504, 5504, 5505, 5505, 5505, 5505,
+     5505, 5505, 5505, 5505, 5505, 5505, 5505, 5505, 5505, 5505,
+     5505, 5505, 5505, 5505, 5506, 5506, 5506, 5506, 5506, 5506,
+
+     5506, 5506, 5506, 5506, 5506, 5506, 5506, 5506, 5506, 5506,
+     5506, 5506, 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507,
+     5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507, 5507,
+     5508, 5508, 5508, 5508, 5508, 5508, 5508, 5508, 5508, 5508,
+     5508, 5508, 5508, 5508, 5508, 5508, 5508, 5508, 5509, 5509,
+     5509, 5509, 5509, 5509, 5509, 5509, 5509, 5509, 5509, 5509,
+     5509, 5509, 5509, 5509, 5509, 5509, 5510, 5510, 5510, 5510,
+     5510, 5510, 5510, 5510, 5510, 5510, 5510, 5510, 5510, 5510,
+     5510, 5510, 5510, 5510, 5511, 5511, 5511, 5511, 5511, 5511,
+     5511, 5511, 5511, 5511, 5511, 5511, 5511, 5511, 5511, 5511,
+
+     5511, 5511, 5512, 5512, 5512, 5512, 5512, 5512, 5512, 5512,
+     5512, 5512, 5512, 5512, 5512, 5512, 5512, 5512, 5512, 5512,
+     5513, 5513, 5513, 5513, 5513, 5513, 5513, 5513, 5513, 5513,
+     5513, 5513, 5513, 5513, 5513, 5513, 5513, 5513, 5514, 5514,
+     5514, 5514, 5514, 5514, 5514, 5514, 5514, 5514, 5514, 5514,
+     5514, 5514, 5514, 5514, 5514, 5514, 5515, 5515, 5515, 5515,
+     5515, 5515, 5515, 5515, 5515, 5515, 5515, 5515, 5515, 5515,
+     5515, 5515, 5515, 5515, 5516, 5516, 5516, 5516, 5516, 5516,
+     5516, 5516, 5516, 5516, 5516, 5516, 5516, 5516, 5516, 5516,
+     5516, 5516, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
+
+     5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
+     5518, 5518, 5518, 5518, 5518, 5518, 5518, 5518, 5518, 5518,
+     5518, 5518, 5518, 5518, 5518, 5518, 5518, 5518, 5519, 5519,
+     5519, 5519, 5519, 5519, 5519, 5519, 5519, 5519, 5519, 5519,
+     5519, 5519, 5519, 5519, 5519, 5519, 5520, 5520, 5520, 5520,
+     5520, 5520, 5520, 5520, 5520, 5520, 5520, 5520, 5520, 5520,
+     5520, 5520, 5520, 5520, 5521, 5521, 5521, 5521, 5521, 5521,
+     5521, 5521, 5521, 5521, 5521, 5521, 5521, 5521, 5521, 5521,
+     5521, 5521, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522,
+     5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522,
+
+     5523, 5523, 5523, 5523, 5523, 5523, 5523, 5523, 5523, 5523,
+     5523, 5523, 5523, 5523, 5523, 5523, 5523, 5523, 5524, 5524,
+     5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
+     5524, 5524, 5524, 5524, 5524, 5524, 5525, 5525, 5525, 5525,
+     5525, 5525, 5525, 5525, 5525, 5525, 5525, 5525, 5525, 5525,
+     5525, 5525, 5525, 5525, 5526, 5526, 5526,    0,    0, 5526,
+        0,    0,    0,    0,    0, 5526,    0,    0, 5526, 5526,
+     5527, 5527, 5527, 5527, 5527, 5527, 5527, 5527, 5527, 5527,
+     5527, 5527, 5527, 5527, 5527, 5527, 5527, 5527, 5528, 5528,
+     5528, 5528, 5528, 5528, 5528, 5528, 5528, 5528, 5528, 5528,
+
+     5528, 5528, 5528, 5528, 5528, 5528, 5529, 5529, 5529, 5529,
+     5529, 5529, 5529, 5529, 5529, 5529, 5529, 5529, 5529, 5529,
+     5529, 5529, 5529, 5529, 5530, 5530, 5530, 5530, 5530, 5530,
+     5530, 5530, 5530, 5530, 5530, 5530, 5530, 5530, 5530, 5530,
+     5530, 5530, 5531, 5531, 5531, 5531, 5531, 5531, 5531, 5531,
+     5531, 5531, 5531, 5531, 5531, 5531, 5531, 5531, 5531, 5531,
+     5532, 5532, 5532, 5532, 5532, 5532, 5532, 5532, 5532, 5532,
+     5532, 5532, 5532, 5532, 5532, 5532, 5532, 5532, 5533, 5533,
+     5533, 5533, 5533, 5533, 5533, 5533, 5533, 5533, 5533, 5533,
+     5533, 5533, 5533, 5533, 5533, 5533, 5534, 5534, 5534, 5534,
+
+     5534, 5534, 5534, 5534, 5534, 5534, 5534, 5534, 5534, 5534,
+     5534, 5534, 5534, 5534, 5535, 5535, 5535, 5535, 5535, 5535,
+     5535, 5535, 5535, 5535, 5535, 5535, 5535, 5535, 5535, 5535,
+     5535, 5535, 5536, 5536, 5536, 5536, 5536, 5536, 5536, 5536,
+     5536, 5536, 5536, 5536, 5536, 5536, 5536, 5536, 5536, 5536,
+     5537, 5537, 5537, 5537, 5537, 5537, 5537, 5537, 5537, 5537,
+     5537, 5537, 5537, 5537, 5537, 5537, 5537, 5537, 5538, 5538,
+     5538, 5538, 5538, 5538, 5538, 5538, 5538, 5538, 5538, 5538,
+     5538, 5538, 5538, 5538, 5538, 5538, 5539, 5539, 5539, 5539,
+     5539, 5539, 5539, 5539, 5539, 5539, 5539, 5539, 5539, 5539,
+
+     5539, 5539, 5539, 5539, 5540, 5540, 5540, 5540, 5540, 5540,
+     5540, 5540, 5540, 5540, 5540, 5540, 5540, 5540, 5540, 5540,
+     5540, 5540, 5541, 5541, 5541, 5541, 5541, 5541, 5541, 5541,
+     5541, 5541, 5541, 5541, 5541, 5541, 5541, 5541, 5541, 5541,
+     5542, 5542, 5542, 5542, 5542, 5542, 5542, 5542, 5542, 5542,
+     5542, 5542, 5542, 5542, 5542, 5542, 5542, 5542, 5543, 5543,
+     5543, 5543, 5543, 5543, 5543, 5543, 5543, 5543, 5543, 5543,
+     5543, 5543, 5543, 5543, 5543, 5543, 5544, 5544, 5544, 5544,
+     5544, 5544, 5544, 5544, 5544, 5544, 5544, 5544, 5544, 5544,
+     5544, 5544, 5544, 5544, 5545, 5545, 5545, 5545, 5545, 5545,
+
+     5545, 5545, 5545, 5545, 5545, 5545, 5545, 5545, 5545, 5545,
+     5545, 5545, 5546, 5546, 5546, 5546, 5546, 5546, 5546, 5546,
+     5546, 5546, 5546, 5546, 5546, 5546, 5546, 5546, 5546, 5546,
+     5547, 5547, 5547, 5547, 5547, 5547, 5547, 5547, 5547, 5547,
+     5547, 5547, 5547, 5547, 5547, 5547, 5547, 5547, 5548, 5548,
+     5548, 5548, 5548, 5548, 5548, 5548, 5548, 5548, 5548, 5548,
+     5548, 5548, 5548, 5548, 5548, 5548, 5549, 5549, 5549, 5549,
+     5549, 5549, 5549, 5549, 5549, 5549, 5549, 5549, 5549, 5549,
+     5549, 5549, 5549, 5549, 5550, 5550, 5550, 5550, 5550, 5550,
+     5550, 5550, 5550, 5550, 5550, 5550, 5550, 5550, 5550, 5550,
+
+     5550, 5550, 5551, 5551, 5551, 5551, 5551, 5551, 5551, 5551,
+     5551, 5551, 5551, 5551, 5551, 5551, 5551, 5551, 5551, 5551,
+     5552, 5552, 5552, 5552, 5552, 5552, 5552, 5552, 5552, 5552,
+     5552, 5552, 5552, 5552, 5552, 5552, 5552, 5552, 5553, 5553,
+     5553, 5553, 5553, 5553, 5553, 5553, 5553, 5553, 5553, 5553,
+     5553, 5553, 5553, 5553, 5553, 5553, 5554, 5554, 5554, 5554,
+     5554, 5554, 5554, 5554, 5554, 5554, 5554, 5554, 5554, 5554,
+     5554, 5554, 5554, 5554, 5555, 5555, 5555, 5555, 5555, 5555,
+     5555, 5555, 5555, 5555, 5555, 5555, 5555, 5555, 5555, 5555,
+     5555, 5555, 5556, 5556, 5556, 5556, 5556, 5556, 5556, 5556,
+
+     5556, 5556, 5556, 5556, 5556, 5556, 5556, 5556, 5556, 5556,
+     5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557,
+     5557, 5557, 5557, 5557, 5557, 5557, 5557, 5557, 5558, 5558,
+     5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558, 5558,
+     5558, 5558, 5558, 5558, 5558, 5558, 5559, 5559, 5559, 5559,
+     5559, 5559, 5559, 5559, 5559, 5559, 5559, 5559, 5559, 5559,
+     5559, 5559, 5559, 5559, 5560, 5560, 5560, 5560, 5560, 5560,
+     5560, 5560, 5560, 5560, 5560, 5560, 5560, 5560, 5560, 5560,
+     5560, 5560, 5561, 5561, 5561, 5561, 5561, 5561, 5561, 5561,
+     5561, 5561, 5561, 5561, 5561, 5561, 5561, 5561, 5561, 5561,
+
+     5562, 5562, 5562, 5562, 5562, 5562, 5562, 5562, 5562, 5562,
+     5562, 5562, 5562, 5562, 5562, 5562, 5562, 5562, 5563, 5563,
+     5563, 5563, 5563, 5563, 5563, 5563, 5563, 5563, 5563, 5563,
+     5563, 5563, 5563, 5563, 5563, 5563, 5564, 5564, 5564, 5564,
+     5564, 5564, 5564, 5564, 5564, 5564, 5564, 5564, 5564, 5564,
+     5564, 5564, 5564, 5564, 5565, 5565, 5565, 5565, 5565, 5565,
+     5565, 5565, 5565, 5565, 5565, 5565, 5565, 5565, 5565, 5565,
+     5565, 5565, 5566, 5566, 5566, 5566, 5566, 5566, 5566, 5566,
+     5566, 5566, 5566, 5566, 5566, 5566, 5566, 5566, 5566, 5566,
+     5567, 5567, 5567, 5567, 5567, 5567, 5567, 5567, 5567, 5567,
+
+     5567, 5567, 5567, 5567, 5567, 5567, 5567, 5567, 5568, 5568,
+     5568, 5568, 5568, 5568, 5568, 5568, 5568, 5568, 5568, 5568,
+     5568, 5568, 5568, 5568, 5568, 5568, 5569, 5569, 5569, 5569,
+     5569, 5569, 5569, 5569, 5569, 5569, 5569, 5569, 5569, 5569,
+     5569, 5569, 5569, 5569, 5570, 5570, 5570, 5570, 5570, 5570,
+     5570, 5570, 5570, 5570, 5570, 5570, 5570, 5570, 5570, 5570,
+     5570, 5570, 5571, 5571, 5571, 5571, 5571, 5571, 5571, 5571,
+     5571, 5571, 5571, 5571, 5571, 5571, 5571, 5571, 5571, 5571,
+     5572, 5572, 5572, 5572, 5572, 5572, 5572, 5572, 5572, 5572,
+     5572, 5572, 5572, 5572, 5572, 5572, 5572, 5572, 5573, 5573,
+
+     5573, 5573, 5573, 5573, 5573, 5573, 5573, 5573, 5573, 5573,
+     5573, 5573, 5573, 5573, 5573, 5573, 5574, 5574, 5574, 5574,
+     5574, 5574, 5574, 5574, 5574, 5574, 5574, 5574, 5574, 5574,
+     5574, 5574, 5574, 5574, 5575, 5575, 5575, 5575, 5575, 5575,
+     5575, 5575, 5575, 5575, 5575, 5575, 5575, 5575, 5575, 5575,
+     5575, 5575, 5576, 5576, 5576, 5576, 5576, 5576, 5576, 5576,
+     5576, 5576, 5576, 5576, 5576, 5576, 5576, 5576, 5576, 5576,
+     5577, 5577, 5577, 5577, 5577, 5577, 5577, 5577, 5577, 5577,
+     5577, 5577, 5577, 5577, 5577, 5577, 5577, 5577, 5578, 5578,
+     5578, 5578, 5578, 5578, 5578, 5578, 5578, 5578, 5578, 5578,
+
+     5578, 5578, 5578, 5578, 5578, 5578, 5579, 5579, 5579, 5579,
+     5579, 5579, 5579, 5579, 5579, 5579, 5579, 5579, 5579, 5579,
+     5579, 5579, 5579, 5579, 5580, 5580, 5580, 5580, 5580, 5580,
+     5580, 5580, 5580, 5580, 5580, 5580, 5580, 5580, 5580, 5580,
+     5580, 5580, 5581, 5581, 5581, 5581, 5581, 5581, 5581, 5581,
+     5581, 5581, 5581, 5581, 5581, 5581, 5581, 5581, 5581, 5581,
+     5582, 5582, 5582, 5582, 5582, 5582, 5582, 5582, 5582, 5582,
+     5582, 5582, 5582, 5582, 5582, 5582, 5582, 5582, 5583, 5583,
+     5583, 5583, 5583, 5583, 5583, 5583, 5583, 5583, 5583, 5583,
+     5583, 5583, 5583, 5583, 5583, 5583, 5584, 5584, 5584, 5584,
+
+     5584, 5584, 5584, 5584, 5584, 5584, 5584, 5584, 5584, 5584,
+     5584, 5584, 5584, 5584, 5585, 5585, 5585, 5585, 5585, 5585,
+     5585, 5585, 5585, 5585, 5585, 5585, 5585, 5585, 5585, 5585,
+     5585, 5585, 5586, 5586, 5586,    0,    0, 5586,    0, 5586,
+     5586,    0,    0, 5586,    0,    0, 5586, 5586, 5586, 5587,
+     5587, 5587, 5587, 5587, 5587, 5587, 5587, 5587, 5587, 5587,
+     5587, 5587, 5587, 5587, 5587, 5587, 5587, 5588, 5588, 5588,
+     5588, 5588, 5588, 5588, 5588, 5588, 5588, 5588, 5588, 5588,
+     5588, 5588, 5588, 5588, 5588, 5589, 5589, 5589, 5589, 5589,
+     5589, 5589, 5589, 5589, 5589, 5589, 5589, 5589, 5589, 5589,
+
+     5589, 5589, 5589, 5590, 5590, 5590, 5590, 5590, 5590, 5590,
+     5590, 5590, 5590, 5590, 5590, 5590, 5590, 5590, 5590, 5590,
+     5590, 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5591,
+     5591, 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5591, 5592,
+     5592, 5592, 5592, 5592, 5592, 5592, 5592, 5592, 5592, 5592,
+     5592, 5592, 5592, 5592, 5592, 5592, 5592, 5593, 5593, 5593,
+     5593, 5593, 5593, 5593, 5593, 5593, 5593, 5593, 5593, 5593,
+     5593, 5593, 5593, 5593, 5593, 5594, 5594, 5594, 5594, 5594,
+     5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594, 5594,
+     5594, 5594, 5594, 5595, 5595, 5595, 5595, 5595, 5595, 5595,
+
+     5595, 5595, 5595, 5595, 5595, 5595, 5595, 5595, 5595, 5595,
+     5595, 5596, 5596, 5596, 5596, 5596, 5596, 5596, 5596, 5596,
+     5596, 5596, 5596, 5596, 5596, 5596, 5596, 5596, 5596, 5597,
+     5597, 5597, 5597, 5597, 5597, 5597, 5597, 5597, 5597, 5597,
+     5597, 5597, 5597, 5597, 5597, 5597, 5597, 5598, 5598, 5598,
+     5598, 5598, 5598, 5598, 5598, 5598, 5598, 5598, 5598, 5598,
+     5598, 5598, 5598, 5598, 5598, 5599, 5599, 5599, 5599, 5599,
+     5599, 5599, 5599, 5599, 5599, 5599, 5599, 5599, 5599, 5599,
+     5599, 5599, 5599, 5600, 5600, 5600, 5600, 5600, 5600, 5600,
+     5600, 5600, 5600, 5600, 5600, 5600, 5600, 5600, 5600, 5600,
+
+     5600, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601,
+     5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5601, 5602,
+     5602, 5602, 5602, 5602, 5602, 5602, 5602, 5602, 5602, 5602,
+     5602, 5602, 5602, 5602, 5602, 5602, 5602, 5603, 5603, 5603,
+     5603, 5603, 5603, 5603, 5603, 5603, 5603, 5603, 5603, 5603,
+     5603, 5603, 5603, 5603, 5603, 5604, 5604, 5604, 5604, 5604,
+     5604, 5604, 5604, 5604, 5604, 5604, 5604, 5604, 5604, 5604,
+     5604, 5604, 5604, 5605, 5605, 5605, 5605, 5605, 5605, 5605,
+     5605, 5605, 5605, 5605, 5605, 5605, 5605, 5605, 5605, 5605,
+     5605, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606,
+
+     5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5606, 5607,
+     5607, 5607, 5607, 5607, 5607, 5607, 5607, 5607, 5607, 5607,
+     5607, 5607, 5607, 5607, 5607, 5607, 5607, 5608, 5608, 5608,
+     5608, 5608, 5608, 5608, 5608, 5608, 5608, 5608, 5608, 5608,
+     5608, 5608, 5608, 5608, 5608, 5609, 5609, 5609, 5609, 5609,
+     5609, 5609, 5609, 5609, 5609, 5609, 5609, 5609, 5609, 5609,
+     5609, 5609, 5609, 5610, 5610, 5610, 5610, 5610, 5610, 5610,
+     5610, 5610, 5610, 5610, 5610, 5610, 5610, 5610, 5610, 5610,
+     5610, 5611, 5611, 5611, 5611, 5611, 5611, 5611, 5611, 5611,
+     5611, 5611, 5611, 5611, 5611, 5611, 5611, 5611, 5611, 5612,
+
+     5612, 5612, 5612, 5612, 5612, 5612, 5612, 5612, 5612, 5612,
+     5612, 5612, 5612, 5612, 5612, 5612, 5612, 5613, 5613, 5613,
+     5613, 5613, 5613, 5613, 5613, 5613, 5613, 5613, 5613, 5613,
+     5613, 5613, 5613, 5613, 5613, 5614, 5614, 5614, 5614, 5614,
+     5614, 5614, 5614, 5614, 5614, 5614, 5614, 5614, 5614, 5614,
+     5614, 5614, 5614, 5615, 5615, 5615, 5615, 5615, 5615, 5615,
+     5615, 5615, 5615, 5615, 5615, 5615, 5615, 5615, 5615, 5615,
+     5615, 5616, 5616, 5616, 5616, 5616, 5616, 5616, 5616, 5616,
+     5616, 5616, 5616, 5616, 5616, 5616, 5616, 5616, 5616, 5617,
+     5617, 5617, 5617, 5617, 5617, 5617, 5617, 5617, 5617, 5617,
+
+     5617, 5617, 5617, 5617, 5617, 5617, 5617, 5618, 5618, 5618,
+     5618, 5618, 5618, 5618, 5618, 5618, 5618, 5618, 5618, 5618,
+     5618, 5618, 5618, 5618, 5618, 5619, 5619, 5619, 5619, 5619,
+     5619, 5619, 5619, 5619, 5619, 5619, 5619, 5619, 5619, 5619,
+     5619, 5619, 5619, 5620, 5620, 5620, 5620, 5620, 5620, 5620,
+     5620, 5620, 5620, 5620, 5620, 5620, 5620, 5620, 5620, 5620,
+     5620, 5621, 5621, 5621, 5621, 5621, 5621, 5621, 5621, 5621,
+     5621, 5621, 5621, 5621, 5621, 5621, 5621, 5621, 5621, 5622,
+     5622, 5622, 5622, 5622, 5622, 5622, 5622, 5622, 5622, 5622,
+     5622, 5622, 5622, 5622, 5622, 5622, 5622, 5623, 5623, 5623,
+
+     5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623, 5623,
+     5623, 5623, 5623, 5623, 5623, 5624, 5624, 5624, 5624, 5624,
+     5624, 5624, 5624, 5624, 5624, 5624, 5624, 5624, 5624, 5624,
+     5624, 5624, 5624, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625, 5625,
+     5625, 5626, 5626, 5626, 5626, 5626, 5626, 5626, 5626, 5626,
+     5626, 5626, 5626, 5626, 5626, 5626, 5626, 5626, 5626, 5627,
+     5627, 5627, 5627, 5627, 5627, 5627, 5627, 5627, 5627, 5627,
+     5627, 5627, 5627, 5627, 5627, 5627, 5627, 5628, 5628, 5628,
+     5628, 5628, 5628, 5628, 5628, 5628, 5628, 5628, 5628, 5628,
+
+     5628, 5628, 5628, 5628, 5628, 5629, 5629, 5629, 5629, 5629,
+     5629, 5629, 5629, 5629, 5629, 5629, 5629, 5629, 5629, 5629,
+     5629, 5629, 5629, 5630, 5630, 5630, 5630, 5630, 5630, 5630,
+     5630, 5630, 5630, 5630, 5630, 5630, 5630, 5630, 5630, 5630,
+     5630, 5631, 5631, 5631, 5631, 5631, 5631, 5631, 5631, 5631,
+     5631, 5631, 5631, 5631, 5631, 5631, 5631, 5631, 5631, 5632,
+     5632, 5632, 5632, 5632, 5632, 5632, 5632, 5632, 5632, 5632,
+     5632, 5632, 5632, 5632, 5632, 5632, 5632, 5633, 5633, 5633,
+     5633, 5633, 5633, 5633, 5633, 5633, 5633, 5633, 5633, 5633,
+     5633, 5633, 5633, 5633, 5633, 5634, 5634, 5634, 5634, 5634,
+
+     5634, 5634, 5634, 5634, 5634, 5634, 5634, 5634, 5634, 5634,
+     5634, 5634, 5634, 5635, 5635, 5635, 5635, 5635, 5635, 5635,
+     5635, 5635, 5635, 5635, 5635, 5635, 5635, 5635, 5635, 5635,
+     5635, 5636, 5636, 5636, 5636, 5636, 5636, 5636, 5636, 5636,
+     5636, 5636, 5636, 5636, 5636, 5636, 5636, 5636, 5636, 5637,
+     5637, 5637, 5637, 5637, 5637, 5637, 5637, 5637, 5637, 5637,
+     5637, 5637, 5637, 5637, 5637, 5637, 5637, 5638, 5638, 5638,
+     5638, 5638, 5638, 5638, 5638, 5638, 5638, 5638, 5638, 5638,
+     5638, 5638, 5638, 5638, 5638, 5639, 5639, 5639, 5639, 5639,
+     5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639, 5639,
+
+     5639, 5639, 5639, 5640, 5640, 5640, 5640, 5640, 5640, 5640,
+     5640, 5640, 5640, 5640, 5640, 5640, 5640, 5640, 5640, 5640,
+     5640, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641,
+     5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5641, 5642,
+     5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642,
+     5642, 5642, 5642, 5642, 5642, 5642, 5642, 5643, 5643, 5643,
+     5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643, 5643,
+     5643, 5643, 5643, 5643, 5643, 5644, 5644, 5644, 5644, 5644,
+     5644, 5644, 5644, 5644, 5644, 5644, 5644, 5644, 5644, 5644,
+     5644, 5644, 5644, 5645, 5645, 5645, 5645, 5645, 5645, 5645,
+
+     5645, 5645, 5645, 5645, 5645, 5645, 5645, 5645, 5645, 5645,
+     5645, 5646, 5646, 5646, 5646, 5646, 5646, 5646, 5646, 5646,
+     5646, 5646, 5646, 5646, 5646, 5646, 5646, 5646, 5646, 5647,
+     5647, 5647, 5647, 5647, 5647, 5647, 5647, 5647, 5647, 5647,
+     5647, 5647, 5647, 5647, 5647, 5647, 5647, 5648, 5648, 5648,
+     5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648, 5648,
+     5648, 5648, 5648, 5648, 5648, 5649, 5649, 5649, 5649, 5649,
+     5649, 5649, 5649, 5649, 5649, 5649, 5649, 5649, 5649, 5649,
+     5649, 5649, 5649, 5650, 5650, 5650, 5650, 5650, 5650, 5650,
+     5650, 5650, 5650, 5650, 5650, 5650, 5650, 5650, 5650, 5650,
+
+     5650, 5651, 5651, 5651, 5651, 5651, 5651, 5651, 5651, 5651,
+     5651, 5651, 5651, 5651, 5651, 5651, 5651, 5651, 5651, 5652,
+     5652, 5652,    0,    0, 5652,    0,    0,    0,    0,    0,
+     5652,    0,    0, 5652, 5652, 5652, 5653, 5653, 5653, 5653,
+     5653, 5653, 5653, 5653, 5653, 5653, 5653, 5653, 5653, 5653,
+     5653, 5653, 5653, 5653, 5654, 5654, 5654, 5654, 5654, 5654,
+     5654, 5654, 5654, 5654, 5654, 5654, 5654, 5654, 5654, 5654,
+     5654, 5654, 5655, 5655, 5655, 5655, 5655, 5655, 5655, 5655,
+     5655, 5655, 5655, 5655, 5655, 5655, 5655, 5655, 5655, 5655,
+     5656, 5656, 5656, 5656, 5656, 5656, 5656, 5656, 5656, 5656,
+
+     5656, 5656, 5656, 5656, 5656, 5656, 5656, 5656, 5657, 5657,
+     5657, 5657, 5657, 5657, 5657, 5657, 5657, 5657, 5657, 5657,
+     5657, 5657, 5657, 5657, 5657, 5657, 5658, 5658, 5658, 5658,
+     5658, 5658, 5658, 5658, 5658, 5658, 5658, 5658, 5658, 5658,
+     5658, 5658, 5658, 5658, 5659, 5659, 5659, 5659, 5659, 5659,
+     5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659, 5659,
+     5659, 5659, 5660, 5660, 5660, 5660, 5660, 5660, 5660, 5660,
+     5660, 5660, 5660, 5660, 5660, 5660, 5660, 5660, 5660, 5660,
+     5661, 5661, 5661,    0,    0, 5661,    0, 5661, 5661,    0,
+        0, 5661,    0,    0, 5661, 5661, 5661, 5662, 5662, 5662,
+
+     5662, 5662, 5662, 5662, 5662, 5662, 5662, 5662, 5662, 5662,
+     5662, 5662, 5662, 5662, 5662, 5663, 5663, 5663,    0,    0,
+     5663,    0, 5663, 5663,    0,    0, 5663, 5663,    0, 5663,
+     5663, 5663, 5664, 5664, 5664, 5664, 5664, 5664, 5664, 5664,
+     5664, 5664, 5664, 5664, 5664, 5664, 5664, 5664, 5664, 5664,
+     5665, 5665, 5665, 5665, 5665, 5665, 5665, 5665, 5665, 5665,
+     5665, 5665, 5665, 5665, 5665, 5665, 5665, 5665, 5666, 5666,
+     5666, 5666, 5666, 5666, 5666, 5666, 5666, 5666, 5666, 5666,
+     5666, 5666, 5666, 5666, 5666, 5666, 5667, 5667, 5667, 5667,
+     5667, 5667, 5667, 5667, 5667, 5667, 5667, 5667, 5667, 5667,
+
+     5667, 5667, 5667, 5667, 5668, 5668, 5668, 5668, 5668, 5668,
+     5668, 5668, 5668, 5668, 5668, 5668, 5668, 5668, 5668, 5668,
+     5668, 5668, 5669, 5669, 5669, 5669, 5669, 5669, 5669, 5669,
+     5669, 5669, 5669, 5669, 5669, 5669, 5669, 5669, 5669, 5669,
+     5670, 5670, 5670, 5670, 5670, 5670, 5670, 5670, 5670, 5670,
+     5670, 5670, 5670, 5670, 5670, 5670, 5670, 5670, 5671, 5671,
+     5671, 5671, 5671, 5671, 5671, 5671, 5671, 5671, 5671, 5671,
+     5671, 5671, 5671, 5671, 5671, 5671, 5672, 5672, 5672, 5672,
+     5672, 5672, 5672, 5672, 5672, 5672, 5672, 5672, 5672, 5672,
+     5672, 5672, 5672, 5672, 5673, 5673, 5673, 5673, 5673, 5673,
+
+     5673, 5673, 5673, 5673, 5673, 5673, 5673, 5673, 5673, 5673,
+     5673, 5673, 5674, 5674, 5674, 5674, 5674, 5674, 5674, 5674,
+     5674, 5674, 5674, 5674, 5674, 5674, 5674, 5674, 5674, 5674,
+     5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675,
+     5675, 5675, 5675, 5675, 5675, 5675, 5675, 5675, 5676, 5676,
+     5676, 5676, 5676, 5676, 5676, 5676, 5676, 5676, 5676, 5676,
+     5676, 5676, 5676, 5676, 5676, 5676, 5677, 5677, 5677, 5677,
+     5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677, 5677,
+     5677, 5677, 5677, 5677, 5678, 5678, 5678, 5678, 5678, 5678,
+     5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678, 5678,
+
+     5678, 5678, 5679, 5679, 5679, 5679, 5679, 5679, 5679, 5679,
+     5679, 5679, 5679, 5679, 5679, 5679, 5679, 5679, 5679, 5679,
+     5680, 5680, 5680, 5680, 5680, 5680, 5680, 5680, 5680, 5680,
+     5680, 5680, 5680, 5680, 5680, 5680, 5680, 5680, 5681, 5681,
+     5681, 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5681, 5681,
+     5681, 5681, 5681, 5681, 5681, 5681, 5682, 5682, 5682, 5682,
+     5682, 5682, 5682, 5682, 5682, 5682, 5682, 5682, 5682, 5682,
+     5682, 5682, 5682, 5682, 5683, 5683, 5683, 5683, 5683, 5683,
+     5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683, 5683,
+     5683, 5683, 5684, 5684, 5684, 5684, 5684, 5684, 5684, 5684,
+
+     5684, 5684, 5684, 5684, 5684, 5684, 5684, 5684, 5684, 5684,
+     5685, 5685, 5685, 5685, 5685, 5685, 5685, 5685, 5685, 5685,
+     5685, 5685, 5685, 5685, 5685, 5685, 5685, 5685, 5686, 5686,
+     5686, 5686, 5686, 5686, 5686, 5686, 5686, 5686, 5686, 5686,
+     5686, 5686, 5686, 5686, 5686, 5686, 5687, 5687, 5687, 5687,
+     5687, 5687, 5687, 5687, 5687, 5687, 5687, 5687, 5687, 5687,
+     5687, 5687, 5687, 5687, 5688, 5688, 5688, 5688, 5688, 5688,
+     5688, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 5688, 5688,
+     5688, 5688, 5689, 5689, 5689, 5689, 5689, 5689, 5689, 5689,
+     5689, 5689, 5689, 5689, 5689, 5689, 5689, 5689, 5689, 5689,
+
+     5690, 5690, 5690, 5690, 5690, 5690, 5690, 5690, 5690, 5690,
+     5690, 5690, 5690, 5690, 5690, 5690, 5690, 5690, 5691, 5691,
+     5691, 5691, 5691, 5691, 5691, 5691, 5691, 5691, 5691, 5691,
+     5691, 5691, 5691, 5691, 5691, 5691, 5692, 5692, 5692, 5692,
+     5692, 5692, 5692, 5692, 5692, 5692, 5692, 5692, 5692, 5692,
+     5692, 5692, 5692, 5692, 5693, 5693, 5693, 5693, 5693, 5693,
+     5693, 5693, 5693, 5693, 5693, 5693, 5693, 5693, 5693, 5693,
+     5693, 5693, 5694, 5694, 5694, 5694, 5694, 5694, 5694, 5694,
+     5694, 5694, 5694, 5694, 5694, 5694, 5694, 5694, 5694, 5694,
+     5695, 5695, 5695, 5695, 5695, 5695, 5695, 5695, 5695, 5695,
+
+     5695, 5695, 5695, 5695, 5695, 5695, 5695, 5695, 5696, 5696,
+     5696, 5696, 5696, 5696, 5696, 5696, 5696, 5696, 5696, 5696,
+     5696, 5696, 5696, 5696, 5696, 5696, 5697, 5697, 5697, 5697,
+     5697, 5697, 5697, 5697, 5697, 5697, 5697, 5697, 5697, 5697,
+     5697, 5697, 5697, 5697, 5698, 5698, 5698, 5698, 5698, 5698,
+     5698, 5698, 5698, 5698, 5698, 5698, 5698, 5698, 5698, 5698,
+     5698, 5698, 5699, 5699, 5699, 5699, 5699, 5699, 5699, 5699,
+     5699, 5699, 5699, 5699, 5699, 5699, 5699, 5699, 5699, 5699,
+     5700, 5700, 5700, 5700, 5700, 5700, 5700, 5700, 5700, 5700,
+     5700, 5700, 5700, 5700, 5700, 5700, 5700, 5700, 5701, 5701,
+
+     5701, 5701, 5701, 5701, 5701, 5701, 5701, 5701, 5701, 5701,
+     5701, 5701, 5701, 5701, 5701, 5701, 5702, 5702, 5702, 5702,
+     5702, 5702, 5702, 5702, 5702, 5702, 5702, 5702, 5702, 5702,
+     5702, 5702, 5702, 5702, 5703, 5703, 5703, 5703, 5703, 5703,
+     5703, 5703, 5703, 5703, 5703, 5703, 5703, 5703, 5703, 5703,
+     5703, 5703, 5704, 5704, 5704, 5704, 5704, 5704, 5704, 5704,
+     5704, 5704, 5704, 5704, 5704, 5704, 5704, 5704, 5704, 5704,
+     5705, 5705, 5705, 5705, 5705, 5705, 5705, 5705, 5705, 5705,
+     5705, 5705, 5705, 5705, 5705, 5705, 5705, 5705, 5706, 5706,
+     5706, 5706, 5706, 5706, 5706, 5706, 5706, 5706, 5706, 5706,
+
+     5706, 5706, 5706, 5706, 5706, 5706, 5707, 5707, 5707, 5707,
+     5707, 5707, 5707, 5707, 5707, 5707, 5707, 5707, 5707, 5707,
+     5707, 5707, 5707, 5707, 5708, 5708, 5708, 5708, 5708, 5708,
+     5708, 5708, 5708, 5708, 5708, 5708, 5708, 5708, 5708, 5708,
+     5708, 5708, 5709, 5709, 5709, 5709, 5709, 5709, 5709, 5709,
+     5709, 5709, 5709, 5709, 5709, 5709, 5709, 5709, 5709, 5709,
+     5710, 5710, 5710, 5710, 5710, 5710, 5710, 5710, 5710, 5710,
+     5710, 5710, 5710, 5710, 5710, 5710, 5710, 5710, 5711, 5711,
+     5711, 5711, 5711, 5711, 5711, 5711, 5711, 5711, 5711, 5711,
+     5711, 5711, 5711, 5711, 5711, 5711, 5712, 5712, 5712, 5712,
+
+     5712, 5712, 5712, 5712, 5712, 5712, 5712, 5712, 5712, 5712,
+     5712, 5712, 5712, 5712, 5713, 5713, 5713, 5713, 5713, 5713,
+     5713, 5713, 5713, 5713, 5713, 5713, 5713, 5713, 5713, 5713,
+     5713, 5713, 5714, 5714, 5714, 5714, 5714, 5714, 5714, 5714,
+     5714, 5714, 5714, 5714, 5714, 5714, 5714, 5714, 5714, 5714,
+     5715, 5715, 5715, 5715, 5715, 5715, 5715, 5715, 5715, 5715,
+     5715, 5715, 5715, 5715, 5715, 5715, 5715, 5715, 5716, 5716,
+     5716, 5716, 5716, 5716, 5716, 5716, 5716, 5716, 5716, 5716,
+     5716, 5716, 5716, 5716, 5716, 5716, 5717, 5717, 5717, 5717,
+     5717, 5717, 5717, 5717, 5717, 5717, 5717, 5717, 5717, 5717,
+
+     5717, 5717, 5717, 5717, 5718, 5718, 5718, 5718, 5718, 5718,
+     5718, 5718, 5718, 5718, 5718, 5718, 5718, 5718, 5718, 5718,
+     5718, 5718, 5719, 5719, 5719, 5719, 5719, 5719, 5719, 5719,
+     5719, 5719, 5719, 5719, 5719, 5719, 5719, 5719, 5719, 5719,
+     5720, 5720, 5720, 5720, 5720, 5720, 5720, 5720, 5720, 5720,
+     5720, 5720, 5720, 5720, 5720, 5720, 5720, 5720, 5721, 5721,
+     5721, 5721, 5721, 5721, 5721, 5721, 5721, 5721, 5721, 5721,
+     5721, 5721, 5721, 5721, 5721, 5721, 5722, 5722, 5722, 5722,
+     5722, 5722, 5722, 5722, 5722, 5722, 5722, 5722, 5722, 5722,
+     5722, 5722, 5722, 5722, 5723, 5723, 5723, 5723, 5723, 5723,
+
+     5723, 5723, 5723, 5723, 5723, 5723, 5723, 5723, 5723, 5723,
+     5723, 5723, 5724, 5724, 5724,    0,    0, 5724,    0,    0,
+        0,    0,    0, 5724,    0,    0, 5724, 5724, 5724, 5725,
+     5725, 5725, 5725, 5725, 5725, 5725, 5725, 5725, 5725, 5725,
+     5725, 5725, 5725, 5725, 5725, 5725, 5725, 5726, 5726, 5726,
+     5726, 5726, 5726, 5726, 5726, 5726, 5726, 5726, 5726, 5726,
+     5726, 5726, 5726, 5726, 5726, 5727, 5727, 5727, 5727, 5727,
+     5727, 5727, 5727, 5727, 5727, 5727, 5727, 5727, 5727, 5727,
+     5727, 5727, 5727, 5728, 5728, 5728, 5728, 5728, 5728, 5728,
+     5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728,
+
+     5728, 5729, 5729, 5729, 5729, 5729, 5729, 5729, 5729, 5729,
+     5729, 5729, 5729, 5729, 5729, 5729, 5729, 5729, 5729, 5730,
+     5730, 5730, 5730, 5730, 5730, 5730, 5730, 5730, 5730, 5730,
+     5730, 5730, 5730, 5730, 5730, 5730, 5730, 5731, 5731, 5731,
+     5731, 5731, 5731, 5731, 5731, 5731, 5731, 5731, 5731, 5731,
+     5731, 5731, 5731, 5731, 5731, 5732, 5732, 5732, 5732, 5732,
+     5732, 5732, 5732, 5732, 5732, 5732, 5732, 5732, 5732, 5732,
+     5732, 5732, 5732, 5733, 5733, 5733, 5733, 5733, 5733, 5733,
+     5733, 5733, 5733, 5733, 5733, 5733, 5733, 5733, 5733, 5733,
+     5733, 5734, 5734, 5734, 5734, 5734, 5734, 5734, 5734, 5734,
+
+     5734, 5734, 5734, 5734, 5734, 5734, 5734, 5734, 5734, 5735,
+     5735, 5735, 5735, 5735, 5735, 5735, 5735, 5735, 5735, 5735,
+     5735, 5735, 5735, 5735, 5735, 5735, 5735, 5736, 5736, 5736,
+     5736, 5736, 5736, 5736, 5736, 5736, 5736, 5736, 5736, 5736,
+     5736, 5736, 5736, 5736, 5736, 5737, 5737, 5737, 5737, 5737,
+     5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737, 5737,
+     5737, 5737, 5737, 5738, 5738, 5738, 5738, 5738, 5738, 5738,
+     5738, 5738, 5738, 5738, 5738, 5738, 5738, 5738, 5738, 5738,
+     5738, 5739, 5739, 5739, 5739, 5739, 5739, 5739, 5739, 5739,
+     5739, 5739, 5739, 5739, 5739, 5739, 5739, 5739, 5739, 5740,
+
+     5740, 5740, 5740, 5740, 5740, 5740, 5740, 5740, 5740, 5740,
+     5740, 5740, 5740, 5740, 5740, 5740, 5740, 5741, 5741, 5741,
+     5741, 5741, 5741, 5741, 5741, 5741, 5741, 5741, 5741, 5741,
+     5741, 5741, 5741, 5741, 5741, 5742, 5742, 5742, 5742, 5742,
+     5742, 5742, 5742, 5742, 5742, 5742, 5742, 5742, 5742, 5742,
+     5742, 5742, 5742, 5743, 5743, 5743, 5743, 5743, 5743, 5743,
+     5743, 5743, 5743, 5743, 5743, 5743, 5743, 5743, 5743, 5743,
+     5743, 5744, 5744, 5744, 5744, 5744, 5744, 5744, 5744, 5744,
+     5744, 5744, 5744, 5744, 5744, 5744, 5744, 5744, 5744, 5745,
+     5745, 5745, 5745, 5745, 5745, 5745, 5745, 5745, 5745, 5745,
+
+     5745, 5745, 5745, 5745, 5745, 5745, 5745, 5746, 5746, 5746,
+     5746, 5746, 5746, 5746, 5746, 5746, 5746, 5746, 5746, 5746,
+     5746, 5746, 5746, 5746, 5746, 5747, 5747, 5747, 5747, 5747,
+     5747, 5747, 5747, 5747, 5747, 5747, 5747, 5747, 5747, 5747,
+     5747, 5747, 5747, 5748, 5748, 5748, 5748, 5748, 5748, 5748,
+     5748, 5748, 5748, 5748, 5748, 5748, 5748, 5748, 5748, 5748,
+     5748, 5749, 5749, 5749, 5749, 5749, 5749, 5749, 5749, 5749,
+     5749, 5749, 5749, 5749, 5749, 5749, 5749, 5749, 5749, 5750,
+     5750, 5750, 5750, 5750, 5750, 5750, 5750, 5750, 5750, 5750,
+     5750, 5750, 5750, 5750, 5750, 5750, 5750, 5751, 5751, 5751,
+
+     5751, 5751, 5751, 5751, 5751, 5751, 5751, 5751, 5751, 5751,
+     5751, 5751, 5751, 5751, 5751, 5752, 5752, 5752, 5752, 5752,
+     5752, 5752, 5752, 5752, 5752, 5752, 5752, 5752, 5752, 5752,
+     5752, 5752, 5752, 5753, 5753, 5753, 5753, 5753, 5753, 5753,
+     5753, 5753, 5753, 5753, 5753, 5753, 5753, 5753, 5753, 5753,
+     5753, 5754, 5754, 5754, 5754, 5754, 5754, 5754, 5754, 5754,
+     5754, 5754, 5754, 5754, 5754, 5754, 5754, 5754, 5754, 5755,
+     5755, 5755, 5755, 5755, 5755, 5755, 5755, 5755, 5755, 5755,
+     5755, 5755, 5755, 5755, 5755, 5755, 5755, 5756, 5756, 5756,
+     5756, 5756, 5756, 5756, 5756, 5756, 5756, 5756, 5756, 5756,
+
+     5756, 5756, 5756, 5756, 5756, 5757, 5757, 5757, 5757, 5757,
+     5757, 5757, 5757, 5757, 5757, 5757, 5757, 5757, 5757, 5757,
+     5757, 5757, 5757, 5758, 5758, 5758, 5758, 5758, 5758, 5758,
+     5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758, 5758,
+     5758, 5759, 5759, 5759, 5759, 5759, 5759, 5759, 5759, 5759,
+     5759, 5759, 5759, 5759, 5759, 5759, 5759, 5759, 5759, 5760,
+     5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760, 5760,
+     5760, 5760, 5760, 5760, 5760, 5760, 5760, 5761, 5761, 5761,
+     5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761, 5761,
+     5761, 5761, 5761, 5761, 5761, 5762, 5762, 5762, 5762, 5762,
+
+     5762, 5762, 5762, 5762, 5762, 5762, 5762, 5762, 5762, 5762,
+     5762, 5762, 5762, 5763, 5763, 5763, 5763, 5763, 5763, 5763,
+     5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763, 5763,
+     5763, 5764, 5764, 5764, 5764, 5764, 5764, 5764, 5764, 5764,
+     5764, 5764, 5764, 5764, 5764, 5764, 5764, 5764, 5764, 5765,
+     5765, 5765, 5765, 5765, 5765, 5765, 5765, 5765, 5765, 5765,
+     5765, 5765, 5765, 5765, 5765, 5765, 5765, 5766, 5766, 5766,
+     5766, 5766, 5766, 5766, 5766, 5766, 5766, 5766, 5766, 5766,
+     5766, 5766, 5766, 5766, 5766, 5767, 5767, 5767, 5767, 5767,
+     5767, 5767, 5767, 5767, 5767, 5767, 5767, 5767, 5767, 5767,
+
+     5767, 5767, 5767, 5768, 5768, 5768, 5768, 5768, 5768, 5768,
+     5768, 5768, 5768, 5768, 5768, 5768, 5768, 5768, 5768, 5768,
+     5768, 5769, 5769, 5769, 5769, 5769, 5769, 5769, 5769, 5769,
+     5769, 5769, 5769, 5769, 5769, 5769, 5769, 5769, 5769, 5770,
+     5770, 5770, 5770, 5770, 5770, 5770, 5770, 5770, 5770, 5770,
+     5770, 5770, 5770, 5770, 5770, 5770, 5770, 5771, 5771, 5771,
+     5771, 5771, 5771, 5771, 5771, 5771, 5771, 5771, 5771, 5771,
+     5771, 5771, 5771, 5771, 5771, 5772, 5772, 5772, 5772, 5772,
+     5772, 5772, 5772, 5772, 5772, 5772, 5772, 5772, 5772, 5772,
+     5772, 5772, 5772, 5773, 5773, 5773, 5773, 5773, 5773, 5773,
+
+     5773, 5773, 5773, 5773, 5773, 5773, 5773, 5773, 5773, 5773,
+     5773, 5774, 5774, 5774, 5774, 5774, 5774, 5774, 5774, 5774,
+     5774, 5774, 5774, 5774, 5774, 5774, 5774, 5774, 5774, 5775,
+     5775, 5775, 5775, 5775, 5775, 5775, 5775, 5775, 5775, 5775,
+     5775, 5775, 5775, 5775, 5775, 5775, 5775, 5776, 5776, 5776,
+     5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776, 5776,
+     5776, 5776, 5776, 5776, 5776, 5777, 5777, 5777, 5777, 5777,
+     5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777,
+     5777, 5777, 5777, 5778, 5778, 5778, 5778, 5778, 5778, 5778,
+     5778, 5778, 5778, 5778, 5778, 5778, 5778, 5778, 5778, 5778,
+
+     5778, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779,
+     5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5779, 5780,
+     5780, 5780, 5780, 5780, 5780, 5780, 5780, 5780, 5780, 5780,
+     5780, 5780, 5780, 5780, 5780, 5780, 5780, 5781, 5781, 5781,
+     5781, 5781, 5781, 5781, 5781, 5781, 5781, 5781, 5781, 5781,
+     5781, 5781, 5781, 5781, 5781, 5782, 5782, 5782, 5782, 5782,
+     5782, 5782, 5782, 5782, 5782, 5782, 5782, 5782, 5782, 5782,
+     5782, 5782, 5782, 5783, 5783, 5783, 5783, 5783, 5783, 5783,
+     5783, 5783, 5783, 5783, 5783, 5783, 5783, 5783, 5783, 5783,
+     5783, 5784, 5784, 5784, 5784, 5784, 5784, 5784, 5784, 5784,
+
+     5784, 5784, 5784, 5784, 5784, 5784, 5784, 5784, 5784, 5785,
+     5785, 5785, 5785, 5785, 5785, 5785, 5785, 5785, 5785, 5785,
+     5785, 5785, 5785, 5785, 5785, 5785, 5785, 5786, 5786, 5786,
+     5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786, 5786,
+     5786, 5786, 5786, 5786, 5786, 5787, 5787, 5787, 5787, 5787,
+     5787, 5787, 5787, 5787, 5787, 5787, 5787, 5787, 5787, 5787,
+     5787, 5787, 5787, 5788, 5788, 5788, 5788, 5788, 5788, 5788,
+     5788, 5788, 5788, 5788, 5788, 5788, 5788, 5788, 5788, 5788,
+     5788, 5789, 5789, 5789, 5789, 5789, 5789, 5789, 5789, 5789,
+     5789, 5789, 5789, 5789, 5789, 5789, 5789, 5789, 5789, 5790,
+
+     5790, 5790, 5790, 5790, 5790, 5790, 5790, 5790, 5790, 5790,
+     5790, 5790, 5790, 5790, 5790, 5790, 5790, 5791, 5791, 5791,
+     5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791,
+     5791, 5791, 5791, 5791, 5791, 5792, 5792, 5792, 5792, 5792,
+     5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792, 5792,
+     5792, 5792, 5792, 5793, 5793, 5793, 5793, 5793, 5793, 5793,
+     5793, 5793, 5793, 5793, 5793, 5793, 5793, 5793, 5793, 5793,
+     5793, 5794, 5794, 5794, 5794, 5794, 5794, 5794, 5794, 5794,
+     5794, 5794, 5794, 5794, 5794, 5794, 5794, 5794, 5794, 5795,
+     5795, 5795, 5795, 5795, 5795, 5795, 5795, 5795, 5795, 5795,
+
+     5795, 5795, 5795, 5795, 5795, 5795, 5795, 5796, 5796, 5796,
+     5796, 5796, 5796, 5796, 5796, 5796, 5796, 5796, 5796, 5796,
+     5796, 5796, 5796, 5796, 5796, 5797, 5797, 5797, 5797, 5797,
+     5797, 5797, 5797, 5797, 5797, 5797, 5797, 5797, 5797, 5797,
+     5797, 5797, 5797, 5798, 5798, 5798, 5798, 5798, 5798, 5798,
+     5798, 5798, 5798, 5798, 5798, 5798, 5798, 5798, 5798, 5798,
+     5798, 5799, 5799, 5799, 5799, 5799, 5799, 5799, 5799, 5799,
+     5799, 5799, 5799, 5799, 5799, 5799, 5799, 5799, 5799, 5800,
+     5800, 5800, 5800, 5800, 5800, 5800, 5800, 5800, 5800, 5800,
+     5800, 5800, 5800, 5800, 5800, 5800, 5800, 5801, 5801, 5801,
+
+     5801, 5801, 5801, 5801, 5801, 5801, 5801, 5801, 5801, 5801,
+     5801, 5801, 5801, 5801, 5801, 5802, 5802, 5802, 5802, 5802,
+     5802, 5802, 5802, 5802, 5802, 5802, 5802, 5802, 5802, 5802,
+     5802, 5802, 5802, 5803, 5803, 5803, 5803, 5803, 5803, 5803,
+     5803, 5803, 5803, 5803, 5803, 5803, 5803, 5803, 5803, 5803,
+     5803, 5804, 5804, 5804, 5804, 5804, 5804, 5804, 5804, 5804,
+     5804, 5804, 5804, 5804, 5804, 5804, 5804, 5804, 5804, 5805,
+     5805, 5805, 5805, 5805, 5805, 5805, 5805, 5805, 5805, 5805,
+     5805, 5805, 5805, 5805, 5805, 5805, 5805, 5806, 5806, 5806,
+     5806, 5806, 5806, 5806, 5806, 5806, 5806, 5806, 5806, 5806,
+
+     5806, 5806, 5806, 5806, 5806, 5807, 5807, 5807, 5807, 5807,
+     5807, 5807, 5807, 5807, 5807, 5807, 5807, 5807, 5807, 5807,
+     5807, 5807, 5807, 5808, 5808, 5808, 5808, 5808, 5808, 5808,
+     5808, 5808, 5808, 5808, 5808, 5808, 5808, 5808, 5808, 5808,
+     5808, 5809, 5809, 5809, 5809, 5809, 5809, 5809, 5809, 5809,
+     5809, 5809, 5809, 5809, 5809, 5809, 5809, 5809, 5809, 5810,
+     5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+     5810, 5810, 5810, 5810, 5810, 5810, 5810, 5811, 5811, 5811,
+     5811, 5811, 5811, 5811, 5811, 5811, 5811, 5811, 5811, 5811,
+     5811, 5811, 5811, 5811, 5811, 5812, 5812, 5812, 5812, 5812,
+
+     5812, 5812, 5812, 5812, 5812, 5812, 5812, 5812, 5812, 5812,
+     5812, 5812, 5812, 5813, 5813, 5813, 5813, 5813, 5813, 5813,
+     5813, 5813, 5813, 5813, 5813, 5813, 5813, 5813, 5813, 5813,
+     5813, 5814, 5814, 5814, 5814, 5814, 5814, 5814, 5814, 5814,
+     5814, 5814, 5814, 5814, 5814, 5814, 5814, 5814, 5814, 5815,
+     5815, 5815, 5815, 5815, 5815, 5815, 5815, 5815, 5815, 5815,
+     5815, 5815, 5815, 5815, 5815, 5815, 5815, 5816, 5816, 5816,
+     5816, 5816, 5816, 5816, 5816, 5816, 5816, 5816, 5816, 5816,
+     5816, 5816, 5816, 5816, 5816, 5817, 5817, 5817, 5817, 5817,
+     5817, 5817, 5817, 5817, 5817, 5817, 5817, 5817, 5817, 5817,
+
+     5817, 5817, 5817, 5818, 5818, 5818, 5818, 5818, 5818, 5818,
+     5818, 5818, 5818, 5818, 5818, 5818, 5818, 5818, 5818, 5818,
+     5818, 5819, 5819, 5819, 5819, 5819, 5819, 5819, 5819, 5819,
+     5819, 5819, 5819, 5819, 5819, 5819, 5819, 5819, 5819, 5820,
+     5820, 5820, 5820, 5820, 5820, 5820, 5820, 5820, 5820, 5820,
+     5820, 5820, 5820, 5820, 5820, 5820, 5820, 5821, 5821, 5821,
+     5821, 5821, 5821, 5821, 5821, 5821, 5821, 5821, 5821, 5821,
+     5821, 5821, 5821, 5821, 5821, 5822, 5822, 5822, 5822, 5822,
+     5822, 5822, 5822, 5822, 5822, 5822, 5822, 5822, 5822, 5822,
+     5822, 5822, 5822, 5823, 5823, 5823, 5823, 5823, 5823, 5823,
+
+     5823, 5823, 5823, 5823, 5823, 5823, 5823, 5823, 5823, 5823,
+     5823, 5824, 5824, 5824, 5824, 5824, 5824, 5824, 5824, 5824,
+     5824, 5824, 5824, 5824, 5824, 5824, 5824, 5824, 5824, 5825,
+     5825, 5825, 5825, 5825, 5825, 5825, 5825, 5825, 5825, 5825,
+     5825, 5825, 5825, 5825, 5825, 5825, 5825, 5826, 5826, 5826,
+     5826, 5826, 5826, 5826, 5826, 5826, 5826, 5826, 5826, 5826,
+     5826, 5826, 5826, 5826, 5826, 5827, 5827, 5827, 5827, 5827,
+     5827, 5827, 5827, 5827, 5827, 5827, 5827, 5827, 5827, 5827,
+     5827, 5827, 5827, 5828, 5828, 5828, 5828, 5828, 5828, 5828,
+     5828, 5828, 5828, 5828, 5828, 5828, 5828, 5828, 5828, 5828,
+
+     5828, 5829, 5829, 5829, 5829, 5829, 5829, 5829, 5829, 5829,
+     5829, 5829, 5829, 5829, 5829, 5829, 5829, 5829, 5829, 5830,
+     5830, 5830, 5830, 5830, 5830, 5830, 5830, 5830, 5830, 5830,
+     5830, 5830, 5830, 5830, 5830, 5830, 5830, 5831, 5831, 5831,
+     5831, 5831, 5831, 5831, 5831, 5831, 5831, 5831, 5831, 5831,
+     5831, 5831, 5831, 5831, 5831, 5832, 5832, 5832, 5832, 5832,
+     5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832, 5832,
+     5832, 5832, 5832, 5833, 5833, 5833, 5833, 5833, 5833, 5833,
+     5833, 5833, 5833, 5833, 5833, 5833, 5833, 5833, 5833, 5833,
+     5833, 5834, 5834, 5834, 5834, 5834, 5834, 5834, 5834, 5834,
+
+     5834, 5834, 5834, 5834, 5834, 5834, 5834, 5834, 5834, 5835,
+     5835, 5835, 5835, 5835, 5835, 5835, 5835, 5835, 5835, 5835,
+     5835, 5835, 5835, 5835, 5835, 5835, 5835, 5836, 5836, 5836,
+     5836, 5836, 5836, 5836, 5836, 5836, 5836, 5836, 5836, 5836,
+     5836, 5836, 5836, 5836, 5836, 5837, 5837, 5837, 5837, 5837,
+     5837, 5837, 5837, 5837, 5837, 5837, 5837, 5837, 5837, 5837,
+     5837, 5837, 5837, 5838, 5838, 5838, 5838, 5838, 5838, 5838,
+     5838, 5838, 5838, 5838, 5838, 5838, 5838, 5838, 5838, 5838,
+     5838, 5839, 5839, 5839, 5839, 5839, 5839, 5839, 5839, 5839,
+     5839, 5839, 5839, 5839, 5839, 5839, 5839, 5839, 5839, 5840,
+
+     5840, 5840, 5840, 5840, 5840, 5840, 5840, 5840, 5840, 5840,
+     5840, 5840, 5840, 5840, 5840, 5840, 5840, 5841, 5841, 5841,
+     5841, 5841, 5841, 5841, 5841, 5841, 5841, 5841, 5841, 5841,
+     5841, 5841, 5841, 5841, 5841, 5842, 5842, 5842, 5842, 5842,
+     5842, 5842, 5842, 5842, 5842, 5842, 5842, 5842, 5842, 5842,
+     5842, 5842, 5842, 5843, 5843, 5843, 5843, 5843, 5843, 5843,
+     5843, 5843, 5843, 5843, 5843, 5843, 5843, 5843, 5843, 5843,
+     5843, 5844, 5844, 5844, 5844, 5844, 5844, 5844, 5844, 5844,
+     5844, 5844, 5844, 5844, 5844, 5844, 5844, 5844, 5844, 5845,
+     5845, 5845, 5845, 5845, 5845, 5845, 5845, 5845, 5845, 5845,
+
+     5845, 5845, 5845, 5845, 5845, 5845, 5845, 5846, 5846, 5846,
+     5846, 5846, 5846, 5846, 5846, 5846, 5846, 5846, 5846, 5846,
+     5846, 5846, 5846, 5846, 5846, 5847, 5847, 5847, 5847, 5847,
+     5847, 5847, 5847, 5847, 5847, 5847, 5847, 5847, 5847, 5847,
+     5847, 5847, 5847, 5848, 5848, 5848, 5848, 5848, 5848, 5848,
+     5848, 5848, 5848, 5848, 5848, 5848, 5848, 5848, 5848, 5848,
+     5848, 5849, 5849, 5849, 5849, 5849, 5849, 5849, 5849, 5849,
+     5849, 5849, 5849, 5849, 5849, 5849, 5849, 5849, 5849, 5850,
+     5850, 5850, 5850, 5850, 5850, 5850, 5850, 5850, 5850, 5850,
+     5850, 5850, 5850, 5850, 5850, 5850, 5850, 5851, 5851, 5851,
+
+     5851, 5851, 5851, 5851, 5851, 5851, 5851, 5851, 5851, 5851,
+     5851, 5851, 5851, 5851, 5851, 5852, 5852, 5852, 5852, 5852,
+     5852, 5852, 5852, 5852, 5852, 5852, 5852, 5852, 5852, 5852,
+     5852, 5852, 5852, 5853, 5853, 5853, 5853, 5853, 5853, 5853,
+     5853, 5853, 5853, 5853, 5853, 5853, 5853, 5853, 5853, 5853,
+     5853, 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854,
+     5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5854, 5855,
+     5855, 5855, 5855, 5855, 5855, 5855, 5855, 5855, 5855, 5855,
+     5855, 5855, 5855, 5855, 5855, 5855, 5855, 5856, 5856, 5856,
+     5856, 5856, 5856, 5856, 5856, 5856, 5856, 5856, 5856, 5856,
+
+     5856, 5856, 5856, 5856, 5856, 5857, 5857, 5857, 5857, 5857,
+     5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857,
+     5857, 5857, 5857, 5858, 5858, 5858, 5858, 5858, 5858, 5858,
+     5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858,
+     5858, 5859, 5859, 5859, 5859, 5859, 5859, 5859, 5859, 5859,
+     5859, 5859, 5859, 5859, 5859, 5859, 5859, 5859, 5859, 5860,
+     5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860,
+     5860, 5860, 5860, 5860, 5860, 5860, 5860, 5861, 5861, 5861,
+     5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861, 5861,
+     5861, 5861, 5861, 5861, 5861, 5862, 5862, 5862, 5862, 5862,
+
+     5862, 5862, 5862, 5862, 5862, 5862, 5862, 5862, 5862, 5862,
+     5862, 5862, 5862, 5863, 5863, 5863, 5863, 5863, 5863, 5863,
+     5863, 5863, 5863, 5863, 5863, 5863, 5863, 5863, 5863, 5863,
+     5863, 5864, 5864, 5864, 5864, 5864, 5864, 5864, 5864, 5864,
+     5864, 5864, 5864, 5864, 5864, 5864, 5864, 5864, 5864, 5865,
+     5865, 5865, 5865, 5865, 5865, 5865, 5865, 5865, 5865, 5865,
+     5865, 5865, 5865, 5865, 5865, 5865, 5865, 5866, 5866, 5866,
+     5866, 5866, 5866, 5866, 5866, 5866, 5866, 5866, 5866, 5866,
+     5866, 5866, 5866, 5866, 5866, 5867, 5867, 5867, 5867, 5867,
+     5867, 5867, 5867, 5867, 5867, 5867, 5867, 5867, 5867, 5867,
+
+     5867, 5867, 5867, 5868, 5868, 5868, 5868, 5868, 5868, 5868,
+     5868, 5868, 5868, 5868, 5868, 5868, 5868, 5868, 5868, 5868,
+     5868, 5869, 5869, 5869, 5869, 5869, 5869, 5869, 5869, 5869,
+     5869, 5869, 5869, 5869, 5869, 5869, 5869, 5869, 5869, 5870,
+     5870, 5870, 5870, 5870, 5870, 5870, 5870, 5870, 5870, 5870,
+     5870, 5870, 5870, 5870, 5870, 5870, 5870, 5871, 5871, 5871,
+     5871, 5871, 5871, 5871, 5871, 5871, 5871, 5871, 5871, 5871,
+     5871, 5871, 5871, 5871, 5871, 5872, 5872, 5872, 5872, 5872,
+     5872, 5872, 5872, 5872, 5872, 5872, 5872, 5872, 5872, 5872,
+     5872, 5872, 5872, 5873, 5873, 5873, 5873, 5873, 5873, 5873,
+
+     5873, 5873, 5873, 5873, 5873, 5873, 5873, 5873, 5873, 5873,
+     5873, 5874, 5874, 5874, 5874, 5874, 5874, 5874, 5874, 5874,
+     5874, 5874, 5874, 5874, 5874, 5874, 5874, 5874, 5874, 5875,
+     5875, 5875, 5875, 5875, 5875, 5875, 5875, 5875, 5875, 5875,
+     5875, 5875, 5875, 5875, 5875, 5875, 5875, 5876, 5876, 5876,
+     5876, 5876, 5876, 5876, 5876, 5876, 5876, 5876, 5876, 5876,
+     5876, 5876, 5876, 5876, 5876, 5877, 5877, 5877, 5877, 5877,
+     5877, 5877, 5877, 5877, 5877, 5877, 5877, 5877, 5877, 5877,
+     5877, 5877, 5877, 5878, 5878, 5878, 5878, 5878, 5878, 5878,
+     5878, 5878, 5878, 5878, 5878, 5878, 5878, 5878, 5878, 5878,
+
+     5878, 5879, 5879, 5879, 5879, 5879, 5879, 5879, 5879, 5879,
+     5879, 5879, 5879, 5879, 5879, 5879, 5879, 5879, 5879, 5880,
+     5880, 5880, 5880, 5880, 5880, 5880, 5880, 5880, 5880, 5880,
+     5880, 5880, 5880, 5880, 5880, 5880, 5880, 5881, 5881, 5881,
+     5881, 5881, 5881, 5881, 5881, 5881, 5881, 5881, 5881, 5881,
+     5881, 5881, 5881, 5881, 5881, 5882, 5882, 5882, 5882, 5882,
+     5882, 5882, 5882, 5882, 5882, 5882, 5882, 5882, 5882, 5882,
+     5882, 5882, 5882, 5883, 5883, 5883, 5883, 5883, 5883, 5883,
+     5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883, 5883,
+     5883, 5884, 5884, 5884, 5884, 5884, 5884, 5884, 5884, 5884,
+
+     5884, 5884, 5884, 5884, 5884, 5884, 5884, 5884, 5884, 5885,
+     5885, 5885, 5885, 5885, 5885, 5885, 5885, 5885, 5885, 5885,
+     5885, 5885, 5885, 5885, 5885, 5885, 5885, 5886, 5886, 5886,
+     5886, 5886, 5886, 5886, 5886, 5886, 5886, 5886, 5886, 5886,
+     5886, 5886, 5886, 5886, 5886, 5887, 5887, 5887, 5887, 5887,
+     5887, 5887, 5887, 5887, 5887, 5887, 5887, 5887, 5887, 5887,
+     5887, 5887, 5887, 5888, 5888, 5888, 5888, 5888, 5888, 5888,
+     5888, 5888, 5888, 5888, 5888, 5888, 5888, 5888, 5888, 5888,
+     5888, 5889, 5889, 5889, 5889, 5889, 5889, 5889, 5889, 5889,
+     5889, 5889, 5889, 5889, 5889, 5889, 5889, 5889, 5889, 5890,
+
+     5890, 5890, 5890, 5890, 5890, 5890, 5890, 5890, 5890, 5890,
+     5890, 5890, 5890, 5890, 5890, 5890, 5890, 5891, 5891, 5891,
+     5891, 5891, 5891, 5891, 5891, 5891, 5891, 5891, 5891, 5891,
+     5891, 5891, 5891, 5891, 5891, 5892, 5892, 5892, 5892, 5892,
+     5892, 5892, 5892, 5892, 5892, 5892, 5892, 5892, 5892, 5892,
+     5892, 5892, 5892, 5893, 5893, 5893, 5893, 5893, 5893, 5893,
+     5893, 5893, 5893, 5893, 5893, 5893, 5893, 5893, 5893, 5893,
+     5893, 5894, 5894, 5894, 5894, 5894, 5894, 5894, 5894, 5894,
+     5894, 5894, 5894, 5894, 5894, 5894, 5894, 5894, 5894, 5895,
+     5895, 5895, 5895, 5895, 5895, 5895, 5895, 5895, 5895, 5895,
+
+     5895, 5895, 5895, 5895, 5895, 5895, 5895, 5896, 5896, 5896,
+     5896, 5896, 5896, 5896, 5896, 5896, 5896, 5896, 5896, 5896,
+     5896, 5896, 5896, 5896, 5896, 5897, 5897, 5897, 5897, 5897,
+     5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897, 5897,
+     5897, 5897, 5897, 5898, 5898, 5898, 5898, 5898, 5898, 5898,
+     5898, 5898, 5898, 5898, 5898, 5898, 5898, 5898, 5898, 5898,
+     5898, 5899, 5899, 5899, 5899, 5899, 5899, 5899, 5899, 5899,
+     5899, 5899, 5899, 5899, 5899, 5899, 5899, 5899, 5899, 5900,
+     5900, 5900, 5900, 5900, 5900, 5900, 5900, 5900, 5900, 5900,
+     5900, 5900, 5900, 5900, 5900, 5900, 5900, 5901, 5901, 5901,
+
+     5901, 5901, 5901, 5901, 5901, 5901, 5901, 5901, 5901, 5901,
+     5901, 5901, 5901, 5901, 5901, 5902, 5902, 5902, 5902, 5902,
+     5902, 5902, 5902, 5902, 5902, 5902, 5902, 5902, 5902, 5902,
+     5902, 5902, 5902, 5903, 5903, 5903, 5903, 5903, 5903, 5903,
+     5903, 5903, 5903, 5903, 5903, 5903, 5903, 5903, 5903, 5903,
+     5903, 5904, 5904, 5904, 5904, 5904, 5904, 5904, 5904, 5904,
+     5904, 5904, 5904, 5904, 5904, 5904, 5904, 5904, 5904, 5905,
+     5905, 5905, 5905, 5905, 5905, 5905, 5905, 5905, 5905, 5905,
+     5905, 5905, 5905, 5905, 5905, 5905, 5905, 5906, 5906, 5906,
+     5906, 5906, 5906, 5906, 5906, 5906, 5906, 5906, 5906, 5906,
+
+     5906, 5906, 5906, 5906, 5906, 5907, 5907, 5907, 5907, 5907,
+     5907, 5907, 5907, 5907, 5907, 5907, 5907, 5907, 5907, 5907,
+     5907, 5907, 5907, 5908, 5908, 5908, 5908, 5908, 5908, 5908,
+     5908, 5908, 5908, 5908, 5908, 5908, 5908, 5908, 5908, 5908,
+     5908, 5909, 5909, 5909, 5909, 5909, 5909, 5909, 5909, 5909,
+     5909, 5909, 5909, 5909, 5909, 5909, 5909, 5909, 5909, 5910,
+     5910, 5910, 5910, 5910, 5910, 5910, 5910, 5910, 5910, 5910,
+     5910, 5910, 5910, 5910, 5910, 5910, 5910, 5911, 5911, 5911,
+     5911, 5911, 5911, 5911, 5911, 5911, 5911, 5911, 5911, 5911,
+     5911, 5911, 5911, 5911, 5911, 5912, 5912, 5912, 5912, 5912,
+
+     5912, 5912, 5912, 5912, 5912, 5912, 5912, 5912, 5912, 5912,
+     5912, 5912, 5912, 5913, 5913, 5913, 5913, 5913, 5913, 5913,
+     5913, 5913, 5913, 5913, 5913, 5913, 5913, 5913, 5913, 5913,
+     5913, 5914, 5914, 5914, 5914, 5914, 5914, 5914, 5914, 5914,
+     5914, 5914, 5914, 5914, 5914, 5914, 5914, 5914, 5914, 5915,
+     5915, 5915, 5915, 5915, 5915, 5915, 5915, 5915, 5915, 5915,
+     5915, 5915, 5915, 5915, 5915, 5915, 5915, 5916, 5916, 5916,
+     5916, 5916, 5916, 5916, 5916, 5916, 5916, 5916, 5916, 5916,
+     5916, 5916, 5916, 5916, 5916, 5917, 5917, 5917, 5917, 5917,
+     5917, 5917, 5917, 5917, 5917, 5917, 5917, 5917, 5917, 5917,
+
+     5917, 5917, 5917, 5918, 5918, 5918, 5918, 5918, 5918, 5918,
+     5918, 5918, 5918, 5918, 5918, 5918, 5918, 5918, 5918, 5918,
+     5918, 5919, 5919, 5919, 5919, 5919, 5919, 5919, 5919, 5919,
+     5919, 5919, 5919, 5919, 5919, 5919, 5919, 5919, 5919, 5920,
+     5920, 5920, 5920, 5920, 5920, 5920, 5920, 5920, 5920, 5920,
+     5920, 5920, 5920, 5920, 5920, 5920, 5920, 5921, 5921, 5921,
+     5921, 5921, 5921, 5921, 5921, 5921, 5921, 5921, 5921, 5921,
+     5921, 5921, 5921, 5921, 5921, 5922, 5922, 5922, 5922, 5922,
+     5922, 5922, 5922, 5922, 5922, 5922, 5922, 5922, 5922, 5922,
+     5922, 5922, 5922, 5923, 5923, 5923, 5923, 5923, 5923, 5923,
+
+     5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923, 5923,
+     5923, 5924, 5924, 5924, 5924, 5924, 5924, 5924, 5924, 5924,
+     5924, 5924, 5924, 5924, 5924, 5924, 5924, 5924, 5924, 5925,
+     5925, 5925, 5925, 5925, 5925, 5925, 5925, 5925, 5925, 5925,
+     5925, 5925, 5925, 5925, 5925, 5925, 5925, 5926, 5926, 5926,
+     5926, 5926, 5926, 5926, 5926, 5926, 5926, 5926, 5926, 5926,
+     5926, 5926, 5926, 5926, 5926, 5927, 5927, 5927, 5927, 5927,
+     5927, 5927, 5927, 5927, 5927, 5927, 5927, 5927, 5927, 5927,
+     5927, 5927, 5927, 5928, 5928, 5928, 5928, 5928, 5928, 5928,
+     5928, 5928, 5928, 5928, 5928, 5928, 5928, 5928, 5928, 5928,
+
+     5928, 5929, 5929, 5929, 5929, 5929, 5929, 5929, 5929, 5929,
+     5929, 5929, 5929, 5929, 5929, 5929, 5929, 5929, 5929, 5930,
+     5930, 5930, 5930, 5930, 5930, 5930, 5930, 5930, 5930, 5930,
+     5930, 5930, 5930, 5930, 5930, 5930, 5930, 5931, 5931, 5931,
+     5931, 5931, 5931, 5931, 5931, 5931, 5931, 5931, 5931, 5931,
+     5931, 5931, 5931, 5931, 5931, 5932, 5932, 5932, 5932, 5932,
+     5932, 5932, 5932, 5932, 5932, 5932, 5932, 5932, 5932, 5932,
+     5932, 5932, 5932, 5933, 5933, 5933, 5933, 5933, 5933, 5933,
+     5933, 5933, 5933, 5933, 5933, 5933, 5933, 5933, 5933, 5933,
+     5933, 5934, 5934, 5934, 5934, 5934, 5934, 5934, 5934, 5934,
+
+     5934, 5934, 5934, 5934, 5934, 5934, 5934, 5934, 5934, 5935,
+     5935, 5935, 5935, 5935, 5935, 5935, 5935, 5935, 5935, 5935,
+     5935, 5935, 5935, 5935, 5935, 5935, 5935, 5936, 5936, 5936,
+     5936, 5936, 5936, 5936, 5936, 5936, 5936, 5936, 5936, 5936,
+     5936, 5936, 5936, 5936, 5936, 5937, 5937, 5937, 5937, 5937,
+     5937, 5937, 5937, 5937, 5937, 5937, 5937, 5937, 5937, 5937,
+     5937, 5937, 5937, 5938, 5938, 5938, 5938, 5938, 5938, 5938,
+     5938, 5938, 5938, 5938, 5938, 5938, 5938, 5938, 5938, 5938,
+     5938, 5939, 5939, 5939, 5939, 5939, 5939, 5939, 5939, 5939,
+     5939, 5939, 5939, 5939, 5939, 5939, 5939, 5939, 5939, 5940,
+
+     5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940, 5940,
+     5940, 5940, 5940, 5940, 5940, 5940, 5940, 5941, 5941, 5941,
+     5941, 5941, 5941, 5941, 5941, 5941, 5941, 5941, 5941, 5941,
+     5941, 5941, 5941, 5941, 5941, 5942, 5942, 5942, 5942, 5942,
+     5942, 5942, 5942, 5942, 5942, 5942, 5942, 5942, 5942, 5942,
+     5942, 5942, 5942, 5943, 5943, 5943, 5943, 5943, 5943, 5943,
+     5943, 5943, 5943, 5943, 5943, 5943, 5943, 5943, 5943, 5943,
+     5943, 5944, 5944, 5944, 5944, 5944, 5944, 5944, 5944, 5944,
+     5944, 5944, 5944, 5944, 5944, 5944, 5944, 5944, 5944, 5945,
+     5945, 5945, 5945, 5945, 5945, 5945, 5945, 5945, 5945, 5945,
+
+     5945, 5945, 5945, 5945, 5945, 5945, 5945, 5946, 5946, 5946,
+     5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946, 5946,
+     5946, 5946, 5946, 5946, 5946, 5947, 5947, 5947, 5947, 5947,
+     5947, 5947, 5947, 5947, 5947, 5947, 5947, 5947, 5947, 5947,
+     5947, 5947, 5947, 5948, 5948, 5948, 5948, 5948, 5948, 5948,
+     5948, 5948, 5948, 5948, 5948, 5948, 5948, 5948, 5948, 5948,
+     5948, 5949, 5949, 5949, 5949, 5949, 5949, 5949, 5949, 5949,
+     5949, 5949, 5949, 5949, 5949, 5949, 5949, 5949, 5949, 5950,
+     5950, 5950, 5950, 5950, 5950, 5950, 5950, 5950, 5950, 5950,
+     5950, 5950, 5950, 5950, 5950, 5950, 5950, 5951, 5951, 5951,
+
+     5951, 5951, 5951, 5951, 5951, 5951, 5951, 5951, 5951, 5951,
+     5951, 5951, 5951, 5951, 5951, 5952, 5952, 5952, 5952, 5952,
+     5952, 5952, 5952, 5952, 5952, 5952, 5952, 5952, 5952, 5952,
+     5952, 5952, 5952, 5953, 5953, 5953, 5953, 5953, 5953, 5953,
+     5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953, 5953,
+     5953, 5954, 5954, 5954, 5954, 5954, 5954, 5954, 5954, 5954,
+     5954, 5954, 5954, 5954, 5954, 5954, 5954, 5954, 5954, 5955,
+     5955, 5955, 5955, 5955, 5955, 5955, 5955, 5955, 5955, 5955,
+     5955, 5955, 5955, 5955, 5955, 5955, 5955, 5956, 5956, 5956,
+     5956, 5956, 5956, 5956, 5956, 5956, 5956, 5956, 5956, 5956,
+
+     5956, 5956, 5956, 5956, 5956, 5957, 5957, 5957, 5957, 5957,
+     5957, 5957, 5957, 5957, 5957, 5957, 5957, 5957, 5957, 5957,
+     5957, 5957, 5957, 5958, 5958, 5958, 5958, 5958, 5958, 5958,
+     5958, 5958, 5958, 5958, 5958, 5958, 5958, 5958, 5958, 5958,
+     5958, 5959, 5959, 5959, 5959, 5959, 5959, 5959, 5959, 5959,
+     5959, 5959, 5959, 5959, 5959, 5959, 5959, 5959, 5959, 5960,
+     5960, 5960, 5960, 5960, 5960, 5960, 5960, 5960, 5960, 5960,
+     5960, 5960, 5960, 5960, 5960, 5960, 5960, 5961, 5961, 5961,
+     5961, 5961, 5961, 5961, 5961, 5961, 5961, 5961, 5961, 5961,
+     5961, 5961, 5961, 5961, 5961, 5962, 5962, 5962, 5962, 5962,
+
+     5962, 5962, 5962, 5962, 5962, 5962, 5962, 5962, 5962, 5962,
+     5962, 5962, 5962, 5963, 5963, 5963, 5963, 5963, 5963, 5963,
+     5963, 5963, 5963, 5963, 5963, 5963, 5963, 5963, 5963, 5963,
+     5963, 5964, 5964, 5964, 5964, 5964, 5964, 5964, 5964, 5964,
+     5964, 5964, 5964, 5964, 5964, 5964, 5964, 5964, 5964, 5965,
+     5965, 5965,    0,    0, 5965,    0, 5965, 5965,    0,    0,
+     5965,    0,    0, 5965, 5965, 5965, 5966, 5966, 5966, 5966,
+     5966, 5966, 5966, 5966, 5966, 5966, 5966, 5966, 5966, 5966,
+     5966, 5966, 5966, 5966, 5967, 5967, 5967, 5967, 5967, 5967,
+     5967, 5967, 5967, 5967, 5967, 5967, 5967, 5967, 5967, 5967,
+
+     5967, 5967, 5968, 5968, 5968, 5968, 5968, 5968, 5968, 5968,
+     5968, 5968, 5968, 5968, 5968, 5968, 5968, 5968, 5968, 5968,
+     5969, 5969, 5969, 5969, 5969, 5969, 5969, 5969, 5969, 5969,
+     5969, 5969, 5969, 5969, 5969, 5969, 5969, 5969, 5970, 5970,
+     5970, 5970, 5970, 5970, 5970, 5970, 5970, 5970, 5970, 5970,
+     5970, 5970, 5970, 5970, 5970, 5970, 5971, 5971, 5971, 5971,
+     5971, 5971, 5971, 5971, 5971, 5971, 5971, 5971, 5971, 5971,
+     5971, 5971, 5971, 5971, 5972, 5972, 5972, 5972, 5972, 5972,
+     5972, 5972, 5972, 5972, 5972, 5972, 5972, 5972, 5972, 5972,
+     5972, 5972, 5973, 5973, 5973, 5973, 5973, 5973, 5973, 5973,
+
+     5973, 5973, 5973, 5973, 5973, 5973, 5973, 5973, 5973, 5973,
+     5974, 5974, 5974, 5974, 5974, 5974, 5974, 5974, 5974, 5974,
+     5974, 5974, 5974, 5974, 5974, 5974, 5974, 5974, 5975, 5975,
+     5975, 5975, 5975, 5975, 5975, 5975, 5975, 5975, 5975, 5975,
+     5975, 5975, 5975, 5975, 5975, 5975, 5976, 5976, 5976, 5976,
+     5976, 5976, 5976, 5976, 5976, 5976, 5976, 5976, 5976, 5976,
+     5976, 5976, 5976, 5976, 5977, 5977, 5977, 5977, 5977, 5977,
+     5977, 5977, 5977, 5977, 5977, 5977, 5977, 5977, 5977, 5977,
+     5977, 5977, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978,
+     5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978, 5978,
+
+     5979, 5979, 5979, 5979, 5979, 5979, 5979, 5979, 5979, 5979,
+     5979, 5979, 5979, 5979, 5979, 5979, 5979, 5979, 5980, 5980,
+     5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980, 5980,
+     5980, 5980, 5980, 5980, 5980, 5980, 5981, 5981, 5981, 5981,
+     5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981, 5981,
+     5981, 5981, 5981, 5981, 5982, 5982, 5982, 5982, 5982, 5982,
+     5982, 5982, 5982, 5982, 5982, 5982, 5982, 5982, 5982, 5982,
+     5982, 5982, 5983, 5983, 5983, 5983, 5983, 5983, 5983, 5983,
+     5983, 5983, 5983, 5983, 5983, 5983, 5983, 5983, 5983, 5983,
+     5984, 5984, 5984, 5984, 5984, 5984, 5984, 5984, 5984, 5984,
+
+     5984, 5984, 5984, 5984, 5984, 5984, 5984, 5984, 5985, 5985,
+     5985, 5985, 5985, 5985, 5985, 5985, 5985, 5985, 5985, 5985,
+     5985, 5985, 5985, 5985, 5985, 5985, 5986, 5986, 5986, 5986,
+     5986, 5986, 5986, 5986, 5986, 5986, 5986, 5986, 5986, 5986,
+     5986, 5986, 5986, 5986, 5987, 5987, 5987, 5987, 5987, 5987,
+     5987, 5987, 5987, 5987, 5987, 5987, 5987, 5987, 5987, 5987,
+     5987, 5987, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988,
+     5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988, 5988,
+     5989, 5989, 5989, 5989, 5989, 5989, 5989, 5989, 5989, 5989,
+     5989, 5989, 5989, 5989, 5989, 5989, 5989, 5989, 5990, 5990,
+
+     5990, 5990, 5990, 5990, 5990, 5990, 5990, 5990, 5990, 5990,
+     5990, 5990, 5990, 5990, 5990, 5990, 5991, 5991, 5991, 5991,
+     5991, 5991, 5991, 5991, 5991, 5991, 5991, 5991, 5991, 5991,
+     5991, 5991, 5991, 5991, 5992, 5992, 5992, 5992, 5992, 5992,
+     5992, 5992, 5992, 5992, 5992, 5992, 5992, 5992, 5992, 5992,
+     5992, 5992, 5993, 5993, 5993, 5993, 5993, 5993, 5993, 5993,
+     5993, 5993, 5993, 5993, 5993, 5993, 5993, 5993, 5993, 5993,
+     5994, 5994, 5994, 5994, 5994, 5994, 5994, 5994, 5994, 5994,
+     5994, 5994, 5994, 5994, 5994, 5994, 5994, 5994, 5995, 5995,
+     5995, 5995, 5995, 5995, 5995, 5995, 5995, 5995, 5995, 5995,
+
+     5995, 5995, 5995, 5995, 5995, 5995, 5996, 5996, 5996, 5996,
+     5996, 5996, 5996, 5996, 5996, 5996, 5996, 5996, 5996, 5996,
+     5996, 5996, 5996, 5996, 5997, 5997, 5997, 5997, 5997, 5997,
+     5997, 5997, 5997, 5997, 5997, 5997, 5997, 5997, 5997, 5997,
+     5997, 5997, 5998, 5998, 5998, 5998, 5998, 5998, 5998, 5998,
+     5998, 5998, 5998, 5998, 5998, 5998, 5998, 5998, 5998, 5998,
+     5999, 5999, 5999, 5999, 5999, 5999, 5999, 5999, 5999, 5999,
+     5999, 5999, 5999, 5999, 5999, 5999, 5999, 5999, 6000, 6000,
+     6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000,
+     6000, 6000, 6000, 6000, 6000, 6000, 6001, 6001, 6001, 6001,
+
+     6001, 6001, 6001, 6001, 6001, 6001, 6001, 6001, 6001, 6001,
+     6001, 6001, 6001, 6001, 6002, 6002, 6002, 6002, 6002, 6002,
+     6002, 6002, 6002, 6002, 6002, 6002, 6002, 6002, 6002, 6002,
+     6002, 6002, 6003, 6003, 6003, 6003, 6003, 6003, 6003, 6003,
+     6003, 6003, 6003, 6003, 6003, 6003, 6003, 6003, 6003, 6003,
+     6004, 6004, 6004, 6004, 6004, 6004, 6004, 6004, 6004, 6004,
+     6004, 6004, 6004, 6004, 6004, 6004, 6004, 6004, 6005, 6005,
+     6005, 6005, 6005, 6005, 6005, 6005, 6005, 6005, 6005, 6005,
+     6005, 6005, 6005, 6005, 6005, 6005, 6006, 6006, 6006, 6006,
+     6006, 6006, 6006, 6006, 6006, 6006, 6006, 6006, 6006, 6006,
+
+     6006, 6006, 6006, 6006, 6007, 6007, 6007, 6007, 6007, 6007,
+     6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007, 6007,
+     6007, 6007, 6008, 6008, 6008, 6008, 6008, 6008, 6008, 6008,
+     6008, 6008, 6008, 6008, 6008, 6008, 6008, 6008, 6008, 6008,
+     6009, 6009, 6009, 6009, 6009, 6009, 6009, 6009, 6009, 6009,
+     6009, 6009, 6009, 6009, 6009, 6009, 6009, 6009, 6010, 6010,
+     6010, 6010, 6010, 6010, 6010, 6010, 6010, 6010, 6010, 6010,
+     6010, 6010, 6010, 6010, 6010, 6010, 6011, 6011, 6011, 6011,
+     6011, 6011, 6011, 6011, 6011, 6011, 6011, 6011, 6011, 6011,
+     6011, 6011, 6011, 6011, 6012, 6012, 6012, 6012, 6012, 6012,
+
+     6012, 6012, 6012, 6012, 6012, 6012, 6012, 6012, 6012, 6012,
+     6012, 6012, 6013, 6013, 6013, 6013, 6013, 6013, 6013, 6013,
+     6013, 6013, 6013, 6013, 6013, 6013, 6013, 6013, 6013, 6013,
+     6014, 6014, 6014, 6014, 6014, 6014, 6014, 6014, 6014, 6014,
+     6014, 6014, 6014, 6014, 6014, 6014, 6014, 6014, 6015, 6015,
+     6015, 6015, 6015, 6015, 6015, 6015, 6015, 6015, 6015, 6015,
+     6015, 6015, 6015, 6015, 6015, 6015, 6016, 6016, 6016, 6016,
+     6016, 6016, 6016, 6016, 6016, 6016, 6016, 6016, 6016, 6016,
+     6016, 6016, 6016, 6016, 6017, 6017, 6017, 6017, 6017, 6017,
+     6017, 6017, 6017, 6017, 6017, 6017, 6017, 6017, 6017, 6017,
+
+     6017, 6017, 6018, 6018, 6018, 6018, 6018, 6018, 6018, 6018,
+     6018, 6018, 6018, 6018, 6018, 6018, 6018, 6018, 6018, 6018,
+     6019, 6019, 6019, 6019, 6019, 6019, 6019, 6019, 6019, 6019,
+     6019, 6019, 6019, 6019, 6019, 6019, 6019, 6019, 6020, 6020,
+     6020, 6020, 6020, 6020, 6020, 6020, 6020, 6020, 6020, 6020,
+     6020, 6020, 6020, 6020, 6020, 6020, 6021, 6021, 6021, 6021,
+     6021, 6021, 6021, 6021, 6021, 6021, 6021, 6021, 6021, 6021,
+     6021, 6021, 6021, 6021, 6022, 6022, 6022, 6022, 6022, 6022,
+     6022, 6022, 6022, 6022, 6022, 6022, 6022, 6022, 6022, 6022,
+     6022, 6022, 6023, 6023, 6023, 6023, 6023, 6023, 6023, 6023,
+
+     6023, 6023, 6023, 6023, 6023, 6023, 6023, 6023, 6023, 6023,
+     6024, 6024, 6024, 6024, 6024, 6024, 6024, 6024, 6024, 6024,
+     6024, 6024, 6024, 6024, 6024, 6024, 6024, 6024, 6025, 6025,
+     6025, 6025, 6025, 6025, 6025, 6025, 6025, 6025, 6025, 6025,
+     6025, 6025, 6025, 6025, 6025, 6025, 6026, 6026, 6026, 6026,
+     6026, 6026, 6026, 6026, 6026, 6026, 6026, 6026, 6026, 6026,
+     6026, 6026, 6026, 6026, 6027, 6027, 6027, 6027, 6027, 6027,
+     6027, 6027, 6027, 6027, 6027, 6027, 6027, 6027, 6027, 6027,
+     6027, 6027, 6028, 6028, 6028,    0,    0, 6028,    0, 6028,
+     6028,    0,    0, 6028,    0,    0, 6028, 6028, 6028, 6029,
+
+     6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029, 6029,
+     6029, 6029, 6029, 6029, 6029, 6029, 6029, 6030, 6030, 6030,
+     6030, 6030, 6030, 6030, 6030, 6030, 6030, 6030, 6030, 6030,
+     6030, 6030, 6030, 6030, 6030, 6031, 6031, 6031, 6031, 6031,
+     6031, 6031, 6031, 6031, 6031, 6031, 6031, 6031, 6031, 6031,
+     6031, 6031, 6031, 6032, 6032, 6032, 6032, 6032, 6032, 6032,
+     6032, 6032, 6032, 6032, 6032, 6032, 6032, 6032, 6032, 6032,
+     6032, 6033, 6033, 6033, 6033, 6033, 6033, 6033, 6033, 6033,
+     6033, 6033, 6033, 6033, 6033, 6033, 6033, 6033, 6033, 6034,
+     6034, 6034, 6034, 6034, 6034, 6034, 6034, 6034, 6034, 6034,
+
+     6034, 6034, 6034, 6034, 6034, 6034, 6034, 6035, 6035, 6035,
+     6035, 6035, 6035, 6035, 6035, 6035, 6035, 6035, 6035, 6035,
+     6035, 6035, 6035, 6035, 6035, 6036, 6036, 6036, 6036, 6036,
+     6036, 6036, 6036, 6036, 6036, 6036, 6036, 6036, 6036, 6036,
+     6036, 6036, 6036, 6037, 6037, 6037, 6037, 6037, 6037, 6037,
+     6037, 6037, 6037, 6037, 6037, 6037, 6037, 6037, 6037, 6037,
+     6037, 6038, 6038, 6038, 6038, 6038, 6038, 6038, 6038, 6038,
+     6038, 6038, 6038, 6038, 6038, 6038, 6038, 6038, 6038, 6039,
+     6039, 6039, 6039, 6039, 6039, 6039, 6039, 6039, 6039, 6039,
+     6039, 6039, 6039, 6039, 6039, 6039, 6039, 6040, 6040, 6040,
+
+     6040, 6040, 6040, 6040, 6040, 6040, 6040, 6040, 6040, 6040,
+     6040, 6040, 6040, 6040, 6040, 6041, 6041, 6041, 6041, 6041,
+     6041, 6041, 6041, 6041, 6041, 6041, 6041, 6041, 6041, 6041,
+     6041, 6041, 6041, 6042, 6042, 6042, 6042, 6042, 6042, 6042,
+     6042, 6042, 6042, 6042, 6042, 6042, 6042, 6042, 6042, 6042,
+     6042, 6043, 6043, 6043, 6043, 6043, 6043, 6043, 6043, 6043,
+     6043, 6043, 6043, 6043, 6043, 6043, 6043, 6043, 6043, 6044,
+     6044, 6044, 6044, 6044, 6044, 6044, 6044, 6044, 6044, 6044,
+     6044, 6044, 6044, 6044, 6044, 6044, 6044, 6045, 6045, 6045,
+     6045, 6045, 6045, 6045, 6045, 6045, 6045, 6045, 6045, 6045,
+
+     6045, 6045, 6045, 6045, 6045, 6046, 6046, 6046, 6046, 6046,
+     6046, 6046, 6046, 6046, 6046, 6046, 6046, 6046, 6046, 6046,
+     6046, 6046, 6046, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
+     6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047, 6047,
+     6047, 6048, 6048, 6048, 6048, 6048, 6048, 6048, 6048, 6048,
+     6048, 6048, 6048, 6048, 6048, 6048, 6048, 6048, 6048, 6049,
+     6049, 6049, 6049, 6049, 6049, 6049, 6049, 6049, 6049, 6049,
+     6049, 6049, 6049, 6049, 6049, 6049, 6049, 6050, 6050, 6050,
+     6050, 6050, 6050, 6050, 6050, 6050, 6050, 6050, 6050, 6050,
+     6050, 6050, 6050, 6050, 6050, 6051, 6051, 6051, 6051, 6051,
+
+     6051, 6051, 6051, 6051, 6051, 6051, 6051, 6051, 6051, 6051,
+     6051, 6051, 6051, 6052, 6052, 6052, 6052, 6052, 6052, 6052,
+     6052, 6052, 6052, 6052, 6052, 6052, 6052, 6052, 6052, 6052,
+     6052, 6053, 6053, 6053, 6053, 6053, 6053, 6053, 6053, 6053,
+     6053, 6053, 6053, 6053, 6053, 6053, 6053, 6053, 6053, 6054,
+     6054, 6054, 6054, 6054, 6054, 6054, 6054, 6054, 6054, 6054,
+     6054, 6054, 6054, 6054, 6054, 6054, 6054, 6055, 6055, 6055,
+     6055, 6055, 6055, 6055, 6055, 6055, 6055, 6055, 6055, 6055,
+     6055, 6055, 6055, 6055, 6055, 6056, 6056, 6056, 6056, 6056,
+     6056, 6056, 6056, 6056, 6056, 6056, 6056, 6056, 6056, 6056,
+
+     6056, 6056, 6056, 6057, 6057, 6057, 6057, 6057, 6057, 6057,
+     6057, 6057, 6057, 6057, 6057, 6057, 6057, 6057, 6057, 6057,
+     6057, 6058, 6058, 6058, 6058, 6058, 6058, 6058, 6058, 6058,
+     6058, 6058, 6058, 6058, 6058, 6058, 6058, 6058, 6058, 6059,
+     6059, 6059, 6059, 6059, 6059, 6059, 6059, 6059, 6059, 6059,
+     6059, 6059, 6059, 6059, 6059, 6059, 6059, 6060, 6060, 6060,
+     6060, 6060, 6060, 6060, 6060, 6060, 6060, 6060, 6060, 6060,
+     6060, 6060, 6060, 6060, 6060, 6061, 6061, 6061, 6061, 6061,
+     6061, 6061, 6061, 6061, 6061, 6061, 6061, 6061, 6061, 6061,
+     6061, 6061, 6061, 6062, 6062, 6062, 6062, 6062, 6062, 6062,
+
+     6062, 6062, 6062, 6062, 6062, 6062, 6062, 6062, 6062, 6062,
+     6062, 6063, 6063, 6063, 6063, 6063, 6063, 6063, 6063, 6063,
+     6063, 6063, 6063, 6063, 6063, 6063, 6063, 6063, 6063, 6064,
+     6064, 6064, 6064, 6064, 6064, 6064, 6064, 6064, 6064, 6064,
+     6064, 6064, 6064, 6064, 6064, 6064, 6064, 6065, 6065, 6065,
+     6065, 6065, 6065, 6065, 6065, 6065, 6065, 6065, 6065, 6065,
+     6065, 6065, 6065, 6065, 6065, 6066, 6066, 6066, 6066, 6066,
+     6066, 6066, 6066, 6066, 6066, 6066, 6066, 6066, 6066, 6066,
+     6066, 6066, 6066, 6067, 6067, 6067, 6067, 6067, 6067, 6067,
+     6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067, 6067,
+
+     6067, 6068, 6068, 6068, 6068, 6068, 6068, 6068, 6068, 6068,
+     6068, 6068, 6068, 6068, 6068, 6068, 6068, 6068, 6068, 6069,
+     6069, 6069, 6069, 6069, 6069, 6069, 6069, 6069, 6069, 6069,
+     6069, 6069, 6069, 6069, 6069, 6069, 6069, 6070, 6070, 6070,
+     6070, 6070, 6070, 6070, 6070, 6070, 6070, 6070, 6070, 6070,
+     6070, 6070, 6070, 6070, 6070, 6071, 6071, 6071, 6071, 6071,
+     6071, 6071, 6071, 6071, 6071, 6071, 6071, 6071, 6071, 6071,
+     6071, 6071, 6071, 6072, 6072, 6072, 6072, 6072, 6072, 6072,
+     6072, 6072, 6072, 6072, 6072, 6072, 6072, 6072, 6072, 6072,
+     6072, 6073, 6073, 6073, 6073, 6073, 6073, 6073, 6073, 6073,
+
+     6073, 6073, 6073, 6073, 6073, 6073, 6073, 6073, 6073, 6074,
+     6074, 6074, 6074, 6074, 6074, 6074, 6074, 6074, 6074, 6074,
+     6074, 6074, 6074, 6074, 6074, 6074, 6074, 6075, 6075, 6075,
+     6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075, 6075,
+     6075, 6075, 6075, 6075, 6075, 6076, 6076, 6076, 6076, 6076,
+     6076, 6076, 6076, 6076, 6076, 6076, 6076, 6076, 6076, 6076,
+     6076, 6076, 6076, 6077, 6077, 6077, 6077, 6077, 6077, 6077,
+     6077, 6077, 6077, 6077, 6077, 6077, 6077, 6077, 6077, 6077,
+     6077, 6078, 6078, 6078, 6078, 6078, 6078, 6078, 6078, 6078,
+     6078, 6078, 6078, 6078, 6078, 6078, 6078, 6078, 6078, 6079,
+
+     6079, 6079, 6079, 6079, 6079, 6079, 6079, 6079, 6079, 6079,
+     6079, 6079, 6079, 6079, 6079, 6079, 6079, 6080, 6080, 6080,
+     6080, 6080, 6080, 6080, 6080, 6080, 6080, 6080, 6080, 6080,
+     6080, 6080, 6080, 6080, 6080, 6081, 6081, 6081, 6081, 6081,
+     6081, 6081, 6081, 6081, 6081, 6081, 6081, 6081, 6081, 6081,
+     6081, 6081, 6081, 6082, 6082, 6082, 6082, 6082, 6082, 6082,
+     6082, 6082, 6082, 6082, 6082, 6082, 6082, 6082, 6082, 6082,
+     6082, 6083, 6083, 6083, 6083, 6083, 6083, 6083, 6083, 6083,
+     6083, 6083, 6083, 6083, 6083, 6083, 6083, 6083, 6083, 6084,
+     6084, 6084, 6084, 6084, 6084, 6084, 6084, 6084, 6084, 6084,
+
+     6084, 6084, 6084, 6084, 6084, 6084, 6084, 6085, 6085, 6085,
+     6085, 6085, 6085, 6085, 6085, 6085, 6085, 6085, 6085, 6085,
+     6085, 6085, 6085, 6085, 6085, 6086, 6086, 6086, 6086, 6086,
+     6086, 6086, 6086, 6086, 6086, 6086, 6086, 6086, 6086, 6086,
+     6086, 6086, 6086, 6087, 6087, 6087, 6087, 6087, 6087, 6087,
+     6087, 6087, 6087, 6087, 6087, 6087, 6087, 6087, 6087, 6087,
+     6087, 6088, 6088, 6088, 6088, 6088, 6088, 6088, 6088, 6088,
+     6088, 6088, 6088, 6088, 6088, 6088, 6088, 6088, 6088, 6089,
+     6089, 6089, 6089, 6089, 6089, 6089, 6089, 6089, 6089, 6089,
+     6089, 6089, 6089, 6089, 6089, 6089, 6089, 6090, 6090, 6090,
+
+     6090, 6090, 6090, 6090, 6090, 6090, 6090, 6090, 6090, 6090,
+     6090, 6090, 6090, 6090, 6090, 6091, 6091, 6091, 6091, 6091,
+     6091, 6091, 6091, 6091, 6091, 6091, 6091, 6091, 6091, 6091,
+     6091, 6091, 6091, 6092, 6092, 6092, 6092, 6092, 6092, 6092,
+     6092, 6092, 6092, 6092, 6092, 6092, 6092, 6092, 6092, 6092,
+     6092, 6093, 6093, 6093, 6093, 6093, 6093, 6093, 6093, 6093,
+     6093, 6093, 6093, 6093, 6093, 6093, 6093, 6093, 6093, 6094,
+     6094, 6094, 6094, 6094, 6094, 6094, 6094, 6094, 6094, 6094,
+     6094, 6094, 6094, 6094, 6094, 6094, 6094, 6095, 6095, 6095,
+     6095, 6095, 6095, 6095, 6095, 6095, 6095, 6095, 6095, 6095,
+
+     6095, 6095, 6095, 6095, 6095, 6096, 6096, 6096, 6096, 6096,
+     6096, 6096, 6096, 6096, 6096, 6096, 6096, 6096, 6096, 6096,
+     6096, 6096, 6096, 6097, 6097, 6097, 6097, 6097, 6097, 6097,
+     6097, 6097, 6097, 6097, 6097, 6097, 6097, 6097, 6097, 6097,
+     6097, 6098, 6098, 6098, 6098, 6098, 6098, 6098, 6098, 6098,
+     6098, 6098, 6098, 6098, 6098, 6098, 6098, 6098, 6098, 6099,
+     6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099, 6099,
+     6099, 6099, 6099, 6099, 6099, 6099, 6099, 6100, 6100, 6100,
+     6100, 6100, 6100, 6100, 6100, 6100, 6100, 6100, 6100, 6100,
+     6100, 6100, 6100, 6100, 6100, 6101, 6101, 6101, 6101, 6101,
+
+     6101, 6101, 6101, 6101, 6101, 6101, 6101, 6101, 6101, 6101,
+     6101, 6101, 6101, 6102, 6102, 6102, 6102, 6102, 6102, 6102,
+     6102, 6102, 6102, 6102, 6102, 6102, 6102, 6102, 6102, 6102,
+     6102, 6103, 6103, 6103, 6103, 6103, 6103, 6103, 6103, 6103,
+     6103, 6103, 6103, 6103, 6103, 6103, 6103, 6103, 6103, 6104,
+     6104, 6104, 6104, 6104, 6104, 6104, 6104, 6104, 6104, 6104,
+     6104, 6104, 6104, 6104, 6104, 6104, 6104, 6105, 6105, 6105,
+     6105, 6105, 6105, 6105, 6105, 6105, 6105, 6105, 6105, 6105,
+     6105, 6105, 6105, 6105, 6105, 6106, 6106, 6106, 6106, 6106,
+     6106, 6106, 6106, 6106, 6106, 6106, 6106, 6106, 6106, 6106,
+
+     6106, 6106, 6106, 6107, 6107, 6107, 6107, 6107, 6107, 6107,
+     6107, 6107, 6107, 6107, 6107, 6107, 6107, 6107, 6107, 6107,
+     6107, 6108, 6108, 6108, 6108, 6108, 6108, 6108, 6108, 6108,
+     6108, 6108, 6108, 6108, 6108, 6108, 6108, 6108, 6108, 6109,
+     6109, 6109, 6109, 6109, 6109, 6109, 6109, 6109, 6109, 6109,
+     6109, 6109, 6109, 6109, 6109, 6109, 6109, 6110, 6110, 6110,
+     6110, 6110, 6110, 6110, 6110, 6110, 6110, 6110, 6110, 6110,
+     6110, 6110, 6110, 6110, 6110, 6111, 6111, 6111, 6111, 6111,
+     6111, 6111, 6111, 6111, 6111, 6111, 6111, 6111, 6111, 6111,
+     6111, 6111, 6111, 6112, 6112, 6112, 6112, 6112, 6112, 6112,
+
+     6112, 6112, 6112, 6112, 6112, 6112, 6112, 6112, 6112, 6112,
+     6112, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113,
+     6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6113, 6114,
+     6114, 6114, 6114, 6114, 6114, 6114, 6114, 6114, 6114, 6114,
+     6114, 6114, 6114, 6114, 6114, 6114, 6114, 6115, 6115, 6115,
+     6115, 6115, 6115, 6115, 6115, 6115, 6115, 6115, 6115, 6115,
+     6115, 6115, 6115, 6115, 6115, 6116, 6116, 6116, 6116, 6116,
+     6116, 6116, 6116, 6116, 6116, 6116, 6116, 6116, 6116, 6116,
+     6116, 6116, 6116, 6117, 6117, 6117, 6117, 6117, 6117, 6117,
+     6117, 6117, 6117, 6117, 6117, 6117, 6117, 6117, 6117, 6117,
+
+     6117, 6118, 6118, 6118, 6118, 6118, 6118, 6118, 6118, 6118,
+     6118, 6118, 6118, 6118, 6118, 6118, 6118, 6118, 6118, 6119,
+     6119, 6119, 6119, 6119, 6119, 6119, 6119, 6119, 6119, 6119,
+     6119, 6119, 6119, 6119, 6119, 6119, 6119, 6120, 6120, 6120,
+     6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120, 6120,
+     6120, 6120, 6120, 6120, 6120, 6121, 6121, 6121, 6121, 6121,
+     6121, 6121, 6121, 6121, 6121, 6121, 6121, 6121, 6121, 6121,
+     6121, 6121, 6121, 6122, 6122, 6122, 6122, 6122, 6122, 6122,
+     6122, 6122, 6122, 6122, 6122, 6122, 6122, 6122, 6122, 6122,
+     6122, 6123, 6123, 6123, 6123, 6123, 6123, 6123, 6123, 6123,
+
+     6123, 6123, 6123, 6123, 6123, 6123, 6123, 6123, 6123, 6124,
+     6124, 6124, 6124, 6124, 6124, 6124, 6124, 6124, 6124, 6124,
+     6124, 6124, 6124, 6124, 6124, 6124, 6124, 6125, 6125, 6125,
+     6125, 6125, 6125, 6125, 6125, 6125, 6125, 6125, 6125, 6125,
+     6125, 6125, 6125, 6125, 6125, 6126, 6126, 6126, 6126, 6126,
+     6126, 6126, 6126, 6126, 6126, 6126, 6126, 6126, 6126, 6126,
+     6126, 6126, 6126, 6127, 6127, 6127, 6127, 6127, 6127, 6127,
+     6127, 6127, 6127, 6127, 6127, 6127, 6127, 6127, 6127, 6127,
+     6127, 6128, 6128, 6128, 6128, 6128, 6128, 6128, 6128, 6128,
+     6128, 6128, 6128, 6128, 6128, 6128, 6128, 6128, 6128, 6129,
+
+     6129, 6129, 6129, 6129, 6129, 6129, 6129, 6129, 6129, 6129,
+     6129, 6129, 6129, 6129, 6129, 6129, 6129, 6130, 6130, 6130,
+     6130, 6130, 6130, 6130, 6130, 6130, 6130, 6130, 6130, 6130,
+     6130, 6130, 6130, 6130, 6130, 6131, 6131, 6131, 6131, 6131,
+     6131, 6131, 6131, 6131, 6131, 6131, 6131, 6131, 6131, 6131,
+     6131, 6131, 6131, 6132, 6132, 6132, 6132, 6132, 6132, 6132,
+     6132, 6132, 6132, 6132, 6132, 6132, 6132, 6132, 6132, 6132,
+     6132, 6133, 6133, 6133, 6133, 6133, 6133, 6133, 6133, 6133,
+     6133, 6133, 6133, 6133, 6133, 6133, 6133, 6133, 6133, 6134,
+     6134, 6134, 6134, 6134, 6134, 6134, 6134, 6134, 6134, 6134,
+
+     6134, 6134, 6134, 6134, 6134, 6134, 6134, 6135, 6135, 6135,
+     6135, 6135, 6135, 6135, 6135, 6135, 6135, 6135, 6135, 6135,
+     6135, 6135, 6135, 6135, 6135, 6136, 6136, 6136, 6136, 6136,
+     6136, 6136, 6136, 6136, 6136, 6136, 6136, 6136, 6136, 6136,
+     6136, 6136, 6136, 6137, 6137, 6137, 6137, 6137, 6137, 6137,
+     6137, 6137, 6137, 6137, 6137, 6137, 6137, 6137, 6137, 6137,
+     6137, 6138, 6138, 6138, 6138, 6138, 6138, 6138, 6138, 6138,
+     6138, 6138, 6138, 6138, 6138, 6138, 6138, 6138, 6138, 6139,
+     6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139, 6139,
+     6139, 6139, 6139, 6139, 6139, 6139, 6139, 6140, 6140, 6140,
+
+     6140, 6140, 6140, 6140, 6140, 6140, 6140, 6140, 6140, 6140,
+     6140, 6140, 6140, 6140, 6140, 6141, 6141, 6141, 6141, 6141,
+     6141, 6141, 6141, 6141, 6141, 6141, 6141, 6141, 6141, 6141,
+     6141, 6141, 6141, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+     6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142,
+     6142, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143,
+     6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6143, 6144,
+     6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144,
+     6144, 6144, 6144, 6144, 6144, 6144, 6144, 6145, 6145, 6145,
+     6145, 6145, 6145, 6145, 6145, 6145, 6145, 6145, 6145, 6145,
+
+     6145, 6145, 6145, 6145, 6145, 6146, 6146, 6146, 6146, 6146,
+     6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+     6146, 6146, 6146, 6147, 6147, 6147, 6147, 6147, 6147, 6147,
+     6147, 6147, 6147, 6147, 6147, 6147, 6147, 6147, 6147, 6147,
+     6147, 6148, 6148, 6148, 6148, 6148, 6148, 6148, 6148, 6148,
+     6148, 6148, 6148, 6148, 6148, 6148, 6148, 6148, 6148, 6149,
+     6149, 6149, 6149, 6149, 6149, 6149, 6149, 6149, 6149, 6149,
+     6149, 6149, 6149, 6149, 6149, 6149, 6149, 6150, 6150, 6150,
+     6150, 6150, 6150, 6150, 6150, 6150, 6150, 6150, 6150, 6150,
+     6150, 6150, 6150, 6150, 6150, 6151, 6151, 6151, 6151, 6151,
+
+     6151, 6151, 6151, 6151, 6151, 6151, 6151, 6151, 6151, 6151,
+     6151, 6151, 6151, 6152, 6152, 6152, 6152, 6152, 6152, 6152,
+     6152, 6152, 6152, 6152, 6152, 6152, 6152, 6152, 6152, 6152,
+     6152, 6153, 6153, 6153, 6153, 6153, 6153, 6153, 6153, 6153,
+     6153, 6153, 6153, 6153, 6153, 6153, 6153, 6153, 6153, 6154,
+     6154, 6154, 6154, 6154, 6154, 6154, 6154, 6154, 6154, 6154,
+     6154, 6154, 6154, 6154, 6154, 6154, 6154, 6155, 6155, 6155,
+     6155, 6155, 6155, 6155, 6155, 6155, 6155, 6155, 6155, 6155,
+     6155, 6155, 6155, 6155, 6155, 6156, 6156, 6156, 6156, 6156,
+     6156, 6156, 6156, 6156, 6156, 6156, 6156, 6156, 6156, 6156,
+
+     6156, 6156, 6156, 6157, 6157, 6157, 6157, 6157, 6157, 6157,
+     6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157,
+     6157, 6158, 6158, 6158, 6158, 6158, 6158, 6158, 6158, 6158,
+     6158, 6158, 6158, 6158, 6158, 6158, 6158, 6158, 6158, 6159,
+     6159, 6159, 6159, 6159, 6159, 6159, 6159, 6159, 6159, 6159,
+     6159, 6159, 6159, 6159, 6159, 6159, 6159, 6160, 6160, 6160,
+     6160, 6160, 6160, 6160, 6160, 6160, 6160, 6160, 6160, 6160,
+     6160, 6160, 6160, 6160, 6160, 6161, 6161, 6161, 6161, 6161,
+     6161, 6161, 6161, 6161, 6161, 6161, 6161, 6161, 6161, 6161,
+     6161, 6161, 6161, 6162, 6162, 6162, 6162, 6162, 6162, 6162,
+
+     6162, 6162, 6162, 6162, 6162, 6162, 6162, 6162, 6162, 6162,
+     6162, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163,
+     6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6163, 6164,
+     6164, 6164, 6164, 6164, 6164, 6164, 6164, 6164, 6164, 6164,
+     6164, 6164, 6164, 6164, 6164, 6164, 6164, 6165, 6165, 6165,
+     6165, 6165, 6165, 6165, 6165, 6165, 6165, 6165, 6165, 6165,
+     6165, 6165, 6165, 6165, 6165, 6166, 6166, 6166, 6166, 6166,
+     6166, 6166, 6166, 6166, 6166, 6166, 6166, 6166, 6166, 6166,
+     6166, 6166, 6166, 6167, 6167, 6167, 6167, 6167, 6167, 6167,
+     6167, 6167, 6167, 6167, 6167, 6167, 6167, 6167, 6167, 6167,
+
+     6167, 6168, 6168, 6168, 6168, 6168, 6168, 6168, 6168, 6168,
+     6168, 6168, 6168, 6168, 6168, 6168, 6168, 6168, 6168, 6169,
+     6169, 6169, 6169, 6169, 6169, 6169, 6169, 6169, 6169, 6169,
+     6169, 6169, 6169, 6169, 6169, 6169, 6169, 6170, 6170, 6170,
+     6170, 6170, 6170, 6170, 6170, 6170, 6170, 6170, 6170, 6170,
+     6170, 6170, 6170, 6170, 6170, 6171, 6171, 6171, 6171, 6171,
+     6171, 6171, 6171, 6171, 6171, 6171, 6171, 6171, 6171, 6171,
+     6171, 6171, 6171, 6172, 6172, 6172, 6172, 6172, 6172, 6172,
+     6172, 6172, 6172, 6172, 6172, 6172, 6172, 6172, 6172, 6172,
+     6172, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173,
+
+     6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6173, 6174,
+     6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174, 6174,
+     6174, 6174, 6174, 6174, 6174, 6174, 6174, 6175, 6175, 6175,
+     6175, 6175, 6175, 6175, 6175, 6175, 6175, 6175, 6175, 6175,
+     6175, 6175, 6175, 6175, 6175, 6176, 6176, 6176, 6176, 6176,
+     6176, 6176, 6176, 6176, 6176, 6176, 6176, 6176, 6176, 6176,
+     6176, 6176, 6176, 6177, 6177, 6177, 6177, 6177, 6177, 6177,
+     6177, 6177, 6177, 6177, 6177, 6177, 6177, 6177, 6177, 6177,
+     6177, 6178, 6178, 6178, 6178, 6178, 6178, 6178, 6178, 6178,
+     6178, 6178, 6178, 6178, 6178, 6178, 6178, 6178, 6178, 6179,
+
+     6179, 6179, 6179, 6179, 6179, 6179, 6179, 6179, 6179, 6179,
+     6179, 6179, 6179, 6179, 6179, 6179, 6179, 6180, 6180, 6180,
+     6180, 6180, 6180, 6180, 6180, 6180, 6180, 6180, 6180, 6180,
+     6180, 6180, 6180, 6180, 6180, 6181, 6181, 6181, 6181, 6181,
+     6181, 6181, 6181, 6181, 6181, 6181, 6181, 6181, 6181, 6181,
+     6181, 6181, 6181, 6182, 6182, 6182, 6182, 6182, 6182, 6182,
+     6182, 6182, 6182, 6182, 6182, 6182, 6182, 6182, 6182, 6182,
+     6182, 6183, 6183, 6183, 6183, 6183, 6183, 6183, 6183, 6183,
+     6183, 6183, 6183, 6183, 6183, 6183, 6183, 6183, 6183, 6184,
+     6184, 6184, 6184, 6184, 6184, 6184, 6184, 6184, 6184, 6184,
+
+     6184, 6184, 6184, 6184, 6184, 6184, 6184, 6185, 6185, 6185,
+     6185, 6185, 6185, 6185, 6185, 6185, 6185, 6185, 6185, 6185,
+     6185, 6185, 6185, 6185, 6185, 6186, 6186, 6186, 6186, 6186,
+     6186, 6186, 6186, 6186, 6186, 6186, 6186, 6186, 6186, 6186,
+     6186, 6186, 6186, 6187, 6187, 6187, 6187, 6187, 6187, 6187,
+     6187, 6187, 6187, 6187, 6187, 6187, 6187, 6187, 6187, 6187,
+     6187, 6188, 6188, 6188, 6188, 6188, 6188, 6188, 6188, 6188,
+     6188, 6188, 6188, 6188, 6188, 6188, 6188, 6188, 6188, 6189,
+     6189, 6189, 6189, 6189, 6189, 6189, 6189, 6189, 6189, 6189,
+     6189, 6189, 6189, 6189, 6189, 6189, 6189, 6190, 6190, 6190,
+
+     6190, 6190, 6190, 6190, 6190, 6190, 6190, 6190, 6190, 6190,
+     6190, 6190, 6190, 6190, 6190, 6191, 6191, 6191, 6191, 6191,
+     6191, 6191, 6191, 6191, 6191, 6191, 6191, 6191, 6191, 6191,
+     6191, 6191, 6191, 6192, 6192, 6192, 6192, 6192, 6192, 6192,
+     6192, 6192, 6192, 6192, 6192, 6192, 6192, 6192, 6192, 6192,
+     6192, 6193, 6193, 6193, 6193, 6193, 6193, 6193, 6193, 6193,
+     6193, 6193, 6193, 6193, 6193, 6193, 6193, 6193, 6193, 6194,
+     6194, 6194, 6194, 6194, 6194, 6194, 6194, 6194, 6194, 6194,
+     6194, 6194, 6194, 6194, 6194, 6194, 6194, 6195, 6195, 6195,
+     6195, 6195, 6195, 6195, 6195, 6195, 6195, 6195, 6195, 6195,
+
+     6195, 6195, 6195, 6195, 6195, 6196, 6196, 6196, 6196, 6196,
+     6196, 6196, 6196, 6196, 6196, 6196, 6196, 6196, 6196, 6196,
+     6196, 6196, 6196, 6197, 6197, 6197, 6197, 6197, 6197, 6197,
+     6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197, 6197,
+     6197, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198,
+     6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6198, 6199,
+     6199, 6199, 6199, 6199, 6199, 6199, 6199, 6199, 6199, 6199,
+     6199, 6199, 6199, 6199, 6199, 6199, 6199, 6200, 6200, 6200,
+     6200, 6200, 6200, 6200, 6200, 6200, 6200, 6200, 6200, 6200,
+     6200, 6200, 6200, 6200, 6200, 6201, 6201, 6201, 6201, 6201,
+
+     6201, 6201, 6201, 6201, 6201, 6201, 6201, 6201, 6201, 6201,
+     6201, 6201, 6201, 6202, 6202, 6202, 6202, 6202, 6202, 6202,
+     6202, 6202, 6202, 6202, 6202, 6202, 6202, 6202, 6202, 6202,
+     6202, 6203, 6203, 6203, 6203, 6203, 6203, 6203, 6203, 6203,
+     6203, 6203, 6203, 6203, 6203, 6203, 6203, 6203, 6203, 6204,
+     6204, 6204, 6204, 6204, 6204, 6204, 6204, 6204, 6204, 6204,
+     6204, 6204, 6204, 6204, 6204, 6204, 6204, 6205, 6205, 6205,
+     6205, 6205, 6205, 6205, 6205, 6205, 6205, 6205, 6205, 6205,
+     6205, 6205, 6205, 6205, 6205, 6206, 6206, 6206, 6206, 6206,
+     6206, 6206, 6206, 6206, 6206, 6206, 6206, 6206, 6206, 6206,
+
+     6206, 6206, 6206, 6207, 6207, 6207, 6207, 6207, 6207, 6207,
+     6207, 6207, 6207, 6207, 6207, 6207, 6207, 6207, 6207, 6207,
+     6207, 6208, 6208, 6208, 6208, 6208, 6208, 6208, 6208, 6208,
+     6208, 6208, 6208, 6208, 6208, 6208, 6208, 6208, 6208, 6209,
+     6209, 6209, 6209, 6209, 6209, 6209, 6209, 6209, 6209, 6209,
+     6209, 6209, 6209, 6209, 6209, 6209, 6209, 6210, 6210, 6210,
+     6210, 6210, 6210, 6210, 6210, 6210, 6210, 6210, 6210, 6210,
+     6210, 6210, 6210, 6210, 6210, 6211, 6211, 6211, 6211, 6211,
+     6211, 6211, 6211, 6211, 6211, 6211, 6211, 6211, 6211, 6211,
+     6211, 6211, 6211, 6212, 6212, 6212, 6212, 6212, 6212, 6212,
+
+     6212, 6212, 6212, 6212, 6212, 6212, 6212, 6212, 6212, 6212,
+     6212, 6213, 6213, 6213, 6213, 6213, 6213, 6213, 6213, 6213,
+     6213, 6213, 6213, 6213, 6213, 6213, 6213, 6213, 6213, 6214,
+     6214, 6214, 6214, 6214, 6214, 6214, 6214, 6214, 6214, 6214,
+     6214, 6214, 6214, 6214, 6214, 6214, 6214, 6215, 6215, 6215,
+     6215, 6215, 6215, 6215, 6215, 6215, 6215, 6215, 6215, 6215,
+     6215, 6215, 6215, 6215, 6215, 6216, 6216, 6216, 6216, 6216,
+     6216, 6216, 6216, 6216, 6216, 6216, 6216, 6216, 6216, 6216,
+     6216, 6216, 6216, 6217, 6217, 6217, 6217, 6217, 6217, 6217,
+     6217, 6217, 6217, 6217, 6217, 6217, 6217, 6217, 6217, 6217,
+
+     6217, 6218, 6218, 6218, 6218, 6218, 6218, 6218, 6218, 6218,
+     6218, 6218, 6218, 6218, 6218, 6218, 6218, 6218, 6218, 6219,
+     6219, 6219, 6219, 6219, 6219, 6219, 6219, 6219, 6219, 6219,
+     6219, 6219, 6219, 6219, 6219, 6219, 6219, 6220, 6220, 6220,
+     6220, 6220, 6220, 6220, 6220, 6220, 6220, 6220, 6220, 6220,
+     6220, 6220, 6220, 6220, 6220, 6221, 6221, 6221, 6221, 6221,
+     6221, 6221, 6221, 6221, 6221, 6221, 6221, 6221, 6221, 6221,
+     6221, 6221, 6221, 6222, 6222, 6222, 6222, 6222, 6222, 6222,
+     6222, 6222, 6222, 6222, 6222, 6222, 6222, 6222, 6222, 6222,
+     6222, 6223, 6223, 6223, 6223, 6223, 6223, 6223, 6223, 6223,
+
+     6223, 6223, 6223, 6223, 6223, 6223, 6223, 6223, 6223, 6224,
+     6224, 6224, 6224, 6224, 6224, 6224, 6224, 6224, 6224, 6224,
+     6224, 6224, 6224, 6224, 6224, 6224, 6224, 6225, 6225, 6225,
+     6225, 6225, 6225, 6225, 6225, 6225, 6225, 6225, 6225, 6225,
+     6225, 6225, 6225, 6225, 6225, 6226, 6226, 6226, 6226, 6226,
+     6226, 6226, 6226, 6226, 6226, 6226, 6226, 6226, 6226, 6226,
+     6226, 6226, 6226, 6227, 6227, 6227, 6227, 6227, 6227, 6227,
+     6227, 6227, 6227, 6227, 6227, 6227, 6227, 6227, 6227, 6227,
+     6227, 6228, 6228, 6228, 6228, 6228, 6228, 6228, 6228, 6228,
+     6228, 6228, 6228, 6228, 6228, 6228, 6228, 6228, 6228, 6229,
+
+     6229, 6229, 6229, 6229, 6229, 6229, 6229, 6229, 6229, 6229,
+     6229, 6229, 6229, 6229, 6229, 6229, 6229, 6230, 6230, 6230,
+     6230, 6230, 6230, 6230, 6230, 6230, 6230, 6230, 6230, 6230,
+     6230, 6230, 6230, 6230, 6230, 6231, 6231, 6231, 6231, 6231,
+     6231, 6231, 6231, 6231, 6231, 6231, 6231, 6231, 6231, 6231,
+     6231, 6231, 6231, 6232, 6232, 6232, 6232, 6232, 6232, 6232,
+     6232, 6232, 6232, 6232, 6232, 6232, 6232, 6232, 6232, 6232,
+     6232, 6233, 6233, 6233, 6233, 6233, 6233, 6233, 6233, 6233,
+     6233, 6233, 6233, 6233, 6233, 6233, 6233, 6233, 6233, 6234,
+     6234, 6234, 6234, 6234, 6234, 6234, 6234, 6234, 6234, 6234,
+
+     6234, 6234, 6234, 6234, 6234, 6234, 6234, 6235, 6235, 6235,
+     6235, 6235, 6235, 6235, 6235, 6235, 6235, 6235, 6235, 6235,
+     6235, 6235, 6235, 6235, 6235, 6236, 6236, 6236, 6236, 6236,
+     6236, 6236, 6236, 6236, 6236, 6236, 6236, 6236, 6236, 6236,
+     6236, 6236, 6236, 6237, 6237, 6237, 6237, 6237, 6237, 6237,
+     6237, 6237, 6237, 6237, 6237, 6237, 6237, 6237, 6237, 6237,
+     6237, 6238, 6238, 6238, 6238, 6238, 6238, 6238, 6238, 6238,
+     6238, 6238, 6238, 6238, 6238, 6238, 6238, 6238, 6238, 6239,
+     6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239, 6239,
+     6239, 6239, 6239, 6239, 6239, 6239, 6239, 6240, 6240, 6240,
+
+     6240, 6240, 6240, 6240, 6240, 6240, 6240, 6240, 6240, 6240,
+     6240, 6240, 6240, 6240, 6240, 6241, 6241, 6241, 6241, 6241,
+     6241, 6241, 6241, 6241, 6241, 6241, 6241, 6241, 6241, 6241,
+     6241, 6241, 6241, 6242, 6242, 6242, 6242, 6242, 6242, 6242,
+     6242, 6242, 6242, 6242, 6242, 6242, 6242, 6242, 6242, 6242,
+     6242, 6243, 6243, 6243, 6243, 6243, 6243, 6243, 6243, 6243,
+     6243, 6243, 6243, 6243, 6243, 6243, 6243, 6243, 6243, 6244,
+     6244, 6244, 6244, 6244, 6244, 6244, 6244, 6244, 6244, 6244,
+     6244, 6244, 6244, 6244, 6244, 6244, 6244, 6245, 6245, 6245,
+     6245, 6245, 6245, 6245, 6245, 6245, 6245, 6245, 6245, 6245,
+
+     6245, 6245, 6245, 6245, 6245, 6246, 6246, 6246, 6246, 6246,
+     6246, 6246, 6246, 6246, 6246, 6246, 6246, 6246, 6246, 6246,
+     6246, 6246, 6246, 6247, 6247, 6247, 6247, 6247, 6247, 6247,
+     6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247, 6247,
+     6247, 6248, 6248, 6248, 6248, 6248, 6248, 6248, 6248, 6248,
+     6248, 6248, 6248, 6248, 6248, 6248, 6248, 6248, 6248, 6249,
+     6249, 6249, 6249, 6249, 6249, 6249, 6249, 6249, 6249, 6249,
+     6249, 6249, 6249, 6249, 6249, 6249, 6249, 6250, 6250, 6250,
+     6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250, 6250,
+     6250, 6250, 6250, 6250, 6250, 6251, 6251, 6251, 6251, 6251,
+
+     6251, 6251, 6251, 6251, 6251, 6251, 6251, 6251, 6251, 6251,
+     6251, 6251, 6251, 6252, 6252, 6252, 6252, 6252, 6252, 6252,
+     6252, 6252, 6252, 6252, 6252, 6252, 6252, 6252, 6252, 6252,
+     6252, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253,
+     6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6253, 6254,
+     6254, 6254, 6254, 6254, 6254, 6254, 6254, 6254, 6254, 6254,
+     6254, 6254, 6254, 6254, 6254, 6254, 6254, 6255, 6255, 6255,
+     6255, 6255, 6255, 6255, 6255, 6255, 6255, 6255, 6255, 6255,
+     6255, 6255, 6255, 6255, 6255, 6256, 6256, 6256, 6256, 6256,
+     6256, 6256, 6256, 6256, 6256, 6256, 6256, 6256, 6256, 6256,
+
+     6256, 6256, 6256, 6257, 6257, 6257, 6257, 6257, 6257, 6257,
+     6257, 6257, 6257, 6257, 6257, 6257, 6257, 6257, 6257, 6257,
+     6257, 6258, 6258, 6258, 6258, 6258, 6258, 6258, 6258, 6258,
+     6258, 6258, 6258, 6258, 6258, 6258, 6258, 6258, 6258, 6259,
+     6259, 6259, 6259, 6259, 6259, 6259, 6259, 6259, 6259, 6259,
+     6259, 6259, 6259, 6259, 6259, 6259, 6259, 6260, 6260, 6260,
+     6260, 6260, 6260, 6260, 6260, 6260, 6260, 6260, 6260, 6260,
+     6260, 6260, 6260, 6260, 6260, 6261, 6261, 6261, 6261, 6261,
+     6261, 6261, 6261, 6261, 6261, 6261, 6261, 6261, 6261, 6261,
+     6261, 6261, 6261, 6262, 6262, 6262, 6262, 6262, 6262, 6262,
+
+     6262, 6262, 6262, 6262, 6262, 6262, 6262, 6262, 6262, 6262,
+     6262, 6263, 6263, 6263, 6263, 6263, 6263, 6263, 6263, 6263,
+     6263, 6263, 6263, 6263, 6263, 6263, 6263, 6263, 6263, 6264,
+     6264, 6264, 6264, 6264, 6264, 6264, 6264, 6264, 6264, 6264,
+     6264, 6264, 6264, 6264, 6264, 6264, 6264, 6265, 6265, 6265,
+     6265, 6265, 6265, 6265, 6265, 6265, 6265, 6265, 6265, 6265,
+     6265, 6265, 6265, 6265, 6265, 6266, 6266, 6266, 6266, 6266,
+     6266, 6266, 6266, 6266, 6266, 6266, 6266, 6266, 6266, 6266,
+     6266, 6266, 6266, 6267, 6267, 6267, 6267, 6267, 6267, 6267,
+     6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267,
+
+     6267, 6268, 6268, 6268, 6268, 6268, 6268, 6268, 6268, 6268,
+     6268, 6268, 6268, 6268, 6268, 6268, 6268, 6268, 6268, 6269,
+     6269, 6269, 6269, 6269, 6269, 6269, 6269, 6269, 6269, 6269,
+     6269, 6269, 6269, 6269, 6269, 6269, 6269, 6270, 6270, 6270,
+     6270, 6270, 6270, 6270, 6270, 6270, 6270, 6270, 6270, 6270,
+     6270, 6270, 6270, 6270, 6270, 6271, 6271, 6271, 6271, 6271,
+     6271, 6271, 6271, 6271, 6271, 6271, 6271, 6271, 6271, 6271,
+     6271, 6271, 6271, 6272, 6272, 6272, 6272, 6272, 6272, 6272,
+     6272, 6272, 6272, 6272, 6272, 6272, 6272, 6272, 6272, 6272,
+     6272, 6273, 6273, 6273, 6273, 6273, 6273, 6273, 6273, 6273,
+
+     6273, 6273, 6273, 6273, 6273, 6273, 6273, 6273, 6273, 6274,
+     6274, 6274, 6274, 6274, 6274, 6274, 6274, 6274, 6274, 6274,
+     6274, 6274, 6274, 6274, 6274, 6274, 6274, 6275, 6275, 6275,
+     6275, 6275, 6275, 6275, 6275, 6275, 6275, 6275, 6275, 6275,
+     6275, 6275, 6275, 6275, 6275, 6276, 6276, 6276, 6276, 6276,
+     6276, 6276, 6276, 6276, 6276, 6276, 6276, 6276, 6276, 6276,
+     6276, 6276, 6276, 6277, 6277, 6277, 6277, 6277, 6277, 6277,
+     6277, 6277, 6277, 6277, 6277, 6277, 6277, 6277, 6277, 6277,
+     6277, 6278, 6278, 6278, 6278, 6278, 6278, 6278, 6278, 6278,
+     6278, 6278, 6278, 6278, 6278, 6278, 6278, 6278, 6278, 6279,
+
+     6279, 6279, 6279, 6279, 6279, 6279, 6279, 6279, 6279, 6279,
+     6279, 6279, 6279, 6279, 6279, 6279, 6279, 6280, 6280, 6280,
+     6280, 6280, 6280, 6280, 6280, 6280, 6280, 6280, 6280, 6280,
+     6280, 6280, 6280, 6280, 6280, 6281, 6281, 6281, 6281, 6281,
+     6281, 6281, 6281, 6281, 6281, 6281, 6281, 6281, 6281, 6281,
+     6281, 6281, 6281, 6282, 6282, 6282, 6282, 6282, 6282, 6282,
+     6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282, 6282,
+     6282, 6283, 6283, 6283, 6283, 6283, 6283, 6283, 6283, 6283,
+     6283, 6283, 6283, 6283, 6283, 6283, 6283, 6283, 6283, 6284,
+     6284, 6284, 6284, 6284, 6284, 6284, 6284, 6284, 6284, 6284,
+
+     6284, 6284, 6284, 6284, 6284, 6284, 6284, 6285, 6285, 6285,
+     6285, 6285, 6285, 6285, 6285, 6285, 6285, 6285, 6285, 6285,
+     6285, 6285, 6285, 6285, 6285, 6286, 6286, 6286, 6286, 6286,
+     6286, 6286, 6286, 6286, 6286, 6286, 6286, 6286, 6286, 6286,
+     6286, 6286, 6286, 6287, 6287, 6287, 6287, 6287, 6287, 6287,
+     6287, 6287, 6287, 6287, 6287, 6287, 6287, 6287, 6287, 6287,
+     6287, 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288,
+     6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6288, 6289,
+     6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289,
+     6289, 6289, 6289, 6289, 6289, 6289, 6289, 6290, 6290, 6290,
+
+     6290, 6290, 6290, 6290, 6290, 6290, 6290, 6290, 6290, 6290,
+     6290, 6290, 6290, 6290, 6290, 6291, 6291, 6291, 6291, 6291,
+     6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291, 6291,
+     6291, 6291, 6291, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+     6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292,
+     6292, 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293,
+     6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, 6294,
+     6294, 6294, 6294, 6294, 6294, 6294, 6294, 6294, 6294, 6294,
+     6294, 6294, 6294, 6294, 6294, 6294, 6294, 6295, 6295, 6295,
+     6295, 6295, 6295, 6295, 6295, 6295, 6295, 6295, 6295, 6295,
+
+     6295, 6295, 6295, 6295, 6295, 6296, 6296, 6296, 6296, 6296,
+     6296, 6296, 6296, 6296, 6296, 6296, 6296, 6296, 6296, 6296,
+     6296, 6296, 6296, 6297, 6297, 6297, 6297, 6297, 6297, 6297,
+     6297, 6297, 6297, 6297, 6297, 6297, 6297, 6297, 6297, 6297,
+     6297, 6298, 6298, 6298, 6298, 6298, 6298, 6298, 6298, 6298,
+     6298, 6298, 6298, 6298, 6298, 6298, 6298, 6298, 6298, 6299,
+     6299, 6299, 6299, 6299, 6299, 6299, 6299, 6299, 6299, 6299,
+     6299, 6299, 6299, 6299, 6299, 6299, 6299, 6300, 6300, 6300,
+     6300, 6300, 6300, 6300, 6300, 6300, 6300, 6300, 6300, 6300,
+     6300, 6300, 6300, 6300, 6300, 6301, 6301, 6301, 6301, 6301,
+
+     6301, 6301, 6301, 6301, 6301, 6301, 6301, 6301, 6301, 6301,
+     6301, 6301, 6301, 6302, 6302, 6302, 6302, 6302, 6302, 6302,
+     6302, 6302, 6302, 6302, 6302, 6302, 6302, 6302, 6302, 6302,
+     6302, 6303, 6303, 6303, 6303, 6303, 6303, 6303, 6303, 6303,
+     6303, 6303, 6303, 6303, 6303, 6303, 6303, 6303, 6303, 6304,
+     6304, 6304, 6304, 6304, 6304, 6304, 6304, 6304, 6304, 6304,
+     6304, 6304, 6304, 6304, 6304, 6304, 6304, 6305, 6305, 6305,
+     6305, 6305, 6305, 6305, 6305, 6305, 6305, 6305, 6305, 6305,
+     6305, 6305, 6305, 6305, 6305, 6306, 6306, 6306, 6306, 6306,
+     6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306, 6306,
+
+     6306, 6306, 6306, 6307, 6307, 6307, 6307, 6307, 6307, 6307,
+     6307, 6307, 6307, 6307, 6307, 6307, 6307, 6307, 6307, 6307,
+     6307, 6308, 6308, 6308, 6308, 6308, 6308, 6308, 6308, 6308,
+     6308, 6308, 6308, 6308, 6308, 6308, 6308, 6308, 6308, 6309,
+     6309, 6309, 6309, 6309, 6309, 6309, 6309, 6309, 6309, 6309,
+     6309, 6309, 6309, 6309, 6309, 6309, 6309, 6310, 6310, 6310,
+     6310, 6310, 6310, 6310, 6310, 6310, 6310, 6310, 6310, 6310,
+     6310, 6310, 6310, 6310, 6310, 6311, 6311, 6311, 6311, 6311,
+     6311, 6311, 6311, 6311, 6311, 6311, 6311, 6311, 6311, 6311,
+     6311, 6311, 6311, 6312, 6312, 6312, 6312, 6312, 6312, 6312,
+
+     6312, 6312, 6312, 6312, 6312, 6312, 6312, 6312, 6312, 6312,
+     6312, 6313, 6313, 6313, 6313, 6313, 6313, 6313, 6313, 6313,
+     6313, 6313, 6313, 6313, 6313, 6313, 6313, 6313, 6313, 6314,
+     6314, 6314, 6314, 6314, 6314, 6314, 6314, 6314, 6314, 6314,
+     6314, 6314, 6314, 6314, 6314, 6314, 6314, 6315, 6315, 6315,
+     6315, 6315, 6315, 6315, 6315, 6315, 6315, 6315, 6315, 6315,
+     6315, 6315, 6315, 6315, 6315, 6316, 6316, 6316, 6316, 6316,
+     6316, 6316, 6316, 6316, 6316, 6316, 6316, 6316, 6316, 6316,
+     6316, 6316, 6316, 6317, 6317, 6317, 6317, 6317, 6317, 6317,
+     6317, 6317, 6317, 6317, 6317, 6317, 6317, 6317, 6317, 6317,
+
+     6317, 6318, 6318, 6318, 6318, 6318, 6318, 6318, 6318, 6318,
+     6318, 6318, 6318, 6318, 6318, 6318, 6318, 6318, 6318, 6319,
+     6319, 6319, 6319, 6319, 6319, 6319, 6319, 6319, 6319, 6319,
+     6319, 6319, 6319, 6319, 6319, 6319, 6319, 6320, 6320, 6320,
+     6320, 6320, 6320, 6320, 6320, 6320, 6320, 6320, 6320, 6320,
+     6320, 6320, 6320, 6320, 6320, 6321, 6321, 6321, 6321, 6321,
+     6321, 6321, 6321, 6321, 6321, 6321, 6321, 6321, 6321, 6321,
+     6321, 6321, 6321, 6322, 6322, 6322, 6322, 6322, 6322, 6322,
+     6322, 6322, 6322, 6322, 6322, 6322, 6322, 6322, 6322, 6322,
+     6322, 6323, 6323, 6323, 6323, 6323, 6323, 6323, 6323, 6323,
+
+     6323, 6323, 6323, 6323, 6323, 6323, 6323, 6323, 6323, 6324,
+     6324, 6324, 6324, 6324, 6324, 6324, 6324, 6324, 6324, 6324,
+     6324, 6324, 6324, 6324, 6324, 6324, 6324, 6325, 6325, 6325,
+     6325, 6325, 6325, 6325, 6325, 6325, 6325, 6325, 6325, 6325,
+     6325, 6325, 6325, 6325, 6325, 6326, 6326, 6326, 6326, 6326,
+     6326, 6326, 6326, 6326, 6326, 6326, 6326, 6326, 6326, 6326,
+     6326, 6326, 6326, 6327, 6327, 6327, 6327, 6327, 6327, 6327,
+     6327, 6327, 6327, 6327, 6327, 6327, 6327, 6327, 6327, 6327,
+     6327, 6328, 6328, 6328, 6328, 6328, 6328, 6328, 6328, 6328,
+     6328, 6328, 6328, 6328, 6328, 6328, 6328, 6328, 6328, 6329,
+
+     6329, 6329, 6329, 6329, 6329, 6329, 6329, 6329, 6329, 6329,
+     6329, 6329, 6329, 6329, 6329, 6329, 6329, 6330, 6330, 6330,
+     6330, 6330, 6330, 6330, 6330, 6330, 6330, 6330, 6330, 6330,
+     6330, 6330, 6330, 6330, 6330, 6331, 6331, 6331, 6331, 6331,
+     6331, 6331, 6331, 6331, 6331, 6331, 6331, 6331, 6331, 6331,
+     6331, 6331, 6331, 6332, 6332, 6332, 6332, 6332, 6332, 6332,
+     6332, 6332, 6332, 6332, 6332, 6332, 6332, 6332, 6332, 6332,
+     6332, 6333, 6333, 6333, 6333, 6333, 6333, 6333, 6333, 6333,
+     6333, 6333, 6333, 6333, 6333, 6333, 6333, 6333, 6333, 6334,
+     6334, 6334, 6334, 6334, 6334, 6334, 6334, 6334, 6334, 6334,
+
+     6334, 6334, 6334, 6334, 6334, 6334, 6334, 6335, 6335, 6335,
+     6335, 6335, 6335, 6335, 6335, 6335, 6335, 6335, 6335, 6335,
+     6335, 6335, 6335, 6335, 6335, 6336, 6336, 6336, 6336, 6336,
+     6336, 6336, 6336, 6336, 6336, 6336, 6336, 6336, 6336, 6336,
+     6336, 6336, 6336, 6337, 6337, 6337, 6337, 6337, 6337, 6337,
+     6337, 6337, 6337, 6337, 6337, 6337, 6337, 6337, 6337, 6337,
+     6337, 6338, 6338, 6338, 6338, 6338, 6338, 6338, 6338, 6338,
+     6338, 6338, 6338, 6338, 6338, 6338, 6338, 6338, 6338, 6339,
+     6339, 6339, 6339, 6339, 6339, 6339, 6339, 6339, 6339, 6339,
+     6339, 6339, 6339, 6339, 6339, 6339, 6339, 6340, 6340, 6340,
+
+     6340, 6340, 6340, 6340, 6340, 6340, 6340, 6340, 6340, 6340,
+     6340, 6340, 6340, 6340, 6340, 6341, 6341, 6341, 6341, 6341,
+     6341, 6341, 6341, 6341, 6341, 6341, 6341, 6341, 6341, 6341,
+     6341, 6341, 6341, 6342, 6342, 6342, 6342, 6342, 6342, 6342,
+     6342, 6342, 6342, 6342, 6342, 6342, 6342, 6342, 6342, 6342,
+     6342, 6343, 6343, 6343, 6343, 6343, 6343, 6343, 6343, 6343,
+     6343, 6343, 6343, 6343, 6343, 6343, 6343, 6343, 6343, 6344,
+     6344, 6344, 6344, 6344, 6344, 6344, 6344, 6344, 6344, 6344,
+     6344, 6344, 6344, 6344, 6344, 6344, 6344, 6345, 6345, 6345,
+     6345, 6345, 6345, 6345, 6345, 6345, 6345, 6345, 6345, 6345,
+
+     6345, 6345, 6345, 6345, 6345, 6346, 6346, 6346, 6346, 6346,
+     6346, 6346, 6346, 6346, 6346, 6346, 6346, 6346, 6346, 6346,
+     6346, 6346, 6346, 6347, 6347, 6347, 6347, 6347, 6347, 6347,
+     6347, 6347, 6347, 6347, 6347, 6347, 6347, 6347, 6347, 6347,
+     6347, 6348, 6348, 6348, 6348, 6348, 6348, 6348, 6348, 6348,
+     6348, 6348, 6348, 6348, 6348, 6348, 6348, 6348, 6348, 6349,
+     6349, 6349, 6349, 6349, 6349, 6349, 6349, 6349, 6349, 6349,
+     6349, 6349, 6349, 6349, 6349, 6349, 6349, 6350, 6350, 6350,
+     6350, 6350, 6350, 6350, 6350, 6350, 6350, 6350, 6350, 6350,
+     6350, 6350, 6350, 6350, 6350, 6351, 6351, 6351, 6351, 6351,
+
+     6351, 6351, 6351, 6351, 6351, 6351, 6351, 6351, 6351, 6351,
+     6351, 6351, 6351, 6352, 6352, 6352, 6352, 6352, 6352, 6352,
+     6352, 6352, 6352, 6352, 6352, 6352, 6352, 6352, 6352, 6352,
+     6352, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353,
+     6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6353, 6354,
+     6354, 6354, 6354, 6354, 6354, 6354, 6354, 6354, 6354, 6354,
+     6354, 6354, 6354, 6354, 6354, 6354, 6354, 6355, 6355, 6355,
+     6355, 6355, 6355, 6355, 6355, 6355, 6355, 6355, 6355, 6355,
+     6355, 6355, 6355, 6355, 6355, 6356, 6356, 6356, 6356, 6356,
+     6356, 6356, 6356, 6356, 6356, 6356, 6356, 6356, 6356, 6356,
+
+     6356, 6356, 6356, 6357, 6357, 6357, 6357, 6357, 6357, 6357,
+     6357, 6357, 6357, 6357, 6357, 6357, 6357, 6357, 6357, 6357,
+     6357, 6358, 6358, 6358, 6358, 6358, 6358, 6358, 6358, 6358,
+     6358, 6358, 6358, 6358, 6358, 6358, 6358, 6358, 6358, 6359,
+     6359, 6359, 6359, 6359, 6359, 6359, 6359, 6359, 6359, 6359,
+     6359, 6359, 6359, 6359, 6359, 6359, 6359, 6360, 6360, 6360,
+     6360, 6360, 6360, 6360, 6360, 6360, 6360, 6360, 6360, 6360,
+     6360, 6360, 6360, 6360, 6360, 6361, 6361, 6361, 6361, 6361,
+     6361, 6361, 6361, 6361, 6361, 6361, 6361, 6361, 6361, 6361,
+     6361, 6361, 6361, 6362, 6362, 6362, 6362, 6362, 6362, 6362,
+
+     6362, 6362, 6362, 6362, 6362, 6362, 6362, 6362, 6362, 6362,
+     6362, 6363, 6363, 6363, 6363, 6363, 6363, 6363, 6363, 6363,
+     6363, 6363, 6363, 6363, 6363, 6363, 6363, 6363, 6363, 6364,
+     6364, 6364, 6364, 6364, 6364, 6364, 6364, 6364, 6364, 6364,
+     6364, 6364, 6364, 6364, 6364, 6364, 6364, 6365, 6365, 6365,
+     6365, 6365, 6365, 6365, 6365, 6365, 6365, 6365, 6365, 6365,
+     6365, 6365, 6365, 6365, 6365, 6366, 6366, 6366, 6366, 6366,
+     6366, 6366, 6366, 6366, 6366, 6366, 6366, 6366, 6366, 6366,
+     6366, 6366, 6366, 6367, 6367, 6367, 6367, 6367, 6367, 6367,
+     6367, 6367, 6367, 6367, 6367, 6367, 6367, 6367, 6367, 6367,
+
+     6367, 6368, 6368, 6368, 6368, 6368, 6368, 6368, 6368, 6368,
+     6368, 6368, 6368, 6368, 6368, 6368, 6368, 6368, 6368, 6369,
+     6369, 6369, 6369, 6369, 6369, 6369, 6369, 6369, 6369, 6369,
+     6369, 6369, 6369, 6369, 6369, 6369, 6369, 6370, 6370, 6370,
+     6370, 6370, 6370, 6370, 6370, 6370, 6370, 6370, 6370, 6370,
+     6370, 6370, 6370, 6370, 6370, 6371, 6371, 6371, 6371, 6371,
+     6371, 6371, 6371, 6371, 6371, 6371, 6371, 6371, 6371, 6371,
+     6371, 6371, 6371, 6372, 6372, 6372, 6372, 6372, 6372, 6372,
+     6372, 6372, 6372, 6372, 6372, 6372, 6372, 6372, 6372, 6372,
+     6372, 6373, 6373, 6373, 6373, 6373, 6373, 6373, 6373, 6373,
+
+     6373, 6373, 6373, 6373, 6373, 6373, 6373, 6373, 6373, 6374,
+     6374, 6374, 6374, 6374, 6374, 6374, 6374, 6374, 6374, 6374,
+     6374, 6374, 6374, 6374, 6374, 6374, 6374, 6375, 6375, 6375,
+     6375, 6375, 6375, 6375, 6375, 6375, 6375, 6375, 6375, 6375,
+     6375, 6375, 6375, 6375, 6375, 6376, 6376, 6376, 6376, 6376,
+     6376, 6376, 6376, 6376, 6376, 6376, 6376, 6376, 6376, 6376,
+     6376, 6376, 6376, 6377, 6377, 6377, 6377, 6377, 6377, 6377,
+     6377, 6377, 6377, 6377, 6377, 6377, 6377, 6377, 6377, 6377,
+     6377, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378,
+     6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6379,
+
+     6379, 6379, 6379, 6379, 6379, 6379, 6379, 6379, 6379, 6379,
+     6379, 6379, 6379, 6379, 6379, 6379, 6379, 6380, 6380, 6380,
+     6380, 6380, 6380, 6380, 6380, 6380, 6380, 6380, 6380, 6380,
+     6380, 6380, 6380, 6380, 6380, 6381, 6381, 6381, 6381, 6381,
+     6381, 6381, 6381, 6381, 6381, 6381, 6381, 6381, 6381, 6381,
+     6381, 6381, 6381, 6382, 6382, 6382, 6382, 6382, 6382, 6382,
+     6382, 6382, 6382, 6382, 6382, 6382, 6382, 6382, 6382, 6382,
+     6382, 6383, 6383, 6383, 6383, 6383, 6383, 6383, 6383, 6383,
+     6383, 6383, 6383, 6383, 6383, 6383, 6383, 6383, 6383, 6384,
+     6384, 6384, 6384, 6384, 6384, 6384, 6384, 6384, 6384, 6384,
+
+     6384, 6384, 6384, 6384, 6384, 6384, 6384, 6385, 6385, 6385,
+     6385, 6385, 6385, 6385, 6385, 6385, 6385, 6385, 6385, 6385,
+     6385, 6385, 6385, 6385, 6385, 6386, 6386, 6386, 6386, 6386,
+     6386, 6386, 6386, 6386, 6386, 6386, 6386, 6386, 6386, 6386,
+     6386, 6386, 6386, 6387, 6387, 6387, 6387, 6387, 6387, 6387,
+     6387, 6387, 6387, 6387, 6387, 6387, 6387, 6387, 6387, 6387,
+     6387, 6388, 6388, 6388, 6388, 6388, 6388, 6388, 6388, 6388,
+     6388, 6388, 6388, 6388, 6388, 6388, 6388, 6388, 6388, 6389,
+     6389, 6389, 6389, 6389, 6389, 6389, 6389, 6389, 6389, 6389,
+     6389, 6389, 6389, 6389, 6389, 6389, 6389, 6390, 6390, 6390,
+
+     6390, 6390, 6390, 6390, 6390, 6390, 6390, 6390, 6390, 6390,
+     6390, 6390, 6390, 6390, 6390, 6391, 6391, 6391, 6391, 6391,
+     6391, 6391, 6391, 6391, 6391, 6391, 6391, 6391, 6391, 6391,
+     6391, 6391, 6391, 6392, 6392, 6392, 6392, 6392, 6392, 6392,
+     6392, 6392, 6392, 6392, 6392, 6392, 6392, 6392, 6392, 6392,
+     6392, 6393, 6393, 6393, 6393, 6393, 6393, 6393, 6393, 6393,
+     6393, 6393, 6393, 6393, 6393, 6393, 6393, 6393, 6393, 6394,
+     6394, 6394, 6394, 6394, 6394, 6394, 6394, 6394, 6394, 6394,
+     6394, 6394, 6394, 6394, 6394, 6394, 6394, 6395, 6395, 6395,
+     6395, 6395, 6395, 6395, 6395, 6395, 6395, 6395, 6395, 6395,
+
+     6395, 6395, 6395, 6395, 6395, 6396, 6396, 6396, 6396, 6396,
+     6396, 6396, 6396, 6396, 6396, 6396, 6396, 6396, 6396, 6396,
+     6396, 6396, 6396, 6397, 6397, 6397, 6397, 6397, 6397, 6397,
+     6397, 6397, 6397, 6397, 6397, 6397, 6397, 6397, 6397, 6397,
+     6397, 6398, 6398, 6398, 6398, 6398, 6398, 6398, 6398, 6398,
+     6398, 6398, 6398, 6398, 6398, 6398, 6398, 6398, 6398, 6399,
+     6399, 6399, 6399, 6399, 6399, 6399, 6399, 6399, 6399, 6399,
+     6399, 6399, 6399, 6399, 6399, 6399, 6399, 6400, 6400, 6400,
+     6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400, 6400,
+     6400, 6400, 6400, 6400, 6400, 6401, 6401, 6401, 6401, 6401,
+
+     6401, 6401, 6401, 6401, 6401, 6401, 6401, 6401, 6401, 6401,
+     6401, 6401, 6401, 6402, 6402, 6402, 6402, 6402, 6402, 6402,
+     6402, 6402, 6402, 6402, 6402, 6402, 6402, 6402, 6402, 6402,
+     6402, 6403, 6403, 6403, 6403, 6403, 6403, 6403, 6403, 6403,
+     6403, 6403, 6403, 6403, 6403, 6403, 6403, 6403, 6403, 6404,
+     6404, 6404, 6404, 6404, 6404, 6404, 6404, 6404, 6404, 6404,
+     6404, 6404, 6404, 6404, 6404, 6404, 6404, 6405, 6405, 6405,
+     6405, 6405, 6405, 6405, 6405, 6405, 6405, 6405, 6405, 6405,
+     6405, 6405, 6405, 6405, 6405, 6406, 6406, 6406, 6406, 6406,
+     6406, 6406, 6406, 6406, 6406, 6406, 6406, 6406, 6406, 6406,
+
+     6406, 6406, 6406, 6407, 6407, 6407, 6407, 6407, 6407, 6407,
+     6407, 6407, 6407, 6407, 6407, 6407, 6407, 6407, 6407, 6407,
+     6407, 6408, 6408, 6408, 6408, 6408, 6408, 6408, 6408, 6408,
+     6408, 6408, 6408, 6408, 6408, 6408, 6408, 6408, 6408, 6409,
+     6409, 6409, 6409, 6409, 6409, 6409, 6409, 6409, 6409, 6409,
+     6409, 6409, 6409, 6409, 6409, 6409, 6409, 6410, 6410, 6410,
+     6410, 6410, 6410, 6410, 6410, 6410, 6410, 6410, 6410, 6410,
+     6410, 6410, 6410, 6410, 6410, 6411, 6411, 6411, 6411, 6411,
+     6411, 6411, 6411, 6411, 6411, 6411, 6411, 6411, 6411, 6411,
+     6411, 6411, 6411, 6412, 6412, 6412, 6412, 6412, 6412, 6412,
+
+     6412, 6412, 6412, 6412, 6412, 6412, 6412, 6412, 6412, 6412,
+     6412, 6413, 6413, 6413, 6413, 6413, 6413, 6413, 6413, 6413,
+     6413, 6413, 6413, 6413, 6413, 6413, 6413, 6413, 6413, 6414,
+     6414, 6414, 6414, 6414, 6414, 6414, 6414, 6414, 6414, 6414,
+     6414, 6414, 6414, 6414, 6414, 6414, 6414, 6415, 6415, 6415,
+     6415, 6415, 6415, 6415, 6415, 6415, 6415, 6415, 6415, 6415,
+     6415, 6415, 6415, 6415, 6415, 6416, 6416, 6416, 6416, 6416,
+     6416, 6416, 6416, 6416, 6416, 6416, 6416, 6416, 6416, 6416,
+     6416, 6416, 6416, 6417, 6417, 6417, 6417, 6417, 6417, 6417,
+     6417, 6417, 6417, 6417, 6417, 6417, 6417, 6417, 6417, 6417,
+
+     6417, 6418, 6418, 6418, 6418, 6418, 6418, 6418, 6418, 6418,
+     6418, 6418, 6418, 6418, 6418, 6418, 6418, 6418, 6418, 6419,
+     6419, 6419, 6419, 6419, 6419, 6419, 6419, 6419, 6419, 6419,
+     6419, 6419, 6419, 6419, 6419, 6419, 6419, 6420, 6420, 6420,
+     6420, 6420, 6420, 6420, 6420, 6420, 6420, 6420, 6420, 6420,
+     6420, 6420, 6420, 6420, 6420, 6421, 6421, 6421, 6421, 6421,
+     6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421, 6421,
+     6421, 6421, 6421, 6422, 6422, 6422, 6422, 6422, 6422, 6422,
+     6422, 6422, 6422, 6422, 6422, 6422, 6422, 6422, 6422, 6422,
+     6422, 6423, 6423, 6423, 6423, 6423, 6423, 6423, 6423, 6423,
+
+     6423, 6423, 6423, 6423, 6423, 6423, 6423, 6423, 6423, 6424,
+     6424, 6424, 6424, 6424, 6424, 6424, 6424, 6424, 6424, 6424,
+     6424, 6424, 6424, 6424, 6424, 6424, 6424, 6425, 6425, 6425,
+     6425, 6425, 6425, 6425, 6425, 6425, 6425, 6425, 6425, 6425,
+     6425, 6425, 6425, 6425, 6425, 6426, 6426, 6426, 6426, 6426,
+     6426, 6426, 6426, 6426, 6426, 6426, 6426, 6426, 6426, 6426,
+     6426, 6426, 6426, 6427, 6427, 6427, 6427, 6427, 6427, 6427,
+     6427, 6427, 6427, 6427, 6427, 6427, 6427, 6427, 6427, 6427,
+     6427, 6428, 6428, 6428, 6428, 6428, 6428, 6428, 6428, 6428,
+     6428, 6428, 6428, 6428, 6428, 6428, 6428, 6428, 6428, 6429,
+
+     6429, 6429, 6429, 6429, 6429, 6429, 6429, 6429, 6429, 6429,
+     6429, 6429, 6429, 6429, 6429, 6429, 6429, 6430, 6430, 6430,
+     6430, 6430, 6430, 6430, 6430, 6430, 6430, 6430, 6430, 6430,
+     6430, 6430, 6430, 6430, 6430, 6431, 6431, 6431, 6431, 6431,
+     6431, 6431, 6431, 6431, 6431, 6431, 6431, 6431, 6431, 6431,
+     6431, 6431, 6431, 6432, 6432, 6432, 6432, 6432, 6432, 6432,
+     6432, 6432, 6432, 6432, 6432, 6432, 6432, 6432, 6432, 6432,
+     6432, 6433, 6433, 6433, 6433, 6433, 6433, 6433, 6433, 6433,
+     6433, 6433, 6433, 6433, 6433, 6433, 6433, 6433, 6433, 6434,
+     6434, 6434, 6434, 6434, 6434, 6434, 6434, 6434, 6434, 6434,
+
+     6434, 6434, 6434, 6434, 6434, 6434, 6434, 6435, 6435, 6435,
+     6435, 6435, 6435, 6435, 6435, 6435, 6435, 6435, 6435, 6435,
+     6435, 6435, 6435, 6435, 6435, 6436, 6436, 6436, 6436, 6436,
+     6436, 6436, 6436, 6436, 6436, 6436, 6436, 6436, 6436, 6436,
+     6436, 6436, 6436, 6437, 6437, 6437, 6437, 6437, 6437, 6437,
+     6437, 6437, 6437, 6437, 6437, 6437, 6437, 6437, 6437, 6437,
+     6437, 6438, 6438, 6438, 6438, 6438, 6438, 6438, 6438, 6438,
+     6438, 6438, 6438, 6438, 6438, 6438, 6438, 6438, 6438, 6439,
+     6439, 6439, 6439, 6439, 6439, 6439, 6439, 6439, 6439, 6439,
+     6439, 6439, 6439, 6439, 6439, 6439, 6439, 6440, 6440, 6440,
+
+     6440, 6440, 6440, 6440, 6440, 6440, 6440, 6440, 6440, 6440,
+     6440, 6440, 6440, 6440, 6440, 6441, 6441, 6441, 6441, 6441,
+     6441, 6441, 6441, 6441, 6441, 6441, 6441, 6441, 6441, 6441,
+     6441, 6441, 6441, 6442, 6442, 6442, 6442, 6442, 6442, 6442,
+     6442, 6442, 6442, 6442, 6442, 6442, 6442, 6442, 6442, 6442,
+     6442, 6443, 6443, 6443, 6443, 6443, 6443, 6443, 6443, 6443,
+     6443, 6443, 6443, 6443, 6443, 6443, 6443, 6443, 6443, 6444,
+     6444, 6444, 6444, 6444, 6444, 6444, 6444, 6444, 6444, 6444,
+     6444, 6444, 6444, 6444, 6444, 6444, 6444, 6445, 6445, 6445,
+     6445, 6445, 6445, 6445, 6445, 6445, 6445, 6445, 6445, 6445,
+
+     6445, 6445, 6445, 6445, 6445, 6446, 6446, 6446, 6446, 6446,
+     6446, 6446, 6446, 6446, 6446, 6446, 6446, 6446, 6446, 6446,
+     6446, 6446, 6446, 6447, 6447, 6447, 6447, 6447, 6447, 6447,
+     6447, 6447, 6447, 6447, 6447, 6447, 6447, 6447, 6447, 6447,
+     6447, 6448, 6448, 6448, 6448, 6448, 6448, 6448, 6448, 6448,
+     6448, 6448, 6448, 6448, 6448, 6448, 6448, 6448, 6448, 6449,
+     6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449, 6449,
+     6449, 6449, 6449, 6449, 6449, 6449, 6449, 6450, 6450, 6450,
+     6450, 6450, 6450, 6450, 6450, 6450, 6450, 6450, 6450, 6450,
+     6450, 6450, 6450, 6450, 6450, 6451, 6451, 6451, 6451, 6451,
+
+     6451, 6451, 6451, 6451, 6451, 6451, 6451, 6451, 6451, 6451,
+     6451, 6451, 6451, 6452, 6452, 6452, 6452, 6452, 6452, 6452,
+     6452, 6452, 6452, 6452, 6452, 6452, 6452, 6452, 6452, 6452,
+     6452, 6453, 6453, 6453, 6453, 6453, 6453, 6453, 6453, 6453,
+     6453, 6453, 6453, 6453, 6453, 6453, 6453, 6453, 6453, 6454,
+     6454, 6454, 6454, 6454, 6454, 6454, 6454, 6454, 6454, 6454,
+     6454, 6454, 6454, 6454, 6454, 6454, 6454, 6455, 6455, 6455,
+     6455, 6455, 6455, 6455, 6455, 6455, 6455, 6455, 6455, 6455,
+     6455, 6455, 6455, 6455, 6455, 6456, 6456, 6456, 6456, 6456,
+     6456, 6456, 6456, 6456, 6456, 6456, 6456, 6456, 6456, 6456,
+
+     6456, 6456, 6456, 6457, 6457, 6457, 6457, 6457, 6457, 6457,
+     6457, 6457, 6457, 6457, 6457, 6457, 6457, 6457, 6457, 6457,
+     6457, 6458, 6458, 6458, 6458, 6458, 6458, 6458, 6458, 6458,
+     6458, 6458, 6458, 6458, 6458, 6458, 6458, 6458, 6458, 6459,
+     6459, 6459, 6459, 6459, 6459, 6459, 6459, 6459, 6459, 6459,
+     6459, 6459, 6459, 6459, 6459, 6459, 6459, 6460, 6460, 6460,
+     6460, 6460, 6460, 6460, 6460, 6460, 6460, 6460, 6460, 6460,
+     6460, 6460, 6460, 6460, 6460, 6461, 6461, 6461, 6461, 6461,
+     6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461,
+     6461, 6461, 6461, 6462, 6462, 6462, 6462, 6462, 6462, 6462,
+
+     6462, 6462, 6462, 6462, 6462, 6462, 6462, 6462, 6462, 6462,
+     6462, 6463, 6463, 6463, 6463, 6463, 6463, 6463, 6463, 6463,
+     6463, 6463, 6463, 6463, 6463, 6463, 6463, 6463, 6463, 6464,
+     6464, 6464, 6464, 6464, 6464, 6464, 6464, 6464, 6464, 6464,
+     6464, 6464, 6464, 6464, 6464, 6464, 6464, 6465, 6465, 6465,
+     6465, 6465, 6465, 6465, 6465, 6465, 6465, 6465, 6465, 6465,
+     6465, 6465, 6465, 6465, 6465, 6466, 6466, 6466, 6466, 6466,
+     6466, 6466, 6466, 6466, 6466, 6466, 6466, 6466, 6466, 6466,
+     6466, 6466, 6466, 6467, 6467, 6467, 6467, 6467, 6467, 6467,
+     6467, 6467, 6467, 6467, 6467, 6467, 6467, 6467, 6467, 6467,
+
+     6467, 6468, 6468, 6468, 6468, 6468, 6468, 6468, 6468, 6468,
+     6468, 6468, 6468, 6468, 6468, 6468, 6468, 6468, 6468, 6469,
+     6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469, 6469,
+     6469, 6469, 6469, 6469, 6469, 6469, 6469, 6470, 6470, 6470,
+     6470, 6470, 6470, 6470, 6470, 6470, 6470, 6470, 6470, 6470,
+     6470, 6470, 6470, 6470, 6470, 6471, 6471, 6471, 6471, 6471,
+     6471, 6471, 6471, 6471, 6471, 6471, 6471, 6471, 6471, 6471,
+     6471, 6471, 6471, 6472, 6472, 6472, 6472, 6472, 6472, 6472,
+     6472, 6472, 6472, 6472, 6472, 6472, 6472, 6472, 6472, 6472,
+     6472, 6473, 6473, 6473, 6473, 6473, 6473, 6473, 6473, 6473,
+
+     6473, 6473, 6473, 6473, 6473, 6473, 6473, 6473, 6473, 6474,
+     6474, 6474, 6474, 6474, 6474, 6474, 6474, 6474, 6474, 6474,
+     6474, 6474, 6474, 6474, 6474, 6474, 6474, 6475, 6475, 6475,
+     6475, 6475, 6475, 6475, 6475, 6475, 6475, 6475, 6475, 6475,
+     6475, 6475, 6475, 6475, 6475, 6476, 6476, 6476, 6476, 6476,
+     6476, 6476, 6476, 6476, 6476, 6476, 6476, 6476, 6476, 6476,
+     6476, 6476, 6476, 6477, 6477, 6477, 6477, 6477, 6477, 6477,
+     6477, 6477, 6477, 6477, 6477, 6477, 6477, 6477, 6477, 6477,
+     6477, 6478, 6478, 6478, 6478, 6478, 6478, 6478, 6478, 6478,
+     6478, 6478, 6478, 6478, 6478, 6478, 6478, 6478, 6478, 6479,
+
+     6479, 6479, 6479, 6479, 6479, 6479, 6479, 6479, 6479, 6479,
+     6479, 6479, 6479, 6479, 6479, 6479, 6479, 6480, 6480, 6480,
+     6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480, 6480,
+     6480, 6480, 6480, 6480, 6480, 6481, 6481, 6481, 6481, 6481,
+     6481, 6481, 6481, 6481, 6481, 6481, 6481, 6481, 6481, 6481,
+     6481, 6481, 6481, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+     5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143, 5143,
+
+     5143, 5143, 5143, 5143
+    } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+static int yy_more_flag = 0;
+static int yy_more_len = 0;
+#define yymore() ((yy_more_flag) = 1)
+#define YY_MORE_ADJ (yy_more_len)
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "fscanner.l"
+#line 2 "fscanner.l"
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     C symbol scanner
+ */
+#include "global.h"
+#include "alloc.h"
+#include "scanner.h"
+#include "lookup.h"
+
+#include <assert.h>
+
+/* the line counting has been moved from character reading for speed */
+/* comments are discarded */
+
+#ifndef FLEX_SCANNER
+# error Sorry, this scanner needs flex. It is not usable with AT&T Lex.
+#endif
+
+#define        IFLEVELINC      5       /* #if nesting level size increment */
+#define YY_NO_TOP_STATE 1
+
+static char const rcsid[] = "$Id: fscanner.l,v 1.17 2012/08/02 21:48:08 broeker Exp $";
+
+int    first;  /* buffer index for first char of symbol */
+int    last;   /* buffer index for last char of symbol */
+int    lineno; /* symbol line number */
+int    myylineno = 1;
+
+/* HBB 20001007: new variables, emulating yytext in a way that allows 
+ * the yymore() simulation, my_yymore(), to be used even in the presence of 
+ * yyless(). */
+size_t my_yyleng = 0;
+char *my_yytext = NULL;
+
+static BOOL    arraydimension;         /* inside array dimension declaration */
+static BOOL    bplisting;              /* breakpoint listing */
+static int     braces;                 /* unmatched left brace count */
+static BOOL    classdef;               /* c++ class definition */
+static BOOL    elseelif;               /* #else or #elif found */
+static BOOL    esudef;                 /* enum/struct/union global definition */
+static BOOL    external;               /* external definition */
+static int     externalbraces;         /* external definition outer brace count */
+static BOOL    fcndef;                 /* function definition */
+static BOOL    global;                 /* file global scope (outside functions) */
+static int     iflevel;                /* #if nesting level */
+static BOOL    initializer;            /* data initializer */
+static int     initializerbraces;      /* data initializer outer brace count */
+static BOOL    lex;                    /* lex file */
+static int     miflevel = IFLEVELINC;  /* maximum #if nesting level */
+static int     *maxifbraces;           /* maximum brace count within #if */
+static int     *preifbraces;           /* brace count before #if */
+static int     parens;                 /* unmatched left parenthesis count */
+static BOOL    ppdefine;               /* preprocessor define statement */
+static BOOL    pseudoelif;             /* pseudo-#elif */
+static BOOL    oldtype;                /* next identifier is an old type */
+static BOOL    rules;                  /* lex/yacc rules */
+static BOOL    sdl;                    /* sdl file */
+static BOOL    structfield;            /* structure field declaration */
+static int     tagdef;                 /* class/enum/struct/union tag definition */
+static BOOL    template;               /* function template */
+static int     templateparens;         /* function template outer parentheses count */
+static int     typedefbraces = -1;     /* initial typedef brace count */
+static int     token;                  /* token found */
+static int     ident_start;            /* begin of preceding identifier */
+
+/* If this is defined to 1, use flex rules rather than the input
+ * function to discard comments. The scanner gains quite a bit of
+ * speed this way, because of a large reduction of the number of I/O
+ * system/library calls.  The original skipcomment_input() called
+ * getc() so often that the call overhead of shared libraries
+ * vs. static linking, alone, already caused a sizeable performance
+ * hit (up to 40% gross gain on a cscope -cub of its own source
+ * dir). */
+#define COMMENTS_BY_FLEX 1
+
+#if !COMMENTS_BY_FLEX
+static int     skipcomment_input(void);
+static int     comment(void);
+static int     insidestring_input(int);
+#endif
+
+static void    my_yymore(void);
+
+#if COMMENTS_BY_FLEX
+# define skipcomment_input input
+#else
+
+# define YY_INPUT(buf,result,max_size)                         \
+{                                                              \
+       int c = skipcomment_input ();                           \
+       result = (c == EOF) ? YY_NULL : (buf[0] = c, 1);        \
+}
+
+#endif /* !COMMENTS_BY_FLEX*/
+
+
+/* flex options: stack of start conditions, and don't use yywrap() */
+
+/* exclusive start conditions. not available in AT&T lex -> use flex! */
+
+#line 29751 "fscanner.c"
+
+#define INITIAL 0
+#define SDL 1
+#define IN_PREPROC 2
+#define WAS_ENDIF 3
+#define WAS_IDENTIFIER 4
+#define WAS_ESU 5
+#define IN_DQUOTE 6
+#define IN_SQUOTE 7
+#define COMMENT 8
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yyget_in (void );
+
+void yyset_in  (FILE * in_str  );
+
+FILE *yyget_out (void );
+
+void yyset_out  (FILE * out_str  );
+
+int yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+        static int yy_start_stack_ptr = 0;
+        static int yy_start_stack_depth = 0;
+        static int *yy_start_stack = NULL;
+    
+    static void yy_push_state (int new_state );
+    
+    static void yy_pop_state (void );
+    
+    static int yy_top_state (void );
+    
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+               { \
+               int c = '*'; \
+               int n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( yyin ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else \
+               { \
+               errno=0; \
+               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+                       { \
+                       if( errno != EINTR) \
+                               { \
+                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
+                               break; \
+                               } \
+                       errno=0; \
+                       clearerr(yyin); \
+                       } \
+               }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+       if ( yyleng > 0 ) \
+               YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+                               (yytext[yyleng - 1] == '\n'); \
+       YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
+    
+#line 148 "fscanner.l"
+
+
+#line 29957 "fscanner.c"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! yyin )
+                       yyin = stdin;
+
+               if ( ! yyout )
+                       yyout = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       yyensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               yy_create_buffer(yyin,YY_BUF_SIZE );
+               }
+
+               yy_load_buffer_state( );
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+               (yy_more_len) = 0;
+               if ( (yy_more_flag) )
+                       {
+                       (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
+                       (yy_more_flag) = 0;
+                       }
+               yy_cp = (yy_c_buf_p);
+
+               /* Support of yytext. */
+               *yy_cp = (yy_hold_char);
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+               yy_current_state = (yy_start);
+               yy_current_state += YY_AT_BOL();
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       if ( yy_accept[yy_current_state] )
+                               {
+                               (yy_last_accepting_state) = yy_current_state;
+                               (yy_last_accepting_cpos) = yy_cp;
+                               }
+                       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 >= 5144 )
+                                       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] != 123454 );
+
+yy_find_action:
+               yy_act = yy_accept[yy_current_state];
+               if ( yy_act == 0 )
+                       { /* have to back up */
+                       yy_cp = (yy_last_accepting_cpos);
+                       yy_current_state = (yy_last_accepting_state);
+                       yy_act = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+do_action:     /* This label is used only to access EOF actions. */
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+                       case 0: /* must back up */
+                       /* undo the effects of YY_DO_BEFORE_ACTION */
+                       *yy_cp = (yy_hold_char);
+                       yy_cp = (yy_last_accepting_cpos);
+                       yy_current_state = (yy_last_accepting_state);
+                       goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 150 "fscanner.l"
+{      /* lex/yacc C declarations/definitions */
+                       global = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 155 "fscanner.l"
+{
+                       global = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 160 "fscanner.l"
+{      /* lex/yacc rules delimiter */
+                       braces = 0;
+                       if (rules == NO) {
+                               /* this %% starts the section containing the rules */
+                               rules = YES;
+
+                               /* Copy yytext to private buffer, to be able to add further
+                                * content following it: */
+                               my_yymore();
+
+                               /* simulate a yylex() or yyparse() definition */
+                               (void) strcat(my_yytext, " /* ");
+                               first = strlen(my_yytext);
+                               if (lex == YES) {
+                                       (void) strcat(my_yytext, "yylex");
+                               } else {        
+                                       /* yacc: yyparse implicitly calls yylex */
+                                       char *s = " yylex()";
+                                       char *cp = s + strlen(s);
+                                       while (--cp >= s) {
+                                               unput(*cp);
+                                       }
+                                       (void) strcat(my_yytext, "yyparse");
+                               }
+                               last = strlen(my_yytext);
+                               (void) strcat(my_yytext, " */");
+                               my_yyleng = strlen(my_yytext);
+                               return(FCNDEF);
+                       } else {
+                               /* were in the rules section, now comes the closing one */
+                               rules = NO;
+                               global = YES;
+                               last = first;
+                               my_yymore();
+                               return(FCNEND);
+                               /* NOTREACHED */
+                       }
+               }
+       YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 199 "fscanner.l"
+{ /* sdl state, treat as function def */
+                       braces = 1;
+                       fcndef = YES;
+                       token = FCNDEF;
+                       goto findident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 206 "fscanner.l"
+{ /* end of an sdl state, treat as end of a function */
+                       goto endstate;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 211 "fscanner.l"
+{      /* count unmatched left braces for fcn def detection */
+                       ++braces;
+                       
+                       /* mark an untagged enum/struct/union so its beginning
+                          can be found */
+                       if (tagdef) {
+                               if (braces == 1) {
+                                       esudef = YES;
+                               }
+                               token = tagdef;
+                               tagdef = '\0';
+                               last = first;
+                               my_yymore();
+                               return(token);
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 230 "fscanner.l"
+{ /* start a preprocessor line */
+                       if (rules == NO)                /* don't consider CPP for lex/yacc rules */
+                               BEGIN(IN_PREPROC);
+                       yyleng = 1;     /* get rid of the blanks, if any */
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 237 "fscanner.l"
+{      /* #endif */
+                       /* delay treatment of #endif depending on whether an
+                        * #if comes right after it, or not */
+                       /* HBB 20010619: new pattern allows trailing garbage
+                        * after the #endif */
+                       BEGIN(WAS_ENDIF);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+#line 246 "fscanner.l"
+{
+                       /* attempt to correct erroneous brace count caused by:
+                        * 
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        */
+                       /* the current #if must not have an #else or #elif */
+                       if (elseelif == YES) {
+                               goto endif;
+                               /* NOTREACHED */
+                       }
+                       pseudoelif = YES;
+                       BEGIN(INITIAL);
+                       yyless(1);      /* rescan all but the line ending */
+                       yy_set_bol(1);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+#line 268 "fscanner.l"
+{      /* an #endif with no #if right after it */
+               endif:
+                       if (iflevel > 0) {
+                               /* get the maximum brace count for this #if */
+                               if (braces < maxifbraces[--iflevel]) {
+                                       braces = maxifbraces[iflevel];
+                               }
+                       }
+                       BEGIN(INITIAL);
+                       yyless(1);
+                       yy_set_bol(1);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 11:
+#line 284 "fscanner.l"
+case 12:
+#line 285 "fscanner.l"
+case 13:
+YY_RULE_SETUP
+#line 285 "fscanner.l"
+{ /* #if directive */
+                       elseelif = NO;
+                       if (pseudoelif == YES) {
+                               pseudoelif = NO;
+                               goto elif;
+                               /* NOTREACHED */
+                       }
+                       /* make sure there is room for the current brace count */
+                       if (iflevel == miflevel) {
+                               miflevel += IFLEVELINC;
+                               maxifbraces = myrealloc(maxifbraces, miflevel * sizeof(int));
+                               preifbraces = myrealloc(preifbraces, miflevel * sizeof(int));
+                       }
+                       /* push the current brace count */
+                       preifbraces[iflevel] = braces;
+                       maxifbraces[iflevel++] = 0;
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 305 "fscanner.l"
+{ /* #else --- eat up whole line */
+                       elseelif = YES;
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 320 "fscanner.l"
+{ /* #elif */
+                       /* elseelif = YES; --- HBB I doubt this is correct */
+               elif:
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 16:
+#line 338 "fscanner.l"
+case 17:
+YY_RULE_SETUP
+#line 338 "fscanner.l"
+{ /* #include file */
+                       char    *s;
+                       char remember = yytext[yyleng-1];
+                       
+                       my_yymore();
+                       s = strpbrk(my_yytext, "\"<");
+                       if (!s)
+                               return(LEXERR);
+                       my_yytext[my_yyleng-1] = '\0';
+                       incfile(s + 1, s);
+                       my_yytext[my_yyleng-1] = remember;
+                       first = s - my_yytext;
+                       last = my_yyleng - 1;
+                       if (compress == YES) {
+                               my_yytext[0] = '\2';    /* compress the keyword */
+                       }
+                       BEGIN(INITIAL);
+                       return(INCLUDE);
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 359 "fscanner.l"
+{
+                       /* could be the last enum member initializer */
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       if (--braces <= 0) {
+               endstate:
+                               braces = 0;
+                               classdef = NO;
+                       }
+                       if (braces == 0 || (braces == 1 && classdef == YES)) {
+
+                               /* if the end of an enum/struct/union definition */
+                               if (esudef == YES) {
+                                       esudef = NO;
+                               }
+                               /* if the end of the function */
+                               else if (fcndef == YES) {
+                                       fcndef = NO;
+                                       last = first;
+                                       my_yymore();
+                                       return(FCNEND);
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 388 "fscanner.l"
+{      /* count unmatched left parentheses for function templates */
+                       ++parens;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 393 "fscanner.l"
+{
+                       if (--parens <= 0) {
+                               parens = 0;
+                       }
+                       /* if the end of a function template */
+                       if (parens == templateparens) {
+                               templateparens = -1;
+                               template = NO;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 405 "fscanner.l"
+{      /* if a global definition initializer */
+                       if (!my_yytext)
+                               return(LEXERR);
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#') {
+                               initializerbraces = braces;
+                               initializer = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 415 "fscanner.l"
+{      /* a if global structure field */
+                       if (!my_yytext)
+                               return(LEXERR);
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#') {
+                               structfield = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 424 "fscanner.l"
+{
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       structfield = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 433 "fscanner.l"
+{      /* if the enum/struct/union was not a definition */
+                       if (braces == 0) {
+                               esudef = NO;
+                       }
+                       /* if the end of a typedef */
+                       if (braces == typedefbraces) {
+                               typedefbraces = -1;
+                       }
+                       /* if the end of a external definition */
+                       if (braces == externalbraces) {
+                               externalbraces = -1;
+                               external = NO;
+                       }
+                       structfield = NO;
+                       initializer = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 451 "fscanner.l"
+{
+                               
+                       /* preprocessor macro or constant definition */
+                       ppdefine = YES;
+                       token = DEFINE;
+                       if (compress == YES) {
+                               my_yytext[0] = '\1';    /* compress the keyword */
+                       }
+               findident:
+                       /* search backwards through yytext[] to find the identifier */
+                       /* NOTE: this had better be left to flex, by use of
+                        * yet another starting condition */
+                       my_yymore();
+                       first = my_yyleng - 1;
+                       while (my_yytext[first] != ' ' && my_yytext[first] != '\t') {
+                               --first;
+                       }
+                       ++first;
+                       last = my_yyleng;
+                       BEGIN(INITIAL);
+                       goto definition;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+#line 474 "fscanner.l"
+{   /* unknown preprocessor line */
+                       BEGIN(INITIAL);
+                        ++myylineno;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 27:
+#line 481 "fscanner.l"
+case 28:
+YY_RULE_SETUP
+#line 481 "fscanner.l"
+{   /* unknown preprocessor line */
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 29:
+/* rule 29 can match eol */
+YY_RULE_SETUP
+#line 487 "fscanner.l"
+{      /* class definition */
+                       classdef = YES;
+                       tagdef =  'c';
+                       yyless(5);              /* eat up 'class', and re-scan */
+                       yy_set_bol(0);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 496 "fscanner.l"
+{
+                       ident_start = first;
+                       BEGIN(WAS_ESU);
+                       goto more;
+               }
+       YY_BREAK
+
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+#line 502 "fscanner.l"
+{ /* e/s/u definition */
+                       tagdef = my_yytext[ident_start];
+                       BEGIN(WAS_IDENTIFIER);
+                       goto ident;
+               }
+       YY_BREAK
+case 32:
+/* rule 32 can match eol */
+YY_RULE_SETUP
+#line 507 "fscanner.l"
+{ /* e/s/u definition without a tag */
+                       tagdef = my_yytext[ident_start];
+                       BEGIN(INITIAL);
+                       if (braces == 0) {
+                               esudef = YES;
+                       }
+                       last = first;
+                       yyless(0);  /* re-scan all this as normal text */
+                       tagdef = '\0';
+                       goto more;
+               }
+       YY_BREAK
+case 33:
+/* rule 33 can match eol */
+#line 519 "fscanner.l"
+case 34:
+/* rule 34 can match eol */
+YY_RULE_SETUP
+#line 519 "fscanner.l"
+{   /* e/s/u usage */
+                       BEGIN(WAS_IDENTIFIER);
+                       goto ident;
+               }
+       YY_BREAK
+
+case 35:
+/* rule 35 can match eol */
+YY_RULE_SETUP
+#line 525 "fscanner.l"
+{      /* ignore 'if' */
+                       yyless(2);
+                       yy_set_bol(0);
+                       goto more;
+}      
+       YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 531 "fscanner.l"
+{      /* identifier found: do nothing, yet. (!) */
+                       BEGIN(WAS_IDENTIFIER);
+                       ident_start = first;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+
+case 37:
+/* rule 37 can match eol */
+YY_RULE_SETUP
+#line 539 "fscanner.l"
+{
+                       /* a function definition */
+                       /* note: "#define a (b) {" and "#if defined(a)\n#" 
+                        * are not fcn definitions! */
+                       /* warning: "if (...)" must not overflow yytext, 
+                        * so the content of function argument definitions 
+                        * is restricted, in particular parentheses are 
+                        * not allowed */
+                       /* FIXME HBB 20001003: the above 'not allowed' may well be the
+                        * reason for the parsing bug concerning function pointer usage,
+                        * I suspect. --- I think my new special-case rule for 'if'
+                        * could be helpful in removing that limitation */
+                       if ((braces == 0 && ppdefine == NO && my_yytext[0] != '#' && rules == NO) ||
+                           (braces == 1 && classdef == YES)) {
+                               fcndef = YES;
+                               token = FCNDEF;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       goto fcncal;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 38:
+/* rule 38 can match eol */
+YY_RULE_SETUP
+#line 561 "fscanner.l"
+{      /* function call */
+               fcncal: if (fcndef == YES || ppdefine == YES || rules == YES) {
+                               token = FCNCALL;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       if (template == NO) {
+                               templateparens = parens;
+                               template = YES;
+                       }
+                       goto ident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 39:
+/* rule 39 can match eol */
+YY_RULE_SETUP
+#line 574 "fscanner.l"
+{      /* typedef name or modifier use */
+                       goto ident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 40:
+/* rule 40 can match eol */
+YY_RULE_SETUP
+#line 578 "fscanner.l"
+{              /* general identifer usage */
+                       char    *s;
+
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#' &&
+                           external == NO && initializer == NO && 
+                           arraydimension == NO && structfield == NO &&
+                           template == NO && fcndef == NO) {
+                               if (esudef == YES) {    
+                                       /* if enum/struct/union */
+                                       token = MEMBERDEF;
+                               } else {
+                                       token = GLOBALDEF;
+                               }
+                       } else {
+               ident:
+                               token = IDENT;
+                       }
+               fcn:
+                       if (YYSTATE == WAS_IDENTIFIER) {
+                               /* Position back to the actual identifier: */
+                               last = first; 
+                               first = ident_start;
+                               yyless(0);
+                               /* HBB 20001008: if the anti-backup-pattern above matched,
+                                * and the matched context ended with a \n, then the scanner
+                                * believes it's at the start of a new line. But the yyless()
+                                * should feeds that \n back into the input, so that's
+                                * wrong. --> force 'beginning-of-line' status off. */
+                               yy_set_bol(0);
+                               BEGIN(INITIAL);
+                       } else {
+                               my_yymore();
+                               last = my_yyleng;
+                       }
+               definition:
+
+                       /* if a long line */
+                       if (yyleng > STMTMAX) {
+                               int     c;
+                               
+                               /* skip to the end of the line */
+                               warning("line too long");
+                               while ((c = skipcomment_input()) > LEXEOF) { 
+                                       if (c == '\n') {
+                                               unput(c);
+                                               break;
+                                       }
+                               }
+                       }
+                       /* truncate a long symbol */
+                       if (yyleng > PATLEN) {
+                               warning("symbol too long");
+                               my_yyleng = first + PATLEN;
+                               my_yytext[my_yyleng] = '\0';
+                       }
+
+                       /* if found word was a keyword: */
+                       if ((s = lookup(my_yytext + first)) != NULL) {
+                               first = my_yyleng;
+                               
+                               /* if the start of a typedef */
+                               if (s == typedeftext) {
+                                       typedefbraces = braces;
+                                       oldtype = YES;
+                               }
+                               /* if an enum/struct/union */
+                               /* (needed for "typedef struct tag name;" so
+                                  tag isn't marked as the typedef name) */
+                               else if (s == enumtext || s == structtext || s == uniontext) {
+                                       /* do nothing */
+                               } else if (s == externtext) {
+                                       /* if an external definition */
+                                       externalbraces = braces;
+                                       external = YES;
+                               } else if (templateparens == parens && template == YES) {
+                                       /* keyword doesn't start a function 
+                                        * template */
+                                       templateparens = -1;
+                                       template = NO;
+                               } else {        
+                                       /* identifier after typedef was a 
+                                        * keyword */
+                                       oldtype = NO;
+                               }
+                       } else {        
+                               /* not a keyword --> found an identifier */
+                               /* last = yyleng; */
+                               
+                               /* if a class/enum/struct/union tag definition */
+                               /* FIXME HBB 20001001: why reject "class"? */
+                               if (tagdef && strnotequal(my_yytext + first, "class")) {
+                                       token = tagdef;
+                                       tagdef = '\0';
+                                       if (braces == 0) {
+                                               esudef = YES;
+                                       }
+                               } else if (braces == typedefbraces && oldtype == NO &&
+                                          arraydimension == NO) {
+                                       /* if a typedef name */
+                                       token = TYPEDEF;
+                               } else {
+                                       oldtype = NO;
+                               }
+                               /* my_yymore(); */
+                               return(token);
+                               /* NOTREACHED */
+                       }
+               }
+       YY_BREAK
+
+case 41:
+YY_RULE_SETUP
+#line 688 "fscanner.l"
+{      /* array dimension (don't worry or about subscripts) */
+                       arraydimension = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 693 "fscanner.l"
+{
+                       arraydimension = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 43:
+/* rule 43 can match eol */
+YY_RULE_SETUP
+#line 698 "fscanner.l"
+{      /* preprocessor statement is continued on next line */
+                       /* save the '\\' to the output file, but not the '\n': */
+                       yyleng = 1;
+                       my_yymore();
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 44:
+/* rule 44 can match eol */
+YY_RULE_SETUP
+#line 705 "fscanner.l"
+{      /* end of the line */
+                       if (ppdefine == YES) {  /* end of a #define */
+                               ppdefine = NO;
+                               yyless(yyleng - 1);
+                               last = first;
+                               my_yymore();
+                               return(DEFINEEND);
+                       }
+                       /* skip the first 8 columns of a breakpoint listing line */
+                       /* and skip the file path in the page header */
+                       if (bplisting == YES) {
+                               int     c, i;
+
+                               /* FIXME HBB 20001007: should call input() instead */
+                               switch (skipcomment_input()) {  /* tab and EOF just fall through */
+                               case ' ':       /* breakpoint number line */
+                               case '[':
+                                       for (i = 1; i < 8 && skipcomment_input() > LEXEOF; ++i)
+                                               ;
+                                       break;
+                               case '.':       /* header line */
+                               case '/':
+                                       /* skip to the end of the line */
+                                       while ((c = skipcomment_input()) > LEXEOF) {
+                                               if (c == '\n') {
+                                                       unput(c);
+                                                       break;
+                                               }
+                                       }
+                                       break;
+                               case '\n':      /* empty line */
+                                       unput('\n');
+                                       break;
+                               }
+                       }
+               eol:
+                       ++myylineno;
+                       first = 0;
+                       last = 0;
+                       if (symbols > 0) {
+                               /* no my_yymore(): \n doesn't need to be in my_yytext */
+                               return(NEWLINE);
+                       }
+                       /* line ended --> flush my_yytext */
+                       if (my_yytext)
+                               *my_yytext = '\0';
+                       my_yyleng = 0;
+                       lineno = myylineno;
+               }
+       YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 755 "fscanner.l"
+{      /* character constant */
+                       if (sdl == NO) 
+                               BEGIN(IN_SQUOTE);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 761 "fscanner.l"
+{      
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 766 "fscanner.l"
+{      /* string constant */
+                       BEGIN(IN_DQUOTE);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 771 "fscanner.l"
+{      
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+
+case 49:
+/* rule 49 can match eol */
+YY_RULE_SETUP
+#line 777 "fscanner.l"
+{      /* syntax error: unexpected EOL */
+                       BEGIN(INITIAL);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 50:
+#line 783 "fscanner.l"
+case 51:
+YY_RULE_SETUP
+#line 783 "fscanner.l"
+{
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 52:
+/* rule 52 can match eol */
+YY_RULE_SETUP
+#line 787 "fscanner.l"
+{              /* line continuation inside a string! */
+                       myylineno++;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+
+case 53:
+YY_RULE_SETUP
+#line 794 "fscanner.l"
+{              /* don't save leading white space */
+               }
+       YY_BREAK
+case 54:
+/* rule 54 can match eol */
+YY_RULE_SETUP
+#line 797 "fscanner.l"
+{              /* eat whitespace at end of line */
+                       unput('\n');
+               }
+       YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 801 "fscanner.l"
+{      /* eat non-blank whitespace sequences, replace
+                        * by single blank */
+                       unput(' ');
+               }
+       YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 806 "fscanner.l"
+{   /* compress sequential whitespace here, not in putcrossref() */
+                       unput(' ');
+               }
+       YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 810 "fscanner.l"
+yy_push_state(COMMENT);
+       YY_BREAK
+
+case 58:
+#line 813 "fscanner.l"
+case 59:
+YY_RULE_SETUP
+#line 813 "fscanner.l"
+; /* do nothing */
+       YY_BREAK
+case 60:
+/* rule 60 can match eol */
+#line 815 "fscanner.l"
+case 61:
+/* rule 61 can match eol */
+YY_RULE_SETUP
+#line 815 "fscanner.l"
+{
+                       if (ppdefine == NO) {
+                               goto eol;
+                       } else {
+                               ++myylineno;
+                       }
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 823 "fscanner.l"
+{
+                       /* replace the comment by a single blank */
+                       unput(' ');
+                       yy_pop_state();
+               }
+       YY_BREAK
+
+case 63:
+/* rule 63 can match eol */
+YY_RULE_SETUP
+#line 830 "fscanner.l"
+{
+                       /* C++-style one-line comment */
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 64:
+#line 837 "fscanner.l"
+case 65:
+#line 838 "fscanner.l"
+case 66:
+YY_RULE_SETUP
+#line 838 "fscanner.l"
+{      /* punctuation and operators */
+                                               more:   
+                                                       my_yymore();
+                                                       first = my_yyleng;
+                                               }
+       YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 844 "fscanner.l"
+ECHO;
+       YY_BREAK
+#line 30979 "fscanner.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(SDL):
+case YY_STATE_EOF(IN_PREPROC):
+case YY_STATE_EOF(WAS_ENDIF):
+case YY_STATE_EOF(WAS_IDENTIFIER):
+case YY_STATE_EOF(WAS_ESU):
+case YY_STATE_EOF(IN_DQUOTE):
+case YY_STATE_EOF(IN_SQUOTE):
+case YY_STATE_EOF(COMMENT):
+       yyterminate();
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = (yy_hold_char);
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed yyin at a new source and called
+                        * yylex().  If so, then we have to assure
+                        * consistency between YY_CURRENT_BUFFER and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state(  );
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+                       yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++(yy_c_buf_p);
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+                               yy_cp = (yy_c_buf_p);
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer(  ) )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               (yy_did_buffer_switch_on_eof) = 0;
+
+                               if ( yywrap( ) )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * yytext, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               (yy_c_buf_p) =
+                                       (yytext_ptr) + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               (yy_c_buf_p) =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+       else
+               {
+                       int num_to_read =
+                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+
+                       /* just a shorter name for the current buffer */
+                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+                       int yy_c_buf_p_offset =
+                               (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+                       if ( b->yy_is_our_buffer )
+                               {
+                               int new_size = b->yy_buf_size * 2;
+
+                               if ( new_size <= 0 )
+                                       b->yy_buf_size += b->yy_buf_size / 8;
+                               else
+                                       b->yy_buf_size *= 2;
+
+                               b->yy_ch_buf = (char *)
+                                       /* Include room in for 2 EOB chars. */
+                                       yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+                               }
+                       else
+                               /* Can't grow it, we don't own it. */
+                               b->yy_ch_buf = 0;
+
+                       if ( ! b->yy_ch_buf )
+                               YY_FATAL_ERROR(
+                               "fatal error - scanner input buffer overflow" );
+
+                       (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+                       num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+                                               number_to_move - 1;
+
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+                       (yy_n_chars), (size_t) num_to_read );
+
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       if ( (yy_n_chars) == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       yyrestart(yyin  );
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+               /* Extend the array by 50%, plus the number we really need. */
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+       }
+
+       (yy_n_chars) += number_to_move;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+       (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+       return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+    
+       yy_current_state = (yy_start);
+       yy_current_state += YY_AT_BOL();
+
+       for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+               {
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               if ( yy_accept[yy_current_state] )
+                       {
+                       (yy_last_accepting_state) = yy_current_state;
+                       (yy_last_accepting_cpos) = yy_cp;
+                       }
+               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 >= 5144 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               }
+
+       return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+       register int yy_is_jam;
+       register char *yy_cp = (yy_c_buf_p);
+
+       register YY_CHAR yy_c = 1;
+       if ( yy_accept[yy_current_state] )
+               {
+               (yy_last_accepting_state) = yy_current_state;
+               (yy_last_accepting_cpos) = yy_cp;
+               }
+       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 >= 5144 )
+                       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 == 5143);
+
+       return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+       register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+       /* undo effects of setting up yytext */
+       *yy_cp = (yy_hold_char);
+
+       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register int number_to_move = (yy_n_chars) + 2;
+               register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+               register char *source =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+       (yytext_ptr) = yy_bp;
+       (yy_hold_char) = *yy_cp;
+       (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+       int c;
+    
+       *(yy_c_buf_p) = (yy_hold_char);
+
+       if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       /* This was really a NUL. */
+                       *(yy_c_buf_p) = '\0';
+
+               else
+                       { /* need more input */
+                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       ++(yy_c_buf_p);
+
+                       switch ( yy_get_next_buffer(  ) )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       yyrestart(yyin );
+
+                                       /*FALLTHROUGH*/
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( yywrap( ) )
+                                               return EOF;
+
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput();
+#else
+                                       return input();
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       (yy_c_buf_p) = (yytext_ptr) + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
+       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       (yy_hold_char) = *++(yy_c_buf_p);
+
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+
+       return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file )
+{
+    
+       if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack ();
+               YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE );
+       }
+
+       yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+       yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+       /* TODO. We should be able to replace this entire function body
+        * with
+        *              yypop_buffer_state();
+        *              yypush_buffer_state(new_buffer);
+     */
+       yyensure_buffer_stack ();
+       if ( YY_CURRENT_BUFFER == new_buffer )
+               return;
+
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+       yy_load_buffer_state( );
+
+       /* We don't actually know whether we did this switch during
+        * EOF (yywrap()) processing, but the only time this flag
+        * is looked at is after yywrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state  (void)
+{
+       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+       (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+{
+       YY_BUFFER_STATE b;
+    
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       yy_init_buffer(b,file );
+
+       return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * 
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+       if ( ! b )
+               return;
+
+       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               yyfree((void *) b->yy_ch_buf  );
+
+       yyfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+       int oerrno = errno;
+    
+       yy_flush_buffer(b );
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+       errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
+{
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == YY_CURRENT_BUFFER )
+               yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+       if (new_buffer == NULL)
+               return;
+
+       yyensure_buffer_stack();
+
+       /* This block is copied from yy_switch_to_buffer. */
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       /* Only push if top exists. Otherwise, replace top. */
+       if (YY_CURRENT_BUFFER)
+               (yy_buffer_stack_top)++;
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+       /* copied from yy_switch_to_buffer. */
+       yy_load_buffer_state( );
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void yypop_buffer_state (void)
+{
+       if (!YY_CURRENT_BUFFER)
+               return;
+
+       yy_delete_buffer(YY_CURRENT_BUFFER );
+       YY_CURRENT_BUFFER_LVALUE = NULL;
+       if ((yy_buffer_stack_top) > 0)
+               --(yy_buffer_stack_top);
+
+       if (YY_CURRENT_BUFFER) {
+               yy_load_buffer_state( );
+               (yy_did_buffer_switch_on_eof) = 1;
+       }
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+       int num_to_alloc;
+    
+       if (!(yy_buffer_stack)) {
+
+               /* First allocation is just for 2 elements, since we don't know if this
+                * scanner will even need a stack. We use 2 instead of 1 to avoid an
+                * immediate realloc on the next call.
+         */
+               num_to_alloc = 1;
+               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                                                                 
+               memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+                               
+               (yy_buffer_stack_max) = num_to_alloc;
+               (yy_buffer_stack_top) = 0;
+               return;
+       }
+
+       if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+               /* Increase the buffer to prepare for a possible push. */
+               int grow_size = 8 /* arbitrary grow size */;
+
+               num_to_alloc = (yy_buffer_stack_max) + grow_size;
+               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+                                                               ((yy_buffer_stack),
+                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+               /* zero only the new slots.*/
+               memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+               (yy_buffer_stack_max) = num_to_alloc;
+       }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+{
+       YY_BUFFER_STATE b;
+    
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       yy_switch_to_buffer(b  );
+
+       return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+    
+       return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n;
+       int i;
+    
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = _yybytes_len + 2;
+       buf = (char *) yyalloc(n  );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+       for ( i = 0; i < _yybytes_len; ++i )
+               buf[i] = yybytes[i];
+
+       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = yy_scan_buffer(buf,n );
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+}
+
+    static void yy_push_state (int  new_state )
+{
+       if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
+               {
+               yy_size_t new_size;
+
+               (yy_start_stack_depth) += YY_START_STACK_INCR;
+               new_size = (yy_start_stack_depth) * sizeof( int );
+
+               if ( ! (yy_start_stack) )
+                       (yy_start_stack) = (int *) yyalloc(new_size  );
+
+               else
+                       (yy_start_stack) = (int *) yyrealloc((void *) (yy_start_stack),new_size  );
+
+               if ( ! (yy_start_stack) )
+                       YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+               }
+
+       (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+
+       BEGIN(new_state);
+}
+
+    static void yy_pop_state  (void)
+{
+       if ( --(yy_start_stack_ptr) < 0 )
+               YY_FATAL_ERROR( "start-condition stack underflow" );
+
+       BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+}
+
+    static int yy_top_state  (void)
+{
+       return (yy_start_stack)[(yy_start_stack_ptr) - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               yytext[yyleng] = (yy_hold_char); \
+               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               (yy_hold_char) = *(yy_c_buf_p); \
+               *(yy_c_buf_p) = '\0'; \
+               yyleng = yyless_macro_arg; \
+               } \
+       while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int yyget_lineno  (void)
+{
+        
+    return yylineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yyget_in  (void)
+{
+        return yyin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yyget_out  (void)
+{
+        return yyout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int yyget_leng  (void)
+{
+        return yyleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yyget_text  (void)
+{
+        return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yyset_lineno (int  line_number )
+{
+    
+    yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str )
+{
+        yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str )
+{
+        yyout = out_str ;
+}
+
+int yyget_debug  (void)
+{
+        return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug )
+{
+        yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+    (yy_start_stack_ptr) = 0;
+    (yy_start_stack_depth) = 0;
+    (yy_start_stack) =  NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+       while(YY_CURRENT_BUFFER){
+               yy_delete_buffer(YY_CURRENT_BUFFER  );
+               YY_CURRENT_BUFFER_LVALUE = NULL;
+               yypop_buffer_state();
+       }
+
+       /* Destroy the stack itself. */
+       yyfree((yy_buffer_stack) );
+       (yy_buffer_stack) = NULL;
+
+    /* Destroy the start condition stack. */
+        yyfree((yy_start_stack)  );
+        (yy_start_stack) = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size )
+{
+       return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size )
+{
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 844 "fscanner.l"
+
+
+
+void
+initscanner(char *srcfile)
+{
+       char    *s;
+       
+       if (maxifbraces == NULL) {
+               maxifbraces = mymalloc(miflevel * sizeof(int));
+               preifbraces = mymalloc(miflevel * sizeof(int));
+       }
+       first = 0;              /* buffer index for first char of symbol */
+       last = 0;               /* buffer index for last char of symbol */
+       lineno = 1;             /* symbol line number */
+       myylineno = 1;          /* input line number */
+       arraydimension = NO;    /* inside array dimension declaration */
+       bplisting = NO;         /* breakpoint listing */
+       braces = 0;             /* unmatched left brace count */
+       classdef = NO;          /* c++ class definition */
+       elseelif = NO;          /* #else or #elif found */
+       esudef = NO;            /* enum/struct/union global definition */
+       external = NO;          /* external definition */
+       externalbraces = -1;    /* external definition outer brace count */
+       fcndef = NO;            /* function definition */
+       global = YES;           /* file global scope (outside functions) */
+       iflevel = 0;            /* #if nesting level */
+       initializer = NO;       /* data initializer */
+       initializerbraces = -1; /* data initializer outer brace count */
+       lex = NO;               /* lex file */
+       parens = 0;             /* unmatched left parenthesis count */
+       ppdefine = NO;          /* preprocessor define statement */
+       pseudoelif = NO;        /* pseudo-#elif */
+       oldtype = NO;           /* next identifier is an old type */
+       rules = NO;             /* lex/yacc rules */
+       sdl = NO;               /* sdl file */
+       structfield = NO;       /* structure field declaration */
+       tagdef = '\0';          /* class/enum/struct/union tag definition */
+       template = NO;          /* function template */
+       templateparens = -1;    /* function template outer parentheses count */
+       typedefbraces = -1;     /* initial typedef braces count */
+       ident_start = 0;        /* start of previously found identifier */
+
+       if (my_yytext)
+               *my_yytext = '\0';
+       my_yyleng = 0;
+       
+       BEGIN(INITIAL);
+
+       /* if this is not a C file */
+       if ((s = strrchr(srcfile, '.')) != NULL) {
+               switch (*++s) { /* this switch saves time on C files */
+               case 'b':
+                       if (strcmp(s, "bp") == 0) {     /* breakpoint listing */
+                               bplisting = YES;
+                       }
+                       break;
+               case 'l':
+                       if (strcmp(s, "l") == 0) {      /* lex */
+                               lex = YES;
+                               global = NO;
+                       }
+                       break;
+               case 's':
+                       if (strcmp(s, "sd") == 0) {     /* sdl */
+                               sdl = YES;
+                               BEGIN(SDL);
+                       }
+                       break;
+               case 'y':
+                       if (strcmp(s, "y") == 0) {      /* yacc */
+                               global = NO;
+                       }
+                       break;
+               }
+       }
+}
+
+#if !COMMENTS_BY_FLEX
+
+/* A micro-scanner that serves as the input() function of the
+ * scanner. It throws away any comments in the input, correctly
+ * avoiding doing this inside string/character constants, and knows
+ * about backslash sequences. Now that the main scanner doesn't use
+ * yymore() any longer, this could be replaced by lex rules. Left for
+ * trying later. */
+
+/* Status variable: If this is non-NUL, it's the character that
+* terminates a string we're currently in. */
+static int string_terminator = '\0';
+
+/* Helper routine: treat 'c' as a character found inside a
+ * string. Check if this character might be the end of that
+ * string. Backslashes have to be taken care of, for the sake of
+ * "quotes like \"these\" found inside a string". */
+static int
+insidestring_input(int c)
+{
+       static BOOL was_backslash = NO;
+       
+       if ((c == '\\') && (was_backslash == NO)) {
+               /* escape character found --> treat next char specially */
+               /* FIXME HBB 20001003: need treatment of backslash in the main
+                * scanner, too. It'll get false line counts in case of "\\'",
+                * otherwise --- they can occur as part of a lex pattern */
+               was_backslash = YES;
+               return c;
+       }
+
+       if (((c == '\t') && (lex == YES))
+           /* Note: "\\\n" is removed even inside strings! */
+           || ((c == '\n') && (was_backslash == NO))
+               || (c == EOF)
+               || ((c == string_terminator) && (was_backslash == NO))
+          ) {
+               /* Line ended, or end-of-string was found. That is a syntax
+                * error.  To recover, stop treatment as a string constant: */
+               string_terminator = '\0';
+       } else if (!isprint((unsigned char)c)) {
+               /* mask unprintable characters */
+               c = ' ';
+       }
+       
+       was_backslash = NO;
+       return c;
+}
+
+/* Helper function: skip over input until end of comment is found (or
+ * we find that it wasn't really comment, in the first place): */
+static int
+comment(void)
+{
+       int     c, lastc;
+
+       /* Coming here, we've just read in the opening '/' of a
+        * comment. */
+       do {
+               if ((c = getc(yyin)) == '*') {  /* C comment */
+                       lastc = '\0';
+                       while ((c = getc(yyin)) != EOF
+                                  /* fewer '/'s --> test them first! */
+                              && (c != '/' || lastc != '*')
+                             ) { 
+                               if (c == '\n') {
+                                       /* keep the line number count */
+                                       /* FIXME HBB 20001008: this is not synchronized
+                                        * properly with myylineno changes by the main
+                                        * scanner. A strong point in favour of moving
+                                        * this to lex-code that is, IMHO */
+                                       ++myylineno;
+                               }
+                               lastc = c;
+                       }
+                       /* return a blank for Reiser cpp token concatenation */
+                       /* FIXME HBB 20001008: what on earth is 'Reiser cpp'? ANSI
+                        * C defines cpp to explicitly replace any comment by a
+                        * blank. Pre-ANSI cpp's behaved differently, but do we
+                        * really want that? If at all, it should only ever be a
+                        * non-default option (like gcc's "-traditional-cpp")
+                        * */
+                       if ((c = getc(yyin)) == '_' || isalnum(c)) {
+                               (void) ungetc(c, yyin);
+                               c = ' ';
+                               break;
+                       }
+               } else if (c == '/') {          /* C++ comment */
+                       while ((c = getc(yyin)) != EOF && c != '\n') {
+                               ; /* do nothing else */
+                       }
+                       break;
+               } else {                                        /* not a comment */
+                       (void) ungetc(c, yyin);
+                       c = '/';
+                       break;
+                       /* NOTREACHED */
+               }
+               
+       /* there may be an immediately following comment */
+       } while (c == '/');
+       return(c);
+}
+
+/* The core of the actual input() function to be used by (f)lex. The
+ * calling scheme between this and the actual input() redefinition is
+ * a bit different for lex and flex. See the #ifdef FLEX_SCANNER part
+ * in the head section. */
+static int
+skipcomment_input(void)
+{
+       int     c;
+
+       c = getc (yyin);
+       if (string_terminator != '\0') {
+               /* don't look for comments inside strings! */
+               return insidestring_input(c);
+       } else if (c == '/') {
+               /* swallow everything until end of comment, if this is one */
+               return comment (); 
+       } else if (c == '"' || c == '\'') {
+               /* a string is beginning here, so switch input method */
+               string_terminator = c;
+       }
+       
+       return c;
+}
+
+#endif /* !COMMENTS_BY_FLEX */
+
+#define MY_YY_ALLOCSTEP 1000
+static void
+my_yymore(void)
+{
+       static size_t yytext_size = 0;
+       
+       /* my_yytext is an ever-growing buffer. It will not ever
+        * shrink, nor will it be freed at end of program, for now */
+       while (my_yyleng + yyleng + 1 >= yytext_size) {
+               my_yytext = myrealloc(my_yytext, 
+                                                 yytext_size += MY_YY_ALLOCSTEP);
+       }
+       
+       strncpy (my_yytext + my_yyleng, yytext, yyleng+1);
+       my_yyleng += yyleng;
+}
+
diff --git a/src/fscanner.l b/src/fscanner.l
new file mode 100644 (file)
index 0000000..2b264d3
--- /dev/null
@@ -0,0 +1,1066 @@
+%{
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     C symbol scanner
+ */
+#include "global.h"
+#include "alloc.h"
+#include "scanner.h"
+#include "lookup.h"
+
+#include <assert.h>
+
+/* the line counting has been moved from character reading for speed */
+/* comments are discarded */
+
+#ifndef FLEX_SCANNER
+# error Sorry, this scanner needs flex. It is not usable with AT&T Lex.
+#endif
+
+#define        IFLEVELINC      5       /* #if nesting level size increment */
+#define YY_NO_TOP_STATE 1
+
+static char const rcsid[] = "$Id: fscanner.l,v 1.17 2012/08/02 21:48:08 broeker Exp $";
+
+int    first;  /* buffer index for first char of symbol */
+int    last;   /* buffer index for last char of symbol */
+int    lineno; /* symbol line number */
+int    myylineno = 1;
+
+/* HBB 20001007: new variables, emulating yytext in a way that allows 
+ * the yymore() simulation, my_yymore(), to be used even in the presence of 
+ * yyless(). */
+size_t my_yyleng = 0;
+char *my_yytext = NULL;
+
+static BOOL    arraydimension;         /* inside array dimension declaration */
+static BOOL    bplisting;              /* breakpoint listing */
+static int     braces;                 /* unmatched left brace count */
+static BOOL    classdef;               /* c++ class definition */
+static BOOL    elseelif;               /* #else or #elif found */
+static BOOL    esudef;                 /* enum/struct/union global definition */
+static BOOL    external;               /* external definition */
+static int     externalbraces;         /* external definition outer brace count */
+static BOOL    fcndef;                 /* function definition */
+static BOOL    global;                 /* file global scope (outside functions) */
+static int     iflevel;                /* #if nesting level */
+static BOOL    initializer;            /* data initializer */
+static int     initializerbraces;      /* data initializer outer brace count */
+static BOOL    lex;                    /* lex file */
+static int     miflevel = IFLEVELINC;  /* maximum #if nesting level */
+static int     *maxifbraces;           /* maximum brace count within #if */
+static int     *preifbraces;           /* brace count before #if */
+static int     parens;                 /* unmatched left parenthesis count */
+static BOOL    ppdefine;               /* preprocessor define statement */
+static BOOL    pseudoelif;             /* pseudo-#elif */
+static BOOL    oldtype;                /* next identifier is an old type */
+static BOOL    rules;                  /* lex/yacc rules */
+static BOOL    sdl;                    /* sdl file */
+static BOOL    structfield;            /* structure field declaration */
+static int     tagdef;                 /* class/enum/struct/union tag definition */
+static BOOL    template;               /* function template */
+static int     templateparens;         /* function template outer parentheses count */
+static int     typedefbraces = -1;     /* initial typedef brace count */
+static int     token;                  /* token found */
+static int     ident_start;            /* begin of preceding identifier */
+
+/* If this is defined to 1, use flex rules rather than the input
+ * function to discard comments. The scanner gains quite a bit of
+ * speed this way, because of a large reduction of the number of I/O
+ * system/library calls.  The original skipcomment_input() called
+ * getc() so often that the call overhead of shared libraries
+ * vs. static linking, alone, already caused a sizeable performance
+ * hit (up to 40% gross gain on a cscope -cub of its own source
+ * dir). */
+#define COMMENTS_BY_FLEX 1
+
+#if !COMMENTS_BY_FLEX
+static int     skipcomment_input(void);
+static int     comment(void);
+static int     insidestring_input(int);
+#endif
+
+static void    my_yymore(void);
+
+#if COMMENTS_BY_FLEX
+# define skipcomment_input input
+#else
+
+# define YY_INPUT(buf,result,max_size)                         \
+{                                                              \
+       int c = skipcomment_input ();                           \
+       result = (c == EOF) ? YY_NULL : (buf[0] = c, 1);        \
+}
+
+#endif /* !COMMENTS_BY_FLEX*/
+
+
+%}
+identifier     [a-zA-Z_$][a-zA-Z_0-9$]*
+number         \.?[0-9][.0-9a-fA-FlLuUxX]*
+comment                "/*"([^*]*("*"+[^/])?)*"*/"|"//"[^\n]*\n
+ws             [ \t\r\v\f]
+wsnl           [ \t\r\v\f\n]|{comment}
+
+/* flex options: stack of start conditions, and don't use yywrap() */
+%option stack
+%option noyywrap
+
+%start SDL
+%a 4000
+%o 7000
+
+/* exclusive start conditions. not available in AT&T lex -> use flex! */
+%x IN_PREPROC WAS_ENDIF WAS_IDENTIFIER WAS_ESU IN_DQUOTE IN_SQUOTE COMMENT
+
+%%
+
+%\{            {       /* lex/yacc C declarations/definitions */
+                       global = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+%\}            {
+                       global = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+^%%            {       /* lex/yacc rules delimiter */
+                       braces = 0;
+                       if (rules == NO) {
+                               /* this %% starts the section containing the rules */
+                               rules = YES;
+
+                               /* Copy yytext to private buffer, to be able to add further
+                                * content following it: */
+                               my_yymore();
+
+                               /* simulate a yylex() or yyparse() definition */
+                               (void) strcat(my_yytext, " /* ");
+                               first = strlen(my_yytext);
+                               if (lex == YES) {
+                                       (void) strcat(my_yytext, "yylex");
+                               } else {        
+                                       /* yacc: yyparse implicitly calls yylex */
+                                       char *s = " yylex()";
+                                       char *cp = s + strlen(s);
+                                       while (--cp >= s) {
+                                               unput(*cp);
+                                       }
+                                       (void) strcat(my_yytext, "yyparse");
+                               }
+                               last = strlen(my_yytext);
+                               (void) strcat(my_yytext, " */");
+                               my_yyleng = strlen(my_yytext);
+                               return(FCNDEF);
+                       } else {
+                               /* were in the rules section, now comes the closing one */
+                               rules = NO;
+                               global = YES;
+                               last = first;
+                               my_yymore();
+                               return(FCNEND);
+                               /* NOTREACHED */
+                       }
+               }
+
+<SDL>STATE[ \t]+({identifier}|\*)      { /* sdl state, treat as function def */
+                       braces = 1;
+                       fcndef = YES;
+                       token = FCNDEF;
+                       goto findident;
+                       /* NOTREACHED */
+               }
+<SDL>ENDSTATE[ \t]     { /* end of an sdl state, treat as end of a function */
+                       goto endstate;
+                       /* NOTREACHED */
+               }
+
+\{             {       /* count unmatched left braces for fcn def detection */
+                       ++braces;
+                       
+                       /* mark an untagged enum/struct/union so its beginning
+                          can be found */
+                       if (tagdef) {
+                               if (braces == 1) {
+                                       esudef = YES;
+                               }
+                               token = tagdef;
+                               tagdef = '\0';
+                               last = first;
+                               my_yymore();
+                               return(token);
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+\#{ws}*        { /* start a preprocessor line */
+                       if (rules == NO)                /* don't consider CPP for lex/yacc rules */
+                               BEGIN(IN_PREPROC);
+                       yyleng = 1;     /* get rid of the blanks, if any */
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>endif([^a-zA-Z0-9_$\n].*)? {       /* #endif */
+                       /* delay treatment of #endif depending on whether an
+                        * #if comes right after it, or not */
+                       /* HBB 20010619: new pattern allows trailing garbage
+                        * after the #endif */
+                       BEGIN(WAS_ENDIF);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<WAS_ENDIF>\n{wsnl}*#{ws}*if(ndef|def)?{ws}+           {
+                       /* attempt to correct erroneous brace count caused by:
+                        * 
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        */
+                       /* the current #if must not have an #else or #elif */
+                       if (elseelif == YES) {
+                               goto endif;
+                               /* NOTREACHED */
+                       }
+                       pseudoelif = YES;
+                       BEGIN(INITIAL);
+                       yyless(1);      /* rescan all but the line ending */
+                       yy_set_bol(1);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+<WAS_ENDIF>\n{wsnl}*            {      /* an #endif with no #if right after it */
+               endif:
+                       if (iflevel > 0) {
+                               /* get the maximum brace count for this #if */
+                               if (braces < maxifbraces[--iflevel]) {
+                                       braces = maxifbraces[iflevel];
+                               }
+                       }
+                       BEGIN(INITIAL);
+                       yyless(1);
+                       yy_set_bol(1);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+
+<IN_PREPROC>ifndef{ws}+        |
+<IN_PREPROC>ifdef{ws}+         |
+<IN_PREPROC>if{ws}+            { /* #if directive */
+                       elseelif = NO;
+                       if (pseudoelif == YES) {
+                               pseudoelif = NO;
+                               goto elif;
+                               /* NOTREACHED */
+                       }
+                       /* make sure there is room for the current brace count */
+                       if (iflevel == miflevel) {
+                               miflevel += IFLEVELINC;
+                               maxifbraces = myrealloc(maxifbraces, miflevel * sizeof(int));
+                               preifbraces = myrealloc(preifbraces, miflevel * sizeof(int));
+                       }
+                       /* push the current brace count */
+                       preifbraces[iflevel] = braces;
+                       maxifbraces[iflevel++] = 0;
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>else({ws}.*)?      { /* #else --- eat up whole line */
+                       elseelif = YES;
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>elif{ws}+  { /* #elif */
+                       /* elseelif = YES; --- HBB I doubt this is correct */
+               elif:
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+<IN_PREPROC>include{ws}*\"[^"\n]+\" |
+<IN_PREPROC>include{ws}*<[^>\n]+>      { /* #include file */
+                       char    *s;
+                       char remember = yytext[yyleng-1];
+                       
+                       my_yymore();
+                       s = strpbrk(my_yytext, "\"<");
+                       if (!s)
+                               return(LEXERR);
+                       my_yytext[my_yyleng-1] = '\0';
+                       incfile(s + 1, s);
+                       my_yytext[my_yyleng-1] = remember;
+                       first = s - my_yytext;
+                       last = my_yyleng - 1;
+                       if (compress == YES) {
+                               my_yytext[0] = '\2';    /* compress the keyword */
+                       }
+                       BEGIN(INITIAL);
+                       return(INCLUDE);
+                       /* NOTREACHED */
+               }
+
+\}             {
+                       /* could be the last enum member initializer */
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       if (--braces <= 0) {
+               endstate:
+                               braces = 0;
+                               classdef = NO;
+                       }
+                       if (braces == 0 || (braces == 1 && classdef == YES)) {
+
+                               /* if the end of an enum/struct/union definition */
+                               if (esudef == YES) {
+                                       esudef = NO;
+                               }
+                               /* if the end of the function */
+                               else if (fcndef == YES) {
+                                       fcndef = NO;
+                                       last = first;
+                                       my_yymore();
+                                       return(FCNEND);
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+\(             {       /* count unmatched left parentheses for function templates */
+                       ++parens;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\)             {
+                       if (--parens <= 0) {
+                               parens = 0;
+                       }
+                       /* if the end of a function template */
+                       if (parens == templateparens) {
+                               templateparens = -1;
+                               template = NO;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+=              {       /* if a global definition initializer */
+                       if (!my_yytext)
+                               return(LEXERR);
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#') {
+                               initializerbraces = braces;
+                               initializer = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+:              {       /* a if global structure field */
+                       if (!my_yytext)
+                               return(LEXERR);
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#') {
+                               structfield = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\,             {
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       structfield = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+;              {       /* if the enum/struct/union was not a definition */
+                       if (braces == 0) {
+                               esudef = NO;
+                       }
+                       /* if the end of a typedef */
+                       if (braces == typedefbraces) {
+                               typedefbraces = -1;
+                       }
+                       /* if the end of a external definition */
+                       if (braces == externalbraces) {
+                               externalbraces = -1;
+                               external = NO;
+                       }
+                       structfield = NO;
+                       initializer = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>define{ws}+{identifier}    {
+                               
+                       /* preprocessor macro or constant definition */
+                       ppdefine = YES;
+                       token = DEFINE;
+                       if (compress == YES) {
+                               my_yytext[0] = '\1';    /* compress the keyword */
+                       }
+               findident:
+                       /* search backwards through yytext[] to find the identifier */
+                       /* NOTE: this had better be left to flex, by use of
+                        * yet another starting condition */
+                       my_yymore();
+                       first = my_yyleng - 1;
+                       while (my_yytext[first] != ' ' && my_yytext[first] != '\t') {
+                               --first;
+                       }
+                       ++first;
+                       last = my_yyleng;
+                       BEGIN(INITIAL);
+                       goto definition;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>\n {   /* unknown preprocessor line */
+                       BEGIN(INITIAL);
+                        ++myylineno;
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_PREPROC>.           |
+<IN_PREPROC>{identifier}       {   /* unknown preprocessor line */
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+class{wsnl}+{identifier}({wsnl}|{identifier}|[():])*\{ {       /* class definition */
+                       classdef = YES;
+                       tagdef =  'c';
+                       yyless(5);              /* eat up 'class', and re-scan */
+                       yy_set_bol(0);
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+("enum"|"struct"|"union")      {
+                       ident_start = first;
+                       BEGIN(WAS_ESU);
+                       goto more;
+               }
+<WAS_ESU>{
+({wsnl}+{identifier}){wsnl}*\{         { /* e/s/u definition */
+                       tagdef = my_yytext[ident_start];
+                       BEGIN(WAS_IDENTIFIER);
+                       goto ident;
+               }
+{wsnl}*\{              { /* e/s/u definition without a tag */
+                       tagdef = my_yytext[ident_start];
+                       BEGIN(INITIAL);
+                       if (braces == 0) {
+                               esudef = YES;
+                       }
+                       last = first;
+                       yyless(0);  /* re-scan all this as normal text */
+                       tagdef = '\0';
+                       goto more;
+               }
+({wsnl}+{identifier})?{wsnl}*  |   
+.|\n                                                                           {   /* e/s/u usage */
+                       BEGIN(WAS_IDENTIFIER);
+                       goto ident;
+               }
+}
+
+if{wsnl}*\(    {       /* ignore 'if' */
+                       yyless(2);
+                       yy_set_bol(0);
+                       goto more;
+}      
+
+{identifier}   {       /* identifier found: do nothing, yet. (!) */
+                       BEGIN(WAS_IDENTIFIER);
+                       ident_start = first;
+                       goto more;
+                       /* NOTREACHED */
+               }
+
+<WAS_IDENTIFIER>{       
+{ws}*\(({wsnl}|{identifier}|{number}|[*&[\]=,.:])*\)([()]|{wsnl})*[:a-zA-Z_#{] {
+                       /* a function definition */
+                       /* note: "#define a (b) {" and "#if defined(a)\n#" 
+                        * are not fcn definitions! */
+                       /* warning: "if (...)" must not overflow yytext, 
+                        * so the content of function argument definitions 
+                        * is restricted, in particular parentheses are 
+                        * not allowed */
+                       /* FIXME HBB 20001003: the above 'not allowed' may well be the
+                        * reason for the parsing bug concerning function pointer usage,
+                        * I suspect. --- I think my new special-case rule for 'if'
+                        * could be helpful in removing that limitation */
+                       if ((braces == 0 && ppdefine == NO && my_yytext[0] != '#' && rules == NO) ||
+                           (braces == 1 && classdef == YES)) {
+                               fcndef = YES;
+                               token = FCNDEF;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       goto fcncal;
+                       /* NOTREACHED */
+               }
+{ws}*\(([*&[\]=,.]|{identifier}|{number}|{wsnl})*              {       /* function call */
+               fcncal: if (fcndef == YES || ppdefine == YES || rules == YES) {
+                               token = FCNCALL;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       if (template == NO) {
+                               templateparens = parens;
+                               template = YES;
+                       }
+                       goto ident;
+                       /* NOTREACHED */
+               }
+("*"|{wsnl})+{identifier}              {       /* typedef name or modifier use */
+                       goto ident;
+                       /* NOTREACHED */
+               }
+.|\n   {               /* general identifer usage */
+                       char    *s;
+
+                       if (global == YES && ppdefine == NO && my_yytext[0] != '#' &&
+                           external == NO && initializer == NO && 
+                           arraydimension == NO && structfield == NO &&
+                           template == NO && fcndef == NO) {
+                               if (esudef == YES) {    
+                                       /* if enum/struct/union */
+                                       token = MEMBERDEF;
+                               } else {
+                                       token = GLOBALDEF;
+                               }
+                       } else {
+               ident:
+                               token = IDENT;
+                       }
+               fcn:
+                       if (YYSTATE == WAS_IDENTIFIER) {
+                               /* Position back to the actual identifier: */
+                               last = first; 
+                               first = ident_start;
+                               yyless(0);
+                               /* HBB 20001008: if the anti-backup-pattern above matched,
+                                * and the matched context ended with a \n, then the scanner
+                                * believes it's at the start of a new line. But the yyless()
+                                * should feeds that \n back into the input, so that's
+                                * wrong. --> force 'beginning-of-line' status off. */
+                               yy_set_bol(0);
+                               BEGIN(INITIAL);
+                       } else {
+                               my_yymore();
+                               last = my_yyleng;
+                       }
+               definition:
+
+                       /* if a long line */
+                       if (yyleng > STMTMAX) {
+                               int     c;
+                               
+                               /* skip to the end of the line */
+                               warning("line too long");
+                               while ((c = skipcomment_input()) > LEXEOF) { 
+                                       if (c == '\n') {
+                                               unput(c);
+                                               break;
+                                       }
+                               }
+                       }
+                       /* truncate a long symbol */
+                       if (yyleng > PATLEN) {
+                               warning("symbol too long");
+                               my_yyleng = first + PATLEN;
+                               my_yytext[my_yyleng] = '\0';
+                       }
+
+                       /* if found word was a keyword: */
+                       if ((s = lookup(my_yytext + first)) != NULL) {
+                               first = my_yyleng;
+                               
+                               /* if the start of a typedef */
+                               if (s == typedeftext) {
+                                       typedefbraces = braces;
+                                       oldtype = YES;
+                               }
+                               /* if an enum/struct/union */
+                               /* (needed for "typedef struct tag name;" so
+                                  tag isn't marked as the typedef name) */
+                               else if (s == enumtext || s == structtext || s == uniontext) {
+                                       /* do nothing */
+                               } else if (s == externtext) {
+                                       /* if an external definition */
+                                       externalbraces = braces;
+                                       external = YES;
+                               } else if (templateparens == parens && template == YES) {
+                                       /* keyword doesn't start a function 
+                                        * template */
+                                       templateparens = -1;
+                                       template = NO;
+                               } else {        
+                                       /* identifier after typedef was a 
+                                        * keyword */
+                                       oldtype = NO;
+                               }
+                       } else {        
+                               /* not a keyword --> found an identifier */
+                               /* last = yyleng; */
+                               
+                               /* if a class/enum/struct/union tag definition */
+                               /* FIXME HBB 20001001: why reject "class"? */
+                               if (tagdef && strnotequal(my_yytext + first, "class")) {
+                                       token = tagdef;
+                                       tagdef = '\0';
+                                       if (braces == 0) {
+                                               esudef = YES;
+                                       }
+                               } else if (braces == typedefbraces && oldtype == NO &&
+                                          arraydimension == NO) {
+                                       /* if a typedef name */
+                                       token = TYPEDEF;
+                               } else {
+                                       oldtype = NO;
+                               }
+                               /* my_yymore(); */
+                               return(token);
+                               /* NOTREACHED */
+                       }
+               }
+}
+
+\[             {       /* array dimension (don't worry or about subscripts) */
+                       arraydimension = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\]             {
+                       arraydimension = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\\\n           {       /* preprocessor statement is continued on next line */
+                       /* save the '\\' to the output file, but not the '\n': */
+                       yyleng = 1;
+                       my_yymore();
+                       goto eol;
+                       /* NOTREACHED */
+               }
+\n             {       /* end of the line */
+                       if (ppdefine == YES) {  /* end of a #define */
+                               ppdefine = NO;
+                               yyless(yyleng - 1);
+                               last = first;
+                               my_yymore();
+                               return(DEFINEEND);
+                       }
+                       /* skip the first 8 columns of a breakpoint listing line */
+                       /* and skip the file path in the page header */
+                       if (bplisting == YES) {
+                               int     c, i;
+
+                               /* FIXME HBB 20001007: should call input() instead */
+                               switch (skipcomment_input()) {  /* tab and EOF just fall through */
+                               case ' ':       /* breakpoint number line */
+                               case '[':
+                                       for (i = 1; i < 8 && skipcomment_input() > LEXEOF; ++i)
+                                               ;
+                                       break;
+                               case '.':       /* header line */
+                               case '/':
+                                       /* skip to the end of the line */
+                                       while ((c = skipcomment_input()) > LEXEOF) {
+                                               if (c == '\n') {
+                                                       unput(c);
+                                                       break;
+                                               }
+                                       }
+                                       break;
+                               case '\n':      /* empty line */
+                                       unput('\n');
+                                       break;
+                               }
+                       }
+               eol:
+                       ++myylineno;
+                       first = 0;
+                       last = 0;
+                       if (symbols > 0) {
+                               /* no my_yymore(): \n doesn't need to be in my_yytext */
+                               return(NEWLINE);
+                       }
+                       /* line ended --> flush my_yytext */
+                       if (my_yytext)
+                               *my_yytext = '\0';
+                       my_yyleng = 0;
+                       lineno = myylineno;
+               }
+
+\'             {       /* character constant */
+                       if (sdl == NO) 
+                               BEGIN(IN_SQUOTE);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_SQUOTE>\'  {       
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+\"             {       /* string constant */
+                       BEGIN(IN_DQUOTE);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_DQUOTE>\"  {       
+                       BEGIN(INITIAL);
+                       goto more;
+                       /* NOTREACHED */
+               }
+<IN_DQUOTE,IN_SQUOTE>{
+\n             {       /* syntax error: unexpected EOL */
+                       BEGIN(INITIAL);
+                       goto eol;
+                       /* NOTREACHED */
+               }
+\\.    |
+.              {
+                       goto more;
+                       /* NOTREACHED */
+               }
+\\\n   {               /* line continuation inside a string! */
+                       myylineno++;
+                       goto more;
+                       /* NOTREACHED */
+               }
+}
+       
+^{ws}+         {               /* don't save leading white space */
+               }
+               
+{ws}+\n        {               /* eat whitespace at end of line */
+                       unput('\n');
+               }
+
+[\t\r\v\f]+    {       /* eat non-blank whitespace sequences, replace
+                        * by single blank */
+                       unput(' ');
+               }
+
+{ws}{2,}       {   /* compress sequential whitespace here, not in putcrossref() */
+                       unput(' ');
+               }
+
+"/*"                                   yy_push_state(COMMENT);
+<COMMENT>{
+[^*\n]*                        |
+"*"+[^*/\n]*   ; /* do nothing */
+[^*\n]*\n              |
+"*"+[^*/\n]*\n {
+                       if (ppdefine == NO) {
+                               goto eol;
+                       } else {
+                               ++myylineno;
+                       }
+                       /* NOTREACHED */
+               }
+"*"+"/"                {
+                       /* replace the comment by a single blank */
+                       unput(' ');
+                       yy_pop_state();
+               }
+}              
+
+"//".*\n?              {
+                       /* C++-style one-line comment */
+                       goto eol;
+                       /* NOTREACHED */
+               }
+
+{number}                               |       /* number */
+<SDL>STATE[ \t]+               |   /* ... and other syntax error catchers... */
+.                                              {       /* punctuation and operators */
+                                               more:   
+                                                       my_yymore();
+                                                       first = my_yyleng;
+                                               }
+
+%%
+
+void
+initscanner(char *srcfile)
+{
+       char    *s;
+       
+       if (maxifbraces == NULL) {
+               maxifbraces = mymalloc(miflevel * sizeof(int));
+               preifbraces = mymalloc(miflevel * sizeof(int));
+       }
+       first = 0;              /* buffer index for first char of symbol */
+       last = 0;               /* buffer index for last char of symbol */
+       lineno = 1;             /* symbol line number */
+       myylineno = 1;          /* input line number */
+       arraydimension = NO;    /* inside array dimension declaration */
+       bplisting = NO;         /* breakpoint listing */
+       braces = 0;             /* unmatched left brace count */
+       classdef = NO;          /* c++ class definition */
+       elseelif = NO;          /* #else or #elif found */
+       esudef = NO;            /* enum/struct/union global definition */
+       external = NO;          /* external definition */
+       externalbraces = -1;    /* external definition outer brace count */
+       fcndef = NO;            /* function definition */
+       global = YES;           /* file global scope (outside functions) */
+       iflevel = 0;            /* #if nesting level */
+       initializer = NO;       /* data initializer */
+       initializerbraces = -1; /* data initializer outer brace count */
+       lex = NO;               /* lex file */
+       parens = 0;             /* unmatched left parenthesis count */
+       ppdefine = NO;          /* preprocessor define statement */
+       pseudoelif = NO;        /* pseudo-#elif */
+       oldtype = NO;           /* next identifier is an old type */
+       rules = NO;             /* lex/yacc rules */
+       sdl = NO;               /* sdl file */
+       structfield = NO;       /* structure field declaration */
+       tagdef = '\0';          /* class/enum/struct/union tag definition */
+       template = NO;          /* function template */
+       templateparens = -1;    /* function template outer parentheses count */
+       typedefbraces = -1;     /* initial typedef braces count */
+       ident_start = 0;        /* start of previously found identifier */
+
+       if (my_yytext)
+               *my_yytext = '\0';
+       my_yyleng = 0;
+       
+       BEGIN(INITIAL);
+
+       /* if this is not a C file */
+       if ((s = strrchr(srcfile, '.')) != NULL) {
+               switch (*++s) { /* this switch saves time on C files */
+               case 'b':
+                       if (strcmp(s, "bp") == 0) {     /* breakpoint listing */
+                               bplisting = YES;
+                       }
+                       break;
+               case 'l':
+                       if (strcmp(s, "l") == 0) {      /* lex */
+                               lex = YES;
+                               global = NO;
+                       }
+                       break;
+               case 's':
+                       if (strcmp(s, "sd") == 0) {     /* sdl */
+                               sdl = YES;
+                               BEGIN(SDL);
+                       }
+                       break;
+               case 'y':
+                       if (strcmp(s, "y") == 0) {      /* yacc */
+                               global = NO;
+                       }
+                       break;
+               }
+       }
+}
+
+#if !COMMENTS_BY_FLEX
+
+/* A micro-scanner that serves as the input() function of the
+ * scanner. It throws away any comments in the input, correctly
+ * avoiding doing this inside string/character constants, and knows
+ * about backslash sequences. Now that the main scanner doesn't use
+ * yymore() any longer, this could be replaced by lex rules. Left for
+ * trying later. */
+
+/* Status variable: If this is non-NUL, it's the character that
+* terminates a string we're currently in. */
+static int string_terminator = '\0';
+
+/* Helper routine: treat 'c' as a character found inside a
+ * string. Check if this character might be the end of that
+ * string. Backslashes have to be taken care of, for the sake of
+ * "quotes like \"these\" found inside a string". */
+static int
+insidestring_input(int c)
+{
+       static BOOL was_backslash = NO;
+       
+       if ((c == '\\') && (was_backslash == NO)) {
+               /* escape character found --> treat next char specially */
+               /* FIXME HBB 20001003: need treatment of backslash in the main
+                * scanner, too. It'll get false line counts in case of "\\'",
+                * otherwise --- they can occur as part of a lex pattern */
+               was_backslash = YES;
+               return c;
+       }
+
+       if (((c == '\t') && (lex == YES))
+           /* Note: "\\\n" is removed even inside strings! */
+           || ((c == '\n') && (was_backslash == NO))
+               || (c == EOF)
+               || ((c == string_terminator) && (was_backslash == NO))
+          ) {
+               /* Line ended, or end-of-string was found. That is a syntax
+                * error.  To recover, stop treatment as a string constant: */
+               string_terminator = '\0';
+       } else if (!isprint((unsigned char)c)) {
+               /* mask unprintable characters */
+               c = ' ';
+       }
+       
+       was_backslash = NO;
+       return c;
+}
+
+/* Helper function: skip over input until end of comment is found (or
+ * we find that it wasn't really comment, in the first place): */
+static int
+comment(void)
+{
+       int     c, lastc;
+
+       /* Coming here, we've just read in the opening '/' of a
+        * comment. */
+       do {
+               if ((c = getc(yyin)) == '*') {  /* C comment */
+                       lastc = '\0';
+                       while ((c = getc(yyin)) != EOF
+                                  /* fewer '/'s --> test them first! */
+                              && (c != '/' || lastc != '*')
+                             ) { 
+                               if (c == '\n') {
+                                       /* keep the line number count */
+                                       /* FIXME HBB 20001008: this is not synchronized
+                                        * properly with myylineno changes by the main
+                                        * scanner. A strong point in favour of moving
+                                        * this to lex-code that is, IMHO */
+                                       ++myylineno;
+                               }
+                               lastc = c;
+                       }
+                       /* return a blank for Reiser cpp token concatenation */
+                       /* FIXME HBB 20001008: what on earth is 'Reiser cpp'? ANSI
+                        * C defines cpp to explicitly replace any comment by a
+                        * blank. Pre-ANSI cpp's behaved differently, but do we
+                        * really want that? If at all, it should only ever be a
+                        * non-default option (like gcc's "-traditional-cpp")
+                        * */
+                       if ((c = getc(yyin)) == '_' || isalnum(c)) {
+                               (void) ungetc(c, yyin);
+                               c = ' ';
+                               break;
+                       }
+               } else if (c == '/') {          /* C++ comment */
+                       while ((c = getc(yyin)) != EOF && c != '\n') {
+                               ; /* do nothing else */
+                       }
+                       break;
+               } else {                                        /* not a comment */
+                       (void) ungetc(c, yyin);
+                       c = '/';
+                       break;
+                       /* NOTREACHED */
+               }
+               
+       /* there may be an immediately following comment */
+       } while (c == '/');
+       return(c);
+}
+
+/* The core of the actual input() function to be used by (f)lex. The
+ * calling scheme between this and the actual input() redefinition is
+ * a bit different for lex and flex. See the #ifdef FLEX_SCANNER part
+ * in the head section. */
+static int
+skipcomment_input(void)
+{
+       int     c;
+
+       c = getc (yyin);
+       if (string_terminator != '\0') {
+               /* don't look for comments inside strings! */
+               return insidestring_input(c);
+       } else if (c == '/') {
+               /* swallow everything until end of comment, if this is one */
+               return comment (); 
+       } else if (c == '"' || c == '\'') {
+               /* a string is beginning here, so switch input method */
+               string_terminator = c;
+       }
+       
+       return c;
+}
+
+#endif /* !COMMENTS_BY_FLEX */
+
+#define MY_YY_ALLOCSTEP 1000
+static void
+my_yymore(void)
+{
+       static size_t yytext_size = 0;
+       
+       /* my_yytext is an ever-growing buffer. It will not ever
+        * shrink, nor will it be freed at end of program, for now */
+       while (my_yyleng + yyleng + 1 >= yytext_size) {
+               my_yytext = myrealloc(my_yytext, 
+                                                 yytext_size += MY_YY_ALLOCSTEP);
+       }
+       
+       strncpy (my_yytext + my_yyleng, yytext, yyleng+1);
+       my_yyleng += yyleng;
+}
diff --git a/src/global.h b/src/global.h
new file mode 100644 (file)
index 0000000..cda29aa
--- /dev/null
@@ -0,0 +1,430 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: global.h,v 1.38 2012/03/05 19:28:13 nhorman Exp $ */
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     global type, data, and function definitions
+ */
+
+#ifndef CSCOPE_GLOBAL_H
+#define CSCOPE_GLOBAL_H
+
+#include "config.h"
+#include <unistd.h>
+#include <sys/types.h>
+#include <ctype.h>     /* isalpha, isdigit, etc. */
+#include <signal.h>    /* SIGINT and SIGQUIT */
+#include <stdio.h>     /* standard I/O package */
+#include <stdlib.h>     /* standard library functions */
+
+/* A special "magic" header file required by HP/Compaq NSK (Non-Stop
+ * Kernel) to present a more Unix-ish environment ... */
+#ifdef HAVE_FLOSS_H
+# include <floss.h>
+#endif
+
+/* Replace most of the #if BSD stuff. Taken straight from the autoconf
+ * manual, with an extension for handling memset(). */
+#if STDC_HEADERS
+# include <string.h>   /* string functions */
+#else
+# ifndef HAVE_STRCHR
+#  define strchr index
+#  define strrchr rindex
+# endif
+char *strchr (), *strrchr ();
+# ifndef HAVE_MEMCPY
+#  define memcpy(d, s, n) bcopy ((s), (d), (n))
+#  define memmove(d, s, n) bcopy ((s), (d), (n))
+# endif
+# ifndef HAVE_MEMSET
+#  ifndef HAVE_MEMORY_H
+char   *memset();
+#  else 
+#   include <memory.h> /* memset */
+#  endif /*V9*/
+# endif /* HAVE_MEMSET */
+#endif /* STDC_HEADERS */
+
+#include "constants.h" /* misc. constants */
+#include "invlib.h"    /* inverted index library */
+#include "library.h"   /* library function return values */
+
+/* Fallback, in case 'configure' failed to do its part of the job */
+#ifndef RETSIGTYPE
+#if SVR2 || BSD && !sun
+#define RETSIGTYPE int
+#else
+#define RETSIGTYPE void
+#endif
+#endif /* RETSIGTYPE */
+
+#ifndef HAVE_SIGHANDLER_T
+typedef RETSIGTYPE (*sighandler_t)(int);
+#endif
+
+#if HAVE_STDARG_H
+#include <stdarg.h>
+#if !HAVE_VSNPRINTF
+int rpl_vsnprintf(char *, size_t, const char *, va_list);
+#endif
+#if !HAVE_SNPRINTF
+int rpl_snprintf(char *, size_t, const char *, ...);
+#endif
+#if !HAVE_VASPRINTF
+int rpl_vasprintf(char **, const char *, va_list);
+#endif
+#if !HAVE_ASPRINTF
+int rpl_asprintf(char **, const char *, ...);
+#endif
+#endif /* HAVE_STDARG_H */
+
+/* FIXME: this testing for platforms is foolish. Stop it! */
+#if BSD
+# undef        tolower         /* BSD toupper and tolower don't test the character */
+# undef        toupper
+# define       tolower(c)      (isupper(c) ? (c) - 'A' + 'a' : (c))    
+# define       toupper(c)      (islower(c) ? (c) - 'a' + 'A' : (c))
+# if !sun 
+#  if !__FreeBSD__
+/* in traditional BSD, *printf() doesn't return the number of bytes
+ * written */
+#   define PRINTF_RETVAL_BROKEN 1
+#  endif /* !FreeBSD */
+# endif /* !sun */
+#endif
+
+/* Un-comment this if you're on a filesystem that doesn't support
+ * filenames longer than 14 characters */
+/* HBB FIXME 20030302: should have an autoconf test for this: */
+/* #define SHORT_NAMES_ONLY */
+
+/* Just in case autoconf didn't correctly flag HAVE_FIXKEYPAD */
+#ifndef HAVE_FIXKEYPAD 
+# if SVR2 && !BSD && !V9 && !u3b2 && !sun
+#  define HAVE_FIXKEYPAD
+# endif
+#endif
+
+/* HBB 20020728: if <fcntl.h> is there, #include it here, since that's
+ * where the system definitions of O_TEXT should be coming from */
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
+/* HBB 20020103: Need to force text or binary mode opens on Cygwins,
+ * because of their "binary/text mode mount" silliness :-( */
+#ifndef O_TEXT
+# ifdef _O_TEXT
+#  define O_TEXT _O_TEXT
+# else
+#  define O_TEXT 0x00
+# endif
+#endif
+/* Same for binary mode --- moved here from vp.h */
+#ifndef O_BINARY
+# ifdef _O_BINARY
+#  define O_BINARY _O_BINARY
+# else
+#  define O_BINARY 0x00
+# endif
+#endif 
+
+#undef SETMODE
+#if O_BINARY || O_TEXT
+/* OK, looks like we are on an MSDOS-ish platform ---> define SETMODE
+ * to actually do something */
+# ifdef HAVE_SETMODE
+#  define SETMODE(fildes, mode) setmode(fildes,mode)
+# else 
+#  ifdef HAVE__SETMODE
+#   define SETMODE(fildes, mode) _setmode(fildes,mode)
+#  endif
+# endif
+#endif
+
+/* access(2) parameters. Only make assumptions about their values if
+ * <unistd.h> fails to define them. */
+#ifdef R_OK
+# define       READ    R_OK
+#else
+# define       READ    4       
+#endif
+#ifdef W_OK
+# define       WRITE   W_OK
+#else
+# define       WRITE   2
+#endif
+
+/* This can happen on only vaguely Unix-ish platforms... */
+#ifndef HAVE_LSTAT
+# define       lstat(file,buf) stat(file,buf)
+#endif
+
+typedef        enum    {               /* boolean data type */
+       NO,
+       YES
+} BOOL;
+
+typedef        enum    {               /* findinit return code */
+       NOERROR,
+       NOTSYMBOL,
+       REGCMPERROR
+} FINDINIT;
+
+typedef        struct {                /* mouse action */
+       int     button;
+       int     percent;
+       int     x1;
+       int     y1;
+       int     x2;
+       int     y2;
+} MOUSE;
+
+struct cmd {                   /* command history struct */
+       struct  cmd *prev, *next;       /* list ptrs */
+       int     field;                  /* input field number */
+       char    *text;                  /* input field text */
+};
+
+/* digraph data for text compression */
+extern char    dichar1[];      /* 16 most frequent first chars */
+extern char    dichar2[];      /* 8 most frequent second chars 
+                                  using the above as first chars */
+extern char    dicode1[];      /* digraph first character code */
+extern char    dicode2[];      /* digraph second character code */
+
+/* and some macros to help using dicodes: */
+/* Check if a given pair of chars is compressable as a dicode: */
+#define IS_A_DICODE(inchar1, inchar2)                                     \
+  (dicode1[(unsigned char)(inchar1)] && dicode2[(unsigned char)(inchar2)])
+/* Combine the pair into a dicode */
+#define DICODE_COMPRESS(inchar1, inchar2)              \
+  ((0200 - 2) + dicode1[(unsigned char)(inchar1)]      \
+   + dicode2[(unsigned char)(inchar2)])
+
+/* main.c global data */
+extern char    *editor, *home, *shell, *lineflag;      /* environment variables */
+extern char    *home;          /* Home directory */
+extern         BOOL    lineflagafterfile;
+extern char    *argv0;         /* command name */
+extern BOOL    compress;       /* compress the characters in the crossref */
+extern BOOL    dbtruncated;    /* database symbols truncated to 8 chars */
+extern int     dispcomponents; /* file path components to display */
+#if CCS
+extern BOOL    displayversion; /* display the C Compilation System version */
+#endif
+extern BOOL    editallprompt;  /* prompt between editing files */
+extern unsigned int fileargc;  /* file argument count */
+extern char    **fileargv;     /* file argument values */
+extern int     fileversion;    /* cross-reference file version */
+extern BOOL    incurses;       /* in curses */
+extern BOOL    invertedindex;  /* the database has an inverted index */
+extern BOOL    isuptodate;     /* consider the crossref up-to-date */
+extern BOOL    kernelmode;     /* don't use DFLT_INCDIR - bad for kernels */
+extern BOOL    linemode;       /* use line oriented user interface */
+extern BOOL    verbosemode;    /* print extra information on line mode */
+extern BOOL    recurse_dir;    /* recurse dirs when searching for src files */
+extern char    *namefile;      /* file of file names */
+extern BOOL    ogs;            /* display OGS book and subsystem names */
+extern char    *prependpath;   /* prepend path to file names */
+extern FILE    *refsfound;     /* references found file */
+extern char    temp1[];        /* temporary file name */
+extern char    temp2[];        /* temporary file name */
+extern long    totalterms;     /* total inverted index terms */
+extern BOOL    trun_syms;      /* truncate symbols to 8 characters */
+extern char    tempstring[TEMPSTRING_LEN + 1]; /* global dummy string buffer */
+extern char    *tmpdir;        /* temporary directory */
+
+/* command.c global data */
+extern BOOL    caseless;       /* ignore letter case when searching */
+extern BOOL    *change;        /* change this line */
+extern BOOL    changing;       /* changing text */
+extern int     selecting;
+extern unsigned int curdispline;
+extern char    newpat[];       /* new pattern */
+extern char    Pattern[];      /* symbol or text pattern */
+
+/* crossref.c global data */
+extern long    dboffset;       /* new database offset */
+extern BOOL    errorsfound;    /* prompt before clearing error messages */
+extern long    lineoffset;     /* source line database offset */
+extern long    npostings;      /* number of postings */
+extern unsigned long symbols;  /* number of symbols */
+
+/* dir.c global data */
+extern char    currentdir[];   /* current directory */
+extern char    **incdirs;      /* #include directories */
+extern char    **srcdirs;      /* source directories */
+extern char    **srcfiles;     /* source files */
+extern unsigned long nincdirs; /* number of #include directories */
+extern unsigned long nsrcdirs; /* number of source directories */
+extern unsigned long nsrcfiles; /* number of source files */
+extern unsigned long msrcfiles; /* maximum number of source files */
+
+/* display.c global data */
+extern         int     booklen;        /* OGS book name display field length */
+extern int     *displine;      /* screen line of displayed reference */
+extern unsigned int disprefs;  /* displayed references */
+extern int     fcnlen;         /* function name display field length */
+extern int     field;          /* input field */
+extern int     filelen;        /* file name display field length */
+extern unsigned fldcolumn;     /* input field column */
+extern unsigned int mdisprefs; /* maximum displayed references */
+extern unsigned int nextline;  /* next line to be shown */
+extern FILE    *nonglobalrefs; /* non-global references file */
+extern int     numlen;         /* line number display field length */
+extern unsigned int topline;   /* top line of page */
+extern int     bottomline;     /* bottom line of page */
+extern long    searchcount;    /* count of files searched */
+extern int     subsystemlen;   /* OGS subsystem name display field length */
+extern unsigned int totallines; /* total reference lines */
+extern const char dispchars[]; /* display chars for jumping to lines */
+
+/* find.c global data */
+extern char    block[];        /* cross-reference file block */
+extern char    blockmark;      /* mark character to be searched for */
+extern long    blocknumber;    /* block number */
+extern char    *blockp;        /* pointer to current character in block */
+extern int     blocklen;       /* length of disk block read */
+
+/* lookup.c global data */
+extern struct  keystruct {
+       char    *text;
+       char    delim;
+       struct  keystruct *next;
+} keyword[];
+
+/* mouse.c global data */
+extern BOOL    mouse;          /* mouse interface */
+
+#if UNIXPC
+extern BOOL    unixpcmouse;            /* UNIX PC mouse interface */
+#endif
+
+/* cscope functions called from more than one function or between files */ 
+
+char   *filepath(char *file);
+char   *findcalledby(char *pattern);
+char   *findcalling(char *pattern);
+char   *findallfcns(char *dummy);
+char   *finddef(char *pattern);
+char   *findfile(char *dummy);
+char   *findinclude(char *pattern);
+char   *findsymbol(char *pattern);
+char   *findassign(char *pattern);
+char   *findregexp(char *egreppat);
+char   *findstring(char *pattern);
+char   *inviewpath(char *file);
+char   *lookup(char *ident);
+char   *pathcomponents(char *path, int components);
+char   *read_block(void);
+char   *scanpast(char c);
+
+
+void   addcmd(int f, char *s);
+void   addsrcfile(char *path);
+void   askforchar(void);
+void   askforreturn(void);
+void   atchange(void);
+void   atfield(void);
+void   cannotwrite(char *file);
+void   cannotopen(char *file);
+void   clearmsg(void);
+void   clearmsg2(void);
+void   countrefs(void);
+void   crossref(char *srcfile);
+void    dispinit(void);
+void   display(void);
+void   drawscrollbar(int top, int bot);
+void   edit(char *file, char *linenum);
+void   editall(void);
+void   editref(int);
+void   entercurses(void);
+void   exitcurses(void);
+void   findcleanup(void);
+void    freesrclist(void);
+void    freeinclist(void);
+void    freecrossref(void);
+void   freefilelist(void);
+void   help(void);
+void   incfile(char *file, char *type);
+void    includedir(char *_dirname);
+void    initsymtab(void);
+void   makefilelist(void);
+void   mousecleanup(void);
+void   mousemenu(void);
+void   mouseinit(void);
+void   mousereinit(void);
+void   myexit(int sig);
+void   myperror(char *text);
+void   ogsnames(char *file, char **subsystem, char **book);
+void   progress(char *what, long current, long max);
+void   putfilename(char *srcfile);
+void   postmsg(char *msg);
+void   postmsg2(char *msg);
+void   posterr(char *msg,...);
+void   postfatal(const char *msg,...);
+void   putposting(char *term, int type);
+void   fetch_string_from_dbase(char *, size_t);
+void   resetcmd(void);
+void   seekline(unsigned int line);
+void   setfield(void);
+void   shellpath(char *out, int limit, char *in);
+void    sourcedir(char *dirlist);
+void   myungetch(int c);
+void   warning(char *text);
+void   writestring(char *s);
+
+BOOL   command(int commandc);
+BOOL   infilelist(char *file);
+BOOL   readrefs(char *filename);
+BOOL   search(void);
+BOOL   writerefsfound(void);
+
+FINDINIT findinit(char *pattern);
+MOUSE  *getmouseaction(char leading_char);
+struct cmd *currentcmd(void);
+struct cmd *prevcmd(void);
+struct cmd *nextcmd(void);
+
+int    egrep(char *file, FILE *output, char *format);
+int    mygetline(char p[], char s[], unsigned size, int firstchar, BOOL iscaseless);
+int    mygetch(void);
+int    hash(char *ss);
+int    execute(char *a, ...);
+long   dbseek(long offset);
+
+
+#endif /* CSCOPE_GLOBAL_H */
diff --git a/src/gmacs.ml b/src/gmacs.ml
new file mode 100644 (file)
index 0000000..514e542
--- /dev/null
@@ -0,0 +1,65 @@
+       ; ===========================================================================
+       ; Copyright (c) 1998-2000, The Santa Cruz Operation 
+       ; All rights reserved.
+       ; Redistribution and use in source and binary forms, with or without
+       ; modification, are permitted provided that the following conditions are met:
+
+       ; *Redistributions of source code must retain the above copyright notice,
+       ; this list of conditions and the following disclaimer.
+
+       ; *Redistributions in binary form must reproduce the above copyright notice,
+       ; this list of conditions and the following disclaimer in the documentation
+       ; and/or other materials provided with the distribution.
+
+       ; *Neither name of The Santa Cruz Operation nor the names of its contributors
+       ; may be used to endorse or promote products derived from this software
+       ; without specific prior written permission. 
+
+       ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+       ; IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+       ; THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+       ; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+       ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+       ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+       ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+       ; INTERRUPTION)
+       ; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+       ; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+       ; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+       ; DAMAGE. 
+       ; =========================================================================
+       ; $Id: gmacs.ml,v 1.1 2000/04/27 16:33:47 petr Exp $ 
+
+
+       ; cscope.ml (s.cscope.ml) - 1.4 (2/21/84 14:53:58)
+       ;
+       ; Macro to handle invocation of gmacs by cscope from the
+       ; experimental tools.  Cscope invokes gmacs with two arguments:
+       ;
+       ;       gmacs +line file
+       ;
+       ; This macro gobbles the line number, visits the specified file,
+       ; and moves to the specified line number.
+
+(progn
+       args
+       pluses
+       (setq pluses 0)
+       (setq args (argc))
+       (if (> args 1)
+               (progn
+                       (if (= (string-to-char "+") (string-to-char (argv 1)))
+                               (setq pluses 1)
+                       )
+                       (setq args (- args 1))
+                       (while (> args pluses)
+                               (visit-file (argv args))
+                               (setq args (- args 1))
+                       )
+                       (if (= (> (argc) 2) (> pluses 0))
+                               (goto-line (argv 1))
+                       )
+               )
+       )
+)
diff --git a/src/gscope.c b/src/gscope.c
new file mode 100644 (file)
index 0000000..f26f1b1
--- /dev/null
@@ -0,0 +1 @@
+/* Placeholder file --- replace by real gscope.c if you have it */
\ No newline at end of file
diff --git a/src/help.c b/src/help.c
new file mode 100644 (file)
index 0000000..26d1db7
--- /dev/null
@@ -0,0 +1,151 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     display help
+ *
+ */
+
+#include "global.h"
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+/*
+       max num of lines of help screen -
+       this number needs to be increased if more than n help items are needed
+*/
+#define MAXHELP        50      /* maximum number of help strings */
+
+static char const rcsid[] = "$Id: help.c,v 1.6 2005/04/29 18:44:31 broeker Exp $";
+
+void
+help(void)
+{
+       char    **ep, *s, **tp, *text[MAXHELP]; 
+       int     ln;
+
+       tp = text;
+       if (changing == NO) {
+               if (mouse) {
+                       *tp++ = "Point with the mouse and click button 1 to move to the desired input field,\n";
+                       *tp++ = "type the pattern to search for, and then press the RETURN key.  For the first 4\n";
+                       *tp++ = "and last 2 input fields, the pattern can be a regcomp(3) regular expression.\n";
+                       *tp++ = "If the search is successful, you can edit the file containing a displayed line\n";
+                       *tp++ = "by pointing with the mouse and clicking button 1.\n";
+                       *tp++ = "\nYou can either use the button 2 menu or these single-character commands:\n\n";
+               } else {
+                       *tp++ = "Press the RETURN key repeatedly to move to the desired input field, type the\n";
+                       *tp++ = "pattern to search for, and then press the RETURN key.  For the first 4 and\n";
+                       *tp++ = "last 2 input fields, the pattern can be a regcomp(3) regular expression.\n";
+                       *tp++ = "If the search is successful, you can use these single-character commands:\n\n";
+                       *tp++ = "0-9a-zA-Z\tEdit the file containing the displayed line.\n";
+               }
+               *tp++ = "space bar\tDisplay next set of matching lines.\n";
+               *tp++ = "+\t\tDisplay next set of matching lines.\n";
+               *tp++ = "^V\t\tDisplay next set of matching lines.\n";
+               *tp++ = "-\t\tDisplay previous set of matching lines.\n";
+               *tp++ = "^E\t\tEdit all lines.\n";
+               *tp++ = ">\t\tWrite the list of lines being displayed to a file.\n";
+               *tp++ = ">>\t\tAppend the list of lines being displayed to a file.\n";
+               *tp++ = "<\t\tRead lines from a file.\n";
+               *tp++ = "^\t\tFilter all lines through a shell command.\n";
+               *tp++ = "|\t\tPipe all lines to a shell command.\n";
+               if (!mouse) {
+                       *tp++ = "\nAt any time you can use these single-character commands:\n\n";
+                       *tp++ = "TAB\t\tSwap positions between input and output areas.\n";
+                       *tp++ = "RETURN\t\tMove to the next input field.\n";
+                       *tp++ = "^N\t\tMove to the next input field.\n";
+                       *tp++ = "^P\t\tMove to the previous input field.\n";
+               }
+               *tp++ = "^Y / ^A\t\tSearch with the last pattern typed.\n";
+               *tp++ = "^B\t\tRecall previous input field and search pattern.\n";
+               *tp++ = "^F\t\tRecall next input field and search pattern.\n";
+               if(caseless)
+                       *tp++ = "^C\t\tToggle ignore/use letter case when searching (IGNORE).\n";
+               else
+                       *tp++ = "^C\t\tToggle ignore/use letter case when searching (USE).\n";
+               *tp++ = "^R\t\tRebuild the cross-reference.\n";
+               *tp++ = "!\t\tStart an interactive shell (type ^D to return to cscope).\n";
+               *tp++ = "^L\t\tRedraw the screen.\n";
+               *tp++ = "?\t\tDisplay this list of commands.\n";
+               *tp++ = "^D\t\tExit cscope.\n";
+               *tp++ = "\nNote: If the first character of the pattern you want to search for matches\n";
+               *tp++ = "a command, type a \\ character first.\n";
+               *tp++ = "Note: Some ctrl keys may be occupied by your terminal configuration.\n";
+       } else {
+               if (mouse) {
+                       *tp++ = "Point with the mouse and click button 1 to mark or unmark the line to be\n";
+                       *tp++ = "changed.  You can also use the button 2 menu or these single-character\n";
+                       *tp++ = "commands:\n\n";
+               }
+               else {
+                       *tp++ = "When changing text, you can use these single-character commands:\n\n";
+                       *tp++ = "0-9a-zA-Z\tMark or unmark the line to be changed.\n";
+               }
+               *tp++ = "*\t\tMark or unmark all displayed lines to be changed.\n";
+               *tp++ = "space bar\tDisplay next set of lines.\n";
+               *tp++ = "+\t\tDisplay next set of lines.\n";
+               *tp++ = "-\t\tDisplay previous set of lines.\n";
+               *tp++ = "^A\t\tMark or unmark all lines to be changed.\n";
+               *tp++ = "^D\t\tChange the marked lines and exit.\n";
+               *tp++ = "ESC\t\tExit without changing the marked lines.\n";
+               *tp++ = "!\t\tStart an interactive shell (type ^D to return to cscope).\n";
+               *tp++ = "^L\t\tRedraw the screen.\n";
+               *tp++ = "?\t\tDisplay this list of commands.\n";
+       }
+       /* print help, a screen at a time */
+       ep = tp;
+       ln = 0;
+       for (tp = text; tp < ep; ) {
+               if (ln < LINES - 1) {
+                       for (s = *tp; *s != '\0'; ++s) {
+                               if (*s == '\n') {
+                                       ++ln;
+                               }
+                       }
+                       (void) addstr(*tp++);
+               }
+               else {
+                       (void) addstr("\n");
+                       askforchar();
+                       (void) clear();
+                       ln = 0;
+               }
+       }
+       if (ln) {
+               (void) addstr("\n");
+               askforchar();
+       }
+}
diff --git a/src/history.c b/src/history.c
new file mode 100644 (file)
index 0000000..3733c26
--- /dev/null
@@ -0,0 +1,105 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol or text cross-reference
+ *
+ *     command history
+ */
+
+#include "global.h"
+
+#include "alloc.h"
+
+static char const rcsid[] = "$Id: history.c,v 1.3 2006/07/23 20:59:20 broeker Exp $";
+
+static struct cmd *tail, *current;
+
+/* add a cmd to the history list */
+void
+addcmd(int f, char *s)         /* field number and command text */
+{
+       struct cmd *h;
+
+       h = mymalloc(sizeof(struct cmd));
+       if( tail) {
+               tail->next = h;
+               h->next = 0;
+               h->prev = tail;
+               tail = h;
+       } else {
+               tail = h;
+               h->next = h->prev = 0;
+       }
+       h->field = f;
+       h->text = my_strdup( s);
+       current = 0;
+}
+
+\f/* return previous history item */
+struct cmd *
+prevcmd(void)
+{
+       if( current) {
+               if( current->prev)      /* stay on first item */
+                       return current = current->prev;
+               else
+                       return current;
+       } else if( tail)
+               return current = tail;
+       else 
+               return NULL;
+}
+
+\f/* return next history item */
+struct cmd *
+nextcmd(void)
+{
+       if( current) {
+               if( current->next)      /* stay on first item */
+                       return current = current->next;
+               else
+                       return current;
+       } else 
+               return NULL;
+}
+\f/* reset current to tail */
+void
+resetcmd(void)
+{
+       current = 0;
+}
+
+struct cmd *
+currentcmd(void)
+{
+       return current;
+}
diff --git a/src/input.c b/src/input.c
new file mode 100644 (file)
index 0000000..79d7431
--- /dev/null
@@ -0,0 +1,335 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     terminal input functions
+ */
+
+#include "global.h"
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#include <setjmp.h>    /* jmp_buf */
+#include <stdlib.h>
+#include <errno.h>
+#if HAVE_SYS_TERMIOS_H
+#include <sys/termios.h>
+#endif
+
+static char const rcsid[] = "$Id: input.c,v 1.15 2006/08/20 15:00:34 broeker Exp $";
+
+static jmp_buf env;            /* setjmp/longjmp buffer */
+static int     prevchar;       /* previous, ungotten character */
+
+/* Internal prototypes: */
+static RETSIGTYPE catchint(int sig);
+
+/* catch the interrupt signal */
+
+/*ARGSUSED*/
+static RETSIGTYPE
+catchint(int sig)
+{
+       (void) sig;             /* 'use' it, to avoid a warning */
+
+       signal(SIGINT, catchint);
+       longjmp(env, 1);
+}
+
+/* unget a character */
+void
+myungetch(int c)
+{
+       prevchar = c;
+}
+
+/* get a character from the terminal */
+int
+mygetch(void)
+{
+    sighandler_t savesig; /* old value of signal */
+    int c;
+
+    /* change an interrupt signal to a break key character */
+    if (setjmp(env) == 0) {
+       savesig = signal(SIGINT, catchint);
+       refresh();      /* update the display */
+       mousereinit();  /* curses can change the menu number */
+       if(prevchar) {
+           c = prevchar;
+           prevchar = 0;
+       } else {
+           c = -1;
+           while (c == -1) {
+               /* get a character from the terminal */
+               c = getch();
+               if ((c == -1) && (errno != EINTR))
+                   break;
+           }
+       }
+    } else {   /* longjmp to here from signal handler */
+       c = KEY_BREAK;
+    }
+    signal(SIGINT, savesig);
+    return(c);
+}
+
+
+/* get a line from the terminal in non-canonical mode */
+int
+mygetline(char p[], char s[], unsigned size, int firstchar, BOOL iscaseless)
+{
+    int        c;
+    unsigned int i = 0, j;
+    char *sright;      /* substring to the right of the cursor */
+    unsigned int ri = 0;               /* position in right-string */
+
+    /* Inserts and deletes are always performed on the left-string,
+     * but we'll also have a right-string 'sright' to hold characters
+     * which are on the right of the cursor [insertion point].
+     *
+     * Think of 'sright' as a stack -- we push chars into it when the cursor
+     * moves left, and we pop chars off it when the cursor moves right again.
+     * At the end of the function, we'll pop off any remaining characters
+     * onto the end of 's'
+     */
+    sright = calloc(sizeof(char), size );
+
+    strcpy ( s, p);
+    i += strlen(p);
+    /* if a character already has been typed */
+    if (firstchar != '\0') {
+       if(iscaseless == YES) {
+           firstchar = tolower(firstchar);
+       }
+       addch(firstchar);       /* display it */
+       s[i++] = firstchar;     /* save it */
+    }
+    /* until the end of the line is reached */
+    while ((c = mygetch()) != '\r' && c != '\n' && c != KEY_ENTER) {
+       if (c == KEY_LEFT || c == ctrl('B')) {  /* left */
+           if (i > 0) {
+               addch('\b');
+               /* move this char into the second (rhs) string */
+               sright[ri++] = s[--i];
+           }
+       } else if (c == KEY_RIGHT || c == ctrl('F')) {  /* right */
+           if (i < size && ri > 0) {
+               /* move this char to the left of the cursor */
+               s[i++] = sright[--ri];
+               addch(s[i-1]);
+           }
+       } else if (
+#ifdef KEY_HOME
+                  c == KEY_HOME ||
+#endif
+                  c == ctrl('A') ) {
+           while (i > 0) {
+               sright[ri++] = s[--i];
+               addch('\b');
+               addch(s[i]);
+               addch('\b');
+           }
+       } else if (
+#ifdef KEY_END
+                  c == KEY_END ||
+#endif
+                  c == ctrl('E') ) {
+           while (ri > 0) {
+               s[i++] = sright[--ri];
+               addch(s[i-1]);
+           }
+       } else if (c == erasechar() || c == KEY_BACKSPACE
+                  || c == DEL || c == ctrl('H') ) {
+           /* erase */
+           if (i > 0) {
+               if (ri == 0)  {
+                   addstr("\b \b");
+               } else {
+                   addch('\b');
+                   delch();
+               }
+               s[i] = '\0';
+               --i;
+           }
+       } else if (c == killchar() || c == KEY_BREAK) {
+           /* kill */
+           for (j = 0; j < i; ++j) {
+               addch('\b');
+           }
+           for (j = 0; j < i; ++j) {
+               addch(' ');
+           }
+           for (j = 0; j < i; ++j) {
+               addch('\b');
+           }
+           i = 0;
+       } else if (isprint(c) || c == '\t') {
+           /* printable */
+           if(iscaseless == YES) {
+               c = tolower(c);
+           }
+           /* if it will fit on the line */
+           if (i < size) {
+               s[i++] = c;     /* save it */
+               if (ri == 0) {
+                   addch(c);   /* display it */
+               } else {
+                   insch(c);   /* display it */
+                   addch(c);   /* advance cursor */
+               }
+           }
+#if UNIXPC
+       } else if (unixpcmouse == YES && c == ESC) {    /* mouse */
+           getmouseaction(ESC);        /* ignore it */
+#endif
+       } else if (mouse == YES && c == ctrl('X')) {
+           getmouseaction(ctrl('X'));  /* ignore it */
+       } else if (c == EOF) {                          /* end-of-file */
+           break;
+       }
+
+       /* return on an empty line to allow a command to be entered */
+       if (firstchar != '\0' && (i+ri) == 0) {
+           break;
+       }
+    }
+
+    /* move any remaining chars on the rhs of the cursor
+     * onto the end of our string
+     */
+    while (ri > 0) {
+       s[i++] = sright[--ri];
+    }
+    free(sright);
+
+    s[i] = '\0';
+    return(i);
+}
+
+/* ask user to enter a character after reading the message */
+
+void
+askforchar(void)
+{
+    addstr("Type any character to continue: ");
+    mygetch();
+}
+
+/* ask user to press the RETURN key after reading the message */
+
+void
+askforreturn(void)
+{
+    fprintf(stderr, "Press the RETURN key to continue: ");
+    getchar();
+    /* HBB 20060419: message probably messed up the screen --- redraw */
+    if (incurses == YES) {
+       redrawwin(curscr);
+    }
+}
+
+/* expand the ~ and $ shell meta characters in a path */
+
+void
+shellpath(char *out, int limit, char *in) 
+{
+    char       *lastchar;
+    char       *s, *v;
+
+    /* skip leading white space */
+    while (isspace((unsigned char)*in)) {
+       ++in;
+    }
+    lastchar = out + limit - 1;
+
+    /* a tilde (~) by itself represents $HOME; followed by a name it
+       represents the $LOGDIR of that login name */
+    if (*in == '~') {
+       *out++ = *in++; /* copy the ~ because it may not be expanded */
+
+       /* get the login name */
+       s = out;
+       while (s < lastchar && *in != '/' && *in != '\0' && !isspace((unsigned char)*in)) {
+           *s++ = *in++;
+       }
+       *s = '\0';
+
+       /* if the login name is null, then use $HOME */
+       if (*out == '\0') {
+           v = getenv("HOME");
+       } else {        /* get the home directory of the login name */
+           v = logdir(out);
+       }
+       /* copy the directory name if it isn't too big */
+       if (v != NULL && strlen(v) < (lastchar - out)) {
+           strcpy(out - 1, v);
+           out += strlen(v) - 1;
+       } else {
+           /* login not found, so ~ must be part of the file name */
+           out += strlen(out);
+       }
+    }
+    /* get the rest of the path */
+    while (out < lastchar && *in != '\0' && !isspace((unsigned char)*in)) {
+
+       /* look for an environment variable */
+       if (*in == '$') {
+           *out++ = *in++;     /* copy the $ because it may not be expanded */
+
+           /* get the variable name */
+           s = out;
+           while (s < lastchar && *in != '/' && *in != '\0' &&
+                  !isspace((unsigned char)*in)) {
+               *s++ = *in++;
+           }
+           *s = '\0';
+       
+           /* get its value, but only it isn't too big */
+           if ((v = getenv(out)) != NULL && strlen(v) < (lastchar - out)) {
+               strcpy(out - 1, v);
+               out += strlen(v) - 1;
+           } else {
+               /* var not found, or too big, so assume $ must be part of the
+                * file name */
+               out += strlen(out);
+           }
+       }
+       else {  /* ordinary character */
+           *out++ = *in++;
+       }
+    }
+    *out = '\0';
+}
diff --git a/src/invlib.c b/src/invlib.c
new file mode 100644 (file)
index 0000000..872ca38
--- /dev/null
@@ -0,0 +1,1186 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#if SHARE
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#define ERR  -1
+#endif
+#include "invlib.h"
+#include "global.h"
+
+#include <assert.h>
+
+#define        DEBUG           0       /* debugging code and realloc messages */
+#define BLOCKSIZE      2 * BUFSIZ      /* logical block size */
+#define        POSTINC         10000   /* posting buffer size increment */
+#define SEP            ' '     /* sorted posting field separator */
+#define        SETINC          100     /* posting set size increment */
+#define        STATS           0       /* print statistics */
+#define        SUPERINC        10000   /* super index size increment */
+#define        TERMMAX         512     /* term max size */
+#define        FMTVERSION      1       /* inverted index format version */
+#define        ZIPFSIZE        200     /* zipf curve size */
+
+static char const rcsid[] = "$Id: invlib.c,v 1.21 2012/07/10 20:01:40 nhorman Exp $";
+
+#if DEBUG
+/* FIXME HBB 20010705: nowhere in the source is `invbreak' ever set to
+ * a value other than the (silent) initialization to zero. Pretty
+ * useless, that looks */
+int    invbreak;
+#endif
+
+static int     boolready(void);
+static int     invnewterm(void);
+static void    invstep(INVCONTROL *invcntl);
+static void    invcannotalloc(unsigned n);
+static void    invcannotopen(char *file);
+static void    invcannotwrite(char *file);
+
+#if STATS
+int    showzipf;       /* show postings per term distribution */
+#endif
+
+static POSTING *item, *enditem, *item1 = NULL, *item2 = NULL;
+static unsigned setsize1, setsize2;
+static long    numitems, totterm, zerolong;
+static char    *indexfile, *postingfile;
+static FILE    *outfile, *fpost;
+static unsigned supersize = SUPERINC, supintsize;
+static  unsigned int numpost, numlogblk, amtused, nextpost;
+static  unsigned int lastinblk, numinvitems;
+static POSTING *POST, *postptr;
+static unsigned long   *SUPINT, *supint, nextsupfing;
+static char    *SUPFING, *supfing;
+static char    thisterm[TERMMAX];
+typedef union logicalblk {
+       long    invblk[BLOCKSIZE / sizeof(long)];
+       char    chrblk[BLOCKSIZE];
+} t_logicalblk;
+static t_logicalblk logicalblk;
+
+#if DEBUG || STATS
+static long    totpost;
+#endif
+
+#if STATS
+static int     zipf[ZIPFSIZE + 1];
+#endif
+
+long
+invmake(char *invname, char *invpost, FILE *infile)
+{
+       unsigned char   *s;
+       long    num;
+       int     i;
+       long    fileindex = 0;  /* initialze, to avoid warning */
+       unsigned postsize = POSTINC * sizeof(POSTING);
+       unsigned long   *intptr;
+       char    line[TERMMAX];
+       long    tlong;
+       PARAM   param;
+       POSTING posting;
+       char    temp[BLOCKSIZE];
+#if STATS
+       int     j;
+       unsigned maxtermlen = 0;
+#endif
+       /* output file */
+       if ((outfile = vpfopen(invname, "w+b")) == NULL) {
+               invcannotopen(invname);
+               return(0);
+       }
+       indexfile = invname;
+       fseek(outfile, BUFSIZ, SEEK_SET);
+
+       /* posting file  */
+       if ((fpost = vpfopen(invpost, "wb")) == NULL) {
+               invcannotopen(invpost);
+               return(0);
+       }
+       postingfile = invpost;
+       nextpost = 0;
+       /* get space for the postings list */
+       if ((POST = malloc(postsize)) == NULL) {
+               invcannotalloc(postsize);
+               return(0);
+       }
+       postptr = POST;
+       /* get space for the superfinger (superindex) */
+       if ((SUPFING = malloc(supersize)) == NULL) {
+               invcannotalloc(supersize);
+               return(0);
+       }
+       supfing = SUPFING;
+       /* FIXME HBB: magic number alert (40) */
+       supintsize = supersize / 40;
+       /* also for the superfinger index */
+       if ((SUPINT = malloc(supintsize * sizeof(long))) == NULL) {
+               invcannotalloc(supintsize * sizeof(long));
+               return(0);
+       }
+       supint = SUPINT;
+       supint++; /* leave first term open for a count */
+       /* initialize using an empty term */
+       strcpy(thisterm, "");
+       *supint++ = 0;
+       *supfing++ = ' ';
+       *supfing++ = '\0';
+       nextsupfing = 2;
+#if DEBUG || STATS
+       totpost = 0L;
+#endif
+       totterm = 0L;
+       numpost = 1;
+
+       /* set up as though a block had come and gone, i.e., set up for new block  */
+       /* 3 longs needed for: numinvitems, next block, and previous block */
+       amtused = 3 * sizeof(long);
+       numinvitems = 0;
+       numlogblk = 0;
+       lastinblk = sizeof(t_logicalblk);
+
+       /* now loop as long as more to read (till eof)  */
+       while (fgets(line, TERMMAX, infile) != NULL) {
+#if DEBUG || STATS
+               ++totpost;
+#endif
+               s = strchr(line, SEP);
+               if (s != NULL) {
+                       *s = '\0';
+               }
+               else {
+                       continue;
+               }
+#if STATS
+               if ((i = strlen(line)) > maxtermlen) {
+                       maxtermlen = i;
+               }
+#endif
+#if DEBUG
+               printf("%ld: %s ", totpost, line);
+               fflush(stdout);
+#endif
+               if (strcmp(thisterm, line) == 0) {
+                       if (postptr + 10 > POST + postsize / sizeof(POSTING)) {
+                               i = postptr - POST;
+                               postsize += POSTINC * sizeof(POSTING);
+                               if ((POST = realloc(POST, postsize)) == NULL) {
+                                       invcannotalloc(postsize);
+                                       return(0);
+                               }
+                               postptr = i + POST;
+#if DEBUG
+                               printf("reallocated post space to %u, totpost=%ld\n",
+                                      postsize, totpost);
+#endif
+                       }
+                       numpost++;
+               } else {
+                       /* have a new term */
+                       if (!invnewterm()) {
+                               return(0);
+                       }
+                       strcpy(thisterm, line);
+                       numpost = 1;
+                       postptr = POST;
+                       fileindex = 0;
+               }
+               /* get the new posting */
+               num = *++s - '!';
+               i = 1;
+               do {
+                       num = BASE * num + *++s - '!';
+               } while (++i < PRECISION);
+               posting.lineoffset = num;
+               while (++fileindex < nsrcfiles && num > srcoffset[fileindex]) {
+                       ;
+               }
+               posting.fileindex = --fileindex;
+               posting.type = *++s;
+               ++s;
+               if (*s != '\n') {
+                       num = *++s - '!';
+                       while (*++s != '\n') {
+                               num = BASE * num + *s - '!';
+                       }
+                       posting.fcnoffset = num;
+               }
+               else {
+                       posting.fcnoffset = 0;
+               }
+               *postptr++ = posting;
+#if DEBUG
+               printf("%ld %ld %ld %ld\n", posting.fileindex,
+                      posting.fcnoffset, posting.lineoffset, posting.type);
+               fflush(stdout);
+#endif
+       }
+       if (!invnewterm()) {
+               return(0);
+       }
+       /* now clean up final block  */
+       logicalblk.invblk[0] = numinvitems;
+       /* loops pointer around to start */
+       logicalblk.invblk[1] = 0;
+       logicalblk.invblk[2] = numlogblk - 1;
+       if (fwrite(&logicalblk, sizeof(t_logicalblk), 1, outfile) == 0) {
+               goto cannotwrite;
+       }
+       numlogblk++;
+       /* write out block to save space. what in it doesn't matter */
+       if (fwrite(&logicalblk, sizeof(t_logicalblk), 1, outfile) == 0) {
+               goto cannotwrite;
+       }
+       /* finish up the super finger */
+       *SUPINT = numlogblk;
+       /* add to the offsets the size of the offset pointers */
+       intptr = (SUPINT + 1);
+       i = (char *)supint - (char *)SUPINT;
+       while (intptr < supint)
+               *intptr++ += i;
+       /* write out the offsets (1 for the N at start) and the super finger */
+       if (fwrite(SUPINT, sizeof(*SUPINT), numlogblk + 1, outfile) == 0 ||
+           fwrite(SUPFING, 1, supfing - SUPFING, outfile) == 0) {
+               goto cannotwrite;
+       }
+       /* save the size for reference later */
+       nextsupfing = sizeof(long) + sizeof(long) * numlogblk + (supfing - SUPFING);
+       /* make sure the file ends at a logical block boundary.  This is 
+       necessary for invinsert to correctly create extended blocks 
+        */
+       i = nextsupfing % sizeof(t_logicalblk);
+       /* write out junk to fill log blk */
+       if (fwrite(temp, sizeof(t_logicalblk) - i, 1, outfile) == 0 ||
+           fflush(outfile) == EOF) {   /* rewind doesn't check for write failure */
+               goto cannotwrite;
+       }
+       /* write the control area */
+       rewind(outfile);
+       param.version = FMTVERSION;
+       param.filestat = 0;
+       param.sizeblk = sizeof(t_logicalblk);
+       param.startbyte = (numlogblk + 1) * sizeof(t_logicalblk) + BUFSIZ;;
+       param.supsize = nextsupfing;
+       param.cntlsize = BUFSIZ;
+       param.share = 0;
+       if (fwrite(&param, sizeof(param), 1, outfile) == 0) {
+               goto cannotwrite;
+       }
+       for (i = 0; i < 10; i++)        /* for future use */
+               if (fwrite(&zerolong, sizeof(zerolong), 1, outfile) == 0) {
+                       goto cannotwrite;
+               }
+
+       /* make first block loop backwards to last block */
+       if (fflush(outfile) == EOF) {   /* fseek doesn't check for write failure */
+               goto cannotwrite;
+       }
+       /* get to second word first block */
+       fseek(outfile, BUFSIZ + 2 * sizeof(long), SEEK_SET);
+       tlong = numlogblk - 1;
+       if (fwrite(&tlong, sizeof(tlong), 1, outfile) == 0 ||
+           fclose(outfile) == EOF) {
+       cannotwrite:
+               invcannotwrite(invname);
+               return(0);
+       }
+       if (fclose(fpost) == EOF) {
+               invcannotwrite(postingfile);
+               return(0);
+       }
+       --totterm;      /* don't count null term */
+#if STATS
+       printf("logical blocks = %d, postings = %ld, terms = %ld, max term length = %d\n",
+           numlogblk, totpost, totterm, maxtermlen);
+       if (showzipf) {
+               printf("\n*************   ZIPF curve  ****************\n");
+               for (j = ZIPFSIZE; j > 1; j--)
+                       if (zipf[j]) 
+                               break;
+               for (i = 1; i < j; ++i) {
+                       printf("%3d -%6d ", i, zipf[i]);
+                       if (i % 6 == 0) putchar('\n');
+               }
+               printf(">%d-%6d\n", ZIPFSIZE, zipf[0]);
+       }
+#endif
+       /* free all malloc'd memory */
+       free(POST);
+       free(SUPFING);
+       free(SUPINT);
+       return(totterm);
+}
+
+/* add a term to the data base */
+
+static int
+invnewterm(void)
+{
+    int        backupflag, i, j, holditems, gooditems, howfar;
+    unsigned int maxback, len, numwilluse, wdlen;
+    char       *tptr, *tptr3;
+
+    union {
+       unsigned long   packword[2];
+       ENTRY           e;
+    } iteminfo;
+
+    gooditems = 0;             /* initialize, to avoid warning */
+    totterm++;
+#if STATS
+    /* keep zipfian info on the distribution */
+    if (numpost <= ZIPFSIZE)
+       zipf[numpost]++;
+    else
+       zipf[0]++;
+#endif
+    len = strlen(thisterm);
+    /* length of term rounded up to long boundary */
+    wdlen = (len + (sizeof(long) - 1)) / sizeof(long);
+    /* each term needs 2 longs for its iteminfo and
+     * 1 long for its offset */
+    numwilluse = (wdlen + 3) * sizeof(long);
+    /* new block if at least 1 item in block */
+    if (numinvitems && numwilluse + amtused > sizeof(t_logicalblk)) {
+       /* set up new block */
+       if (supfing + 500 > SUPFING + supersize) {
+           i = supfing - SUPFING;
+           supersize += 20000;
+           if ((SUPFING = (char *)realloc(SUPFING, supersize)) == NULL) {
+               invcannotalloc(supersize);
+               return(0);
+           }
+           supfing = i + SUPFING;
+#if DEBUG
+           printf("reallocated superfinger space to %d, totpost=%ld\n", 
+                  supersize, totpost);
+#endif
+       }
+       /* check that room for the offset as well */
+       /* FIXME HBB: magic number alert (10) */
+       if ((numlogblk + 10) > supintsize) {
+           i = supint - SUPINT;
+           supintsize += SUPERINC;
+           if ((SUPINT = realloc(SUPINT, supintsize * sizeof(long))) == NULL) {
+               invcannotalloc(supintsize * sizeof(long));
+               return(0);
+           }
+           supint = i + SUPINT;
+#if DEBUG
+           printf("reallocated superfinger offset to %d, totpost = %ld\n",
+                  supintsize * sizeof(long), totpost);
+#endif
+       }
+       /* See if backup is efficatious  */
+       backupflag = 0;
+       maxback = (int) strlen(thisterm) / 10;
+       holditems = numinvitems;
+       if (maxback > numinvitems)
+           maxback = numinvitems - 2;
+       howfar = 0;
+       while (maxback-- > 1) {
+           howfar++;
+           iteminfo.packword[0] =
+               logicalblk.invblk[--holditems * 2 + (sizeof(long) - 1)];
+           if ((i = iteminfo.e.size / 10) < maxback) {
+               maxback = i;
+               backupflag = howfar;
+               gooditems = holditems;
+           }
+       }
+       /* see if backup will occur  */
+       if (backupflag) {
+           numinvitems = gooditems;
+       }
+       logicalblk.invblk[0] = numinvitems;
+       /* set forward pointer pointing to next */
+       logicalblk.invblk[1] = numlogblk + 1; 
+       /* set back pointer to last block */
+       logicalblk.invblk[2] = numlogblk - 1;
+       if (fwrite(logicalblk.chrblk, 1, sizeof(t_logicalblk), outfile) == 0) {
+           invcannotwrite(indexfile);
+           return(0);
+       }
+       /* 3 longs needed for: numinvitems, next block, and previous block */
+       amtused = 3 * sizeof(long);
+       numlogblk++;
+       /* check if had to back up, if so do it */
+       if (backupflag) {
+           char *tptr2;
+           
+           /* find out where the end of the new block is */
+           iteminfo.packword[0] = logicalblk.invblk[numinvitems*2+1];
+           tptr3 = logicalblk.chrblk + iteminfo.e.offset;
+           /* move the index for this block */
+           for (i = 3; i <= (backupflag * 2 + 2); i++)
+               logicalblk.invblk[i] = logicalblk.invblk[numinvitems*2+i];
+           /* move the word into the super index */
+           iteminfo.packword[0] = logicalblk.invblk[3];
+           iteminfo.packword[1] = logicalblk.invblk[4];
+           tptr2 = logicalblk.chrblk + iteminfo.e.offset;
+           strncpy(supfing, tptr2, (int) iteminfo.e.size);
+           *(supfing + iteminfo.e.size) = '\0';
+#if DEBUG
+           printf("backup %d at term=%s to term=%s\n",
+                  backupflag, thisterm, supfing);
+#endif
+           *supint++ = nextsupfing;
+           nextsupfing += strlen(supfing) + 1;
+           supfing += strlen(supfing) + 1;
+           /* now fix up the logical block */
+           tptr = logicalblk.chrblk + lastinblk;
+           lastinblk = sizeof(t_logicalblk);
+           tptr2 = logicalblk.chrblk + lastinblk;
+           j = tptr3 - tptr;
+           while (tptr3 > tptr)
+               *--tptr2 = *--tptr3;
+           lastinblk -= j;
+           amtused += ((2 * sizeof(long)) * backupflag + j);
+           for (i = 3; i < (backupflag * 2 + 2); i += 2) {
+               iteminfo.packword[0] = logicalblk.invblk[i];
+               iteminfo.e.offset += (tptr2 - tptr3);
+               logicalblk.invblk[i] = iteminfo.packword[0];
+           }
+           numinvitems = backupflag;
+       } else { /* no backup needed */
+           numinvitems = 0;
+           lastinblk = sizeof(t_logicalblk);
+           /* add new term to superindex */
+           strcpy(supfing, thisterm);
+           supfing += strlen(thisterm) + 1;
+           *supint++ = nextsupfing;
+           nextsupfing += strlen(thisterm) + 1;
+       }
+    }
+    /* HBB 20010501: Fixed bug by replacing magic number '8' by
+     * what it actually represents. */
+    lastinblk -= (numwilluse - 2 * sizeof(long));
+    iteminfo.e.offset = lastinblk;
+    iteminfo.e.size = len;
+    iteminfo.e.space = 0;
+    iteminfo.e.post = numpost;
+    strncpy(logicalblk.chrblk + lastinblk, thisterm, len);
+    amtused += numwilluse;
+    logicalblk.invblk[(lastinblk/sizeof(long))+wdlen] = nextpost;
+    if ((i = postptr - POST) > 0) {
+       if (fwrite(POST, sizeof(POSTING), i, fpost) == 0) {
+           invcannotwrite(postingfile);
+           return(0);
+       }
+       nextpost += i * sizeof(POSTING);
+    }
+    logicalblk.invblk[3+2*numinvitems++] = iteminfo.packword[0];
+    logicalblk.invblk[2+2*numinvitems] = iteminfo.packword[1];
+    return(1);
+}
+
+/* 
+ * If 'invname' ends with the 'from' substring, it is replaced inline with the
+ * 'to' substring (which must be of the exact same length), and the function
+ * returns 0. Otherwise, returns -1.  
+ */
+
+static int 
+invflipname(char * invname, const char *from, const char *to)
+{
+       char *temp, *i = NULL;
+
+       assert(strlen(from) == strlen(to));
+
+       temp = invname - 1;
+       while( (temp = strstr(temp + 1, from)))
+               i = temp;
+       if (!i || i[strlen(from)] != '\0')
+               return -1;
+       while(*to)
+               *i++ = *to++;
+       return 0;
+}
+
+int
+invopen(INVCONTROL *invcntl, char *invname, char *invpost, int stat)
+{
+       int     read_index;
+
+       if ((invcntl->invfile = vpfopen(invname, ((stat == 0) ? "rb" : "r+b"))) == NULL) {
+               /* If db created without '-f', but now invoked with '-f cscope.out',
+                * we need to check for 'cscope.in.out', rather than 'cscope.out.in': 
+                * I.e, hack around our own violation of the inverse db naming convention */
+               if (!invflipname(invname, INVNAME2, INVNAME)) {
+                       if ((invcntl->invfile = vpfopen(invname, ((stat == 0) ? "rb" : "r+b")))) 
+                               goto openedinvname;
+                       invflipname(invname, INVNAME, INVNAME2); /* change back for err msg */
+               } 
+               /* more silliness: if you create the db with '-f cscope', then try to open 
+                * it without '-f cscope', you'll fail unless we check for 'cscope.out.in'
+                * here. */
+               else if (!invflipname(invname, INVNAME, INVNAME2)) {
+                       if ((invcntl->invfile = vpfopen(invname, ((stat == 0) ? "rb" : "r+b")))) 
+                               goto openedinvname;
+                       invflipname(invname, INVNAME2, INVNAME); /* change back for err msg */
+               }       
+               invcannotopen(invname);
+               return(-1);
+       }
+openedinvname:
+       if (fread(&invcntl->param, sizeof(invcntl->param), 1, invcntl->invfile) == 0) {
+               fprintf(stderr, "%s: empty inverted file\n", argv0);
+               goto closeinv;
+       }
+       if (invcntl->param.version != FMTVERSION) {
+               fprintf(stderr, "%s: cannot read old index format; use -U option to force database to rebuild\n", argv0);
+               goto closeinv;
+       }
+       assert(invcntl->param.sizeblk == sizeof(t_logicalblk));
+
+       if (stat == 0 && invcntl->param.filestat == INVALONE) {
+               fprintf(stderr, "%s: inverted file is locked\n", argv0);
+               goto closeinv;
+       }
+       if ((invcntl->postfile = vpfopen(invpost, ((stat == 0) ? "rb" : "r+b"))) == NULL) {
+               /* exact same naming convention hacks as above for invname */
+               if (!invflipname(invpost, INVPOST2, INVPOST)) {
+                       if ((invcntl->postfile = vpfopen(invpost, ((stat == 0) ? "rb" : "r+b")))) 
+                               goto openedinvpost;
+                       invflipname(invpost, INVPOST, INVPOST2); /* change back for err msg */
+               } else if (!invflipname(invpost, INVPOST, INVPOST2)) {
+                       if ((invcntl->postfile = vpfopen(invpost,((stat == 0)?"rb":"r+b")))) 
+                               goto openedinvpost;
+                       invflipname(invpost, INVPOST2, INVPOST); /* change back for err msg */
+               }
+               invcannotopen(invpost);
+               goto closeinv;
+       }
+openedinvpost:
+       /* allocate core for a logical block  */
+       if ((invcntl->logblk = malloc((unsigned) invcntl->param.sizeblk)) == NULL) {
+               invcannotalloc((unsigned) invcntl->param.sizeblk);
+               goto closeboth;
+       }
+       /* allocate for and read in superfinger  */
+       read_index = 1;
+       invcntl->iindex = NULL;
+#if SHARE
+       if (invcntl->param.share == 1) {
+               key_t shm_key;
+               struct shmid_ds shm_buf;
+               int     shm_id;
+
+               /* see if the shared segment exists */
+               shm_key = ftok(invname, 2);
+               shm_id = shmget(shm_key, 0, 0);
+               /* Failure simply means (hopefully) that segment doesn't exists */
+               if (shm_id == -1) {
+                       /* Have to give general write permission due to AMdahl not having protected segments */
+                       shm_id = shmget(shm_key, invcntl->param.supsize + sizeof(long), IPC_CREAT | 0666);
+                       if (shm_id == -1)
+                               perror("Could not create shared memory segment");
+               } else
+                       read_index = 0;
+
+               if (shm_id != -1) {
+                       invcntl->iindex = shmat(shm_id, 0, ((read_index) ? 0 : SHM_RDONLY));
+                       if (invcntl->iindex == (char *)ERR) {
+                               fprintf(stderr, "%s: shared memory link failed\n", argv0);
+                               invcntl->iindex = NULL;
+                               read_index = 1;
+                       }
+               }
+       }
+#endif
+       if (invcntl->iindex == NULL)
+               /* FIXME HBB: magic number alert (4) */
+               invcntl->iindex = malloc((unsigned) invcntl->param.supsize
+                                        + 4 *sizeof(long));
+       if (invcntl->iindex == NULL) {
+               invcannotalloc((unsigned) invcntl->param.supsize);
+               free(invcntl->logblk);
+               goto closeboth;
+       }
+       if (read_index) {
+               fseek(invcntl->invfile, invcntl->param.startbyte, SEEK_SET);
+               fread(invcntl->iindex, (int) invcntl->param.supsize, 1,
+                     invcntl->invfile);
+       }
+       invcntl->numblk = -1;
+       if (boolready() == -1) {
+       closeboth:
+               fclose(invcntl->postfile);
+       closeinv:
+               fclose(invcntl->invfile);
+               return(-1);
+       }
+       /* write back out the control block if anything changed */
+       invcntl->param.filestat = stat;
+       if (stat > invcntl->param.filestat ) {
+               rewind(invcntl->invfile);
+               fwrite(&invcntl->param, sizeof(invcntl->param), 1, invcntl->invfile);
+       }
+       return(1);
+}
+
+/** invclose must be called to wrap things up and deallocate core  **/
+void
+invclose(INVCONTROL *invcntl)
+{
+       /* write out the control block in case anything changed */
+       if (invcntl->param.filestat > 0) {
+               invcntl->param.filestat = 0;
+               rewind(invcntl->invfile);
+               fwrite(&invcntl->param, 1,
+                   sizeof(invcntl->param), invcntl->invfile);
+       }
+       if (invcntl->param.filestat == INVALONE) {
+               /* write out the super finger */
+               fseek(invcntl->invfile, invcntl->param.startbyte, SEEK_SET);
+               fwrite(invcntl->iindex, 1,
+                      (int) invcntl->param.supsize, invcntl->invfile);
+       }
+       fclose(invcntl->invfile);
+       fclose(invcntl->postfile);
+#if SHARE
+       if (invcntl->param.share > 0) {
+               shmdt(invcntl->iindex);
+               invcntl->iindex = NULL;
+       }
+#endif
+       if (invcntl->iindex != NULL)
+               free(invcntl->iindex);
+       free(invcntl->logblk);
+}
+
+/** invstep steps the inverted file forward one item **/
+static void
+invstep(INVCONTROL *invcntl)
+{
+       if (invcntl->keypnt < (invcntl->logblk->invblk[0] - 1)) {
+               invcntl->keypnt++; 
+               return;
+       }
+
+       /* move forward a block else wrap */
+       invcntl->numblk = invcntl->logblk->invblk[1]; /* was: *(int *)(invcntl->logblk + sizeof(long))*/                           
+
+       /* now read in the block  */
+       fseek(invcntl->invfile,
+             invcntl->numblk*invcntl->param.sizeblk + invcntl->param.cntlsize,
+             SEEK_SET);
+       fread(invcntl->logblk, (int) invcntl->param.sizeblk, 1,
+             invcntl->invfile); 
+       invcntl->keypnt = 0; 
+}
+
+/** invforward moves forward one term in the inverted file  **/
+int
+invforward(INVCONTROL *invcntl)
+{
+       invstep(invcntl); 
+       /* skip things with 0 postings */
+       /* FIXME HBB: magic number alert! (3) */
+       while (((ENTRY * )(invcntl->logblk->invblk + 3) + invcntl->keypnt)->post == 0) {
+               invstep(invcntl); 
+       }
+       /* Check for having wrapped - reached start of inverted file! */
+       if ((invcntl->numblk == 0) && (invcntl->keypnt == 0))
+               return(0);
+       return(1);
+}
+
+/**  invterm gets the present term from the present logical block  **/
+long
+invterm(INVCONTROL *invcntl, char *term)
+{
+       ENTRY * entryptr;
+
+       /* FIXME HBB: magic number alert! (3) */
+       entryptr = (ENTRY *)(invcntl->logblk->invblk + 3) + invcntl->keypnt;
+       strncpy(term, invcntl->logblk->chrblk + entryptr->offset,
+                      (int) entryptr->size);
+       *(term + entryptr->size) = '\0';
+       return(entryptr->post);
+}
+
+/** invfind searches for an individual item in the inverted file  **/
+long
+invfind(INVCONTROL *invcntl, char *searchterm) /* term being searched for  */
+{
+       int     imid, ilow, ihigh;
+       long    num;
+       int     i;
+       unsigned long   *intptr, *intptr2;
+       ENTRY *entryptr;
+
+       /* make sure it is initialized via invready  */
+       if (invcntl->invfile == 0)
+               return(-1L);
+
+       /* now search for the appropriate finger block */
+       intptr = (unsigned long *)invcntl->iindex;
+
+       ilow = 0;
+       ihigh = *intptr++ - 1;
+       while (ilow <= ihigh) {
+               imid = (ilow + ihigh) / 2;
+               intptr2 = intptr + imid;
+               i = strcmp(searchterm, (invcntl->iindex + *intptr2));
+               if (i < 0)
+                       ihigh = imid - 1;
+               else if (i > 0)
+                       ilow = ++imid;
+               else {
+                       ilow = imid + 1;
+                       break;
+               }
+       }
+       /* be careful about case where searchterm is after last in this block  */
+       imid = (ilow) ? ilow - 1 : 0;
+
+       /* fetch the appropriate logical block if not in core  */
+       /* note always fetch it if the file is busy */
+       if ((imid != invcntl->numblk) || (invcntl->param.filestat >= INVBUSY)) {
+               fseek(invcntl->invfile,
+                     (imid*invcntl->param.sizeblk) + invcntl->param.cntlsize,
+                     SEEK_SET);
+               invcntl->numblk = imid;
+               fread(invcntl->logblk, (int)invcntl->param.sizeblk, 1,
+                     invcntl->invfile);
+       }
+
+srch_ext:
+       /* now find the term in this block. tricky this  */
+       intptr = (unsigned long *) invcntl->logblk->invblk;
+
+       ilow = 0;
+       ihigh = *intptr - 1;
+       intptr += 3;
+       num = 0;
+       while (ilow <= ihigh) {
+               imid = (ilow + ihigh) / 2;
+               entryptr = (ENTRY *)intptr + imid;
+               i = strncmp(searchterm, invcntl->logblk->chrblk + entryptr->offset,
+                   (int) entryptr->size );
+               if (i == 0)
+                       i = strlen(searchterm) - entryptr->size;
+               if (i < 0)
+                       ihigh = imid - 1;
+               else if (i > 0)
+                       ilow = ++imid;
+               else {
+                       num = entryptr->post;
+                       break;
+               }
+       }
+       /* be careful about case where searchterm is after last in this block  */
+       if (imid >= invcntl->logblk->invblk[0]) {
+               invcntl->keypnt = invcntl->logblk->invblk[0];
+               invstep(invcntl);
+               /* note if this happens the term could be in extended block */
+               if (invcntl->param.startbyte < invcntl->numblk * invcntl->param.sizeblk)
+                       goto srch_ext;
+       } else
+               invcntl->keypnt = imid;
+       return(num);
+}
+
+#if DEBUG
+
+/** invdump dumps the block the term parameter is in **/
+void
+invdump(INVCONTROL *invcntl, char *term)
+{
+       long    i, j, n, *longptr;
+       ENTRY * entryptr;
+       char    temp[512], *ptr;
+
+       /* dump superindex if term is "-"  */
+       if (*term == '-') {
+               j = atoi(term + 1);
+               longptr = (long *)invcntl->iindex;
+               n = *longptr++;
+               printf("Superindex dump, num blocks=%ld\n", n);
+               longptr += j;
+               while ((longptr <= ((long *)invcntl->iindex) + n) && invbreak == 0) {
+                       printf("%2ld  %6ld %s\n", j++, *longptr, invcntl->iindex + *longptr);
+                       longptr++;
+               }
+               return;
+       } else if (*term == '#') {
+               j = atoi(term + 1);
+               /* fetch the appropriate logical block */
+               invcntl->numblk = j;
+               fseek(invcntl->invfile,
+                     (j * invcntl->param.sizeblk) + invcntl->param.cntlsize,
+                     SEEK_SET);
+               fread(invcntl->logblk, (int) invcntl->param.sizeblk, 1,
+                     invcntl->invfile);
+       } else
+               i = abs((int) invfind(invcntl, term));
+       longptr = invcntl->logblk->invblk;
+       n = *longptr++;
+       printf("Entry term to invdump=%s, postings=%ld, forwrd ptr=%ld, back ptr=%ld\n"
+           , term, i, *(longptr), *(longptr + 1));
+       /* FIXME HBB: magic number alert! (3) */
+       entryptr = (ENTRY *) (invcntl->logblk->invblk + 3);
+       printf("%ld terms in this block, block=%ld\n", n, invcntl->numblk);
+       printf("\tterm\t\t\tposts\tsize\toffset\tspace\t1st word\n");
+       for (j = 0; j < n && invbreak == 0; j++) {
+               ptr = invcntl->logblk->chrblk + entryptr->offset;
+               strncpy(temp, ptr, (int) entryptr->size);
+               temp[entryptr->size] = '\0';
+               ptr += (sizeof(long) * (long)((entryptr->size + (sizeof(long) - 1)) / sizeof(long)));
+               printf("%2ld  %-24s\t%5ld\t%3d\t%d\t%d\t%ld\n", j, temp, entryptr->post,
+                   entryptr->size, entryptr->offset, entryptr->space,
+                   *(long *)ptr);
+               entryptr++;
+       }
+}
+#endif
+
+static int
+boolready(void)
+{
+       numitems = 0;
+       if (item1 != NULL) 
+               free(item1);
+       setsize1 = SETINC;
+       if ((item1 = malloc(SETINC * sizeof(POSTING))) == NULL) {
+               invcannotalloc(SETINC);
+               return(-1);
+       }
+       if (item2 != NULL) 
+               free(item2);
+       setsize2 = SETINC;
+       if ((item2 = malloc(SETINC * sizeof(POSTING))) == NULL) {
+               invcannotalloc(SETINC);
+               return(-1);
+       }
+       item = item1;
+       enditem = item;
+       return(0);
+}
+
+void
+boolclear(void)
+{
+       numitems = 0;
+       item = item1;
+       enditem = item;
+}
+
+POSTING *
+boolfile(INVCONTROL *invcntl, long *num, int boolarg)
+{
+       ENTRY   *entryptr;
+       FILE    *file;
+       void    *ptr;
+       unsigned long   *ptr2;
+       POSTING *newitem = NULL; /* initialize, to avoid warning */
+       POSTING posting;
+       unsigned u;
+       POSTING *newsetp = NULL, *set1p;
+       long    newsetc, set1c, set2c;
+
+       /* FIXME HBB: magic number alert! (3) */
+       entryptr = (ENTRY *) (invcntl->logblk->invblk + 3) + invcntl->keypnt;
+       ptr = invcntl->logblk->chrblk + entryptr->offset;
+       ptr2 = ((unsigned long *) ptr) + (entryptr->size + (sizeof(long) - 1)) / sizeof(long);
+       *num = entryptr->post;
+       switch (boolarg) {
+       case BOOL_OR:
+       case NOT:
+               if (*num == 0) {
+                       *num = numitems;
+                       return(item);
+               }
+       }
+       /* make room for the new set */
+       u = 0;
+       switch (boolarg) {
+       case AND:
+       case NOT:
+               newsetp = item;
+               break;
+
+       case BOOL_OR:
+               u = enditem - item;
+               /* FALLTHROUGH */
+       case REVERSENOT:
+               u += *num;
+               if (item == item2) {
+                       if (u > setsize1) {
+                               u += SETINC;
+                               if ((item1 = realloc(
+                                   item1, u * sizeof(POSTING))) == NULL) {
+                                       goto cannotalloc;
+                               }
+                               setsize1 = u;
+                       }
+                       newitem = item1;
+               }
+               else {
+                       if (u > setsize2) {
+                               u += SETINC;
+                               if ((item2 = realloc( 
+                                   item2, u * sizeof(POSTING))) == NULL) {
+                               cannotalloc:
+                                       invcannotalloc(u * sizeof(POSTING));
+                                       boolready();
+                                       *num = -1;
+                                       return(NULL);
+                               }
+                               setsize2 = u;
+                       }
+                       newitem = item2;
+               }
+#if 0 /* this write is only need by commented-out code later */
+               set1p = item;
+#endif
+               newsetp = newitem;
+       }
+       file = invcntl->postfile;
+       fseek(file, *ptr2, SEEK_SET);
+       fread(&posting, sizeof(posting), 1, file);
+       newsetc = 0;
+       switch (boolarg) {
+       case BOOL_OR:
+               /* while something in both sets */
+               set1p = item;
+               newsetp = newitem;
+               for (set1c = 0, set2c = 0;
+                   set1c < numitems && set2c < *num; newsetc++) {
+                       if (set1p->lineoffset < posting.lineoffset) {
+                               *newsetp++ = *set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->lineoffset > posting.lineoffset) {
+                               *newsetp++ = posting;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else if (set1p->type < posting.type) {
+                               *newsetp++ = *set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->type > posting.type) {
+                               *newsetp++ = posting;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else {  /* identical postings */
+                               *newsetp++ = *set1p++;
+                               set1c++;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+               }
+               /* find out what ran out and move the rest in */
+               if (set1c < numitems) {
+                       newsetc += numitems - set1c;
+                       while (set1c++ < numitems) {
+                               *newsetp++ = *set1p++;
+                       }
+               } else {
+                       while (set2c++ < *num) {
+                               *newsetp++ = posting;
+                               newsetc++;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                       }
+               }
+               item = newitem;
+               break; /* end of BOOL_OR */
+#if 0
+       case AND:
+               for (set1c = 0, set2c = 0; set1c < numitems && set2c < *num; ) {
+                       if (set1p->lineoffset < posting.lineoffset) {
+                               set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->lineoffset > posting.lineoffset) {
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else if (set1p->type < posting.type)  {
+                               *set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->type > posting.type) {
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else {  /* identical postings */
+                               *newsetp++ = *set1p++;
+                               newsetc++;
+                               set1c++;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+               }
+               break; /* end of AND */
+
+       case NOT:
+               for (set1c = 0, set2c = 0; set1c < numitems && set2c < *num; ) {
+                       if (set1p->lineoffset < posting.lineoffset) {
+                               *newsetp++ = *set1p++;
+                               newsetc++;
+                               set1c++;
+                       }
+                       else if (set1p->lineoffset > posting.lineoffset) {
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else if (set1p->type < posting.type) {
+                               *newsetp++ = *set1p++;
+                               newsetc++;
+                               set1c++;
+                       }
+                       else if (set1p->type > posting.type) {
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else {  /* identical postings */
+                               set1c++;
+                               set1p++;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+               }
+               newsetc += numitems - set1c;
+               while (set1c++ < numitems) {
+                       *newsetp++ = *set1p++;
+               }
+               break; /* end of NOT */
+
+       case REVERSENOT:  /* core NOT incoming set */
+               for (set1c = 0, set2c = 0; set1c < numitems && set2c < *num; ) {
+                       if (set1p->lineoffset < posting.lineoffset) {
+                               set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->lineoffset > posting.lineoffset) {
+                               *newsetp++ = posting;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else if (set1p->type < posting.type) {
+                               set1p++;
+                               set1c++;
+                       }
+                       else if (set1p->type > posting.type) {
+                               *newsetp++ = posting;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+                       else {  /* identical postings */
+                               set1c++;
+                               set1p++;
+                               fread(&posting, (int) sizeof(posting), 1, file);
+                               set2c++;
+                       }
+               }
+               while (set2c++ < *num) {
+                       *newsetp++ = posting;
+                       newsetc++;
+                       fread(&posting, (int) sizeof(posting), 1, file);
+               }
+               item = newitem;
+               break; /* end of REVERSENOT  */
+#endif
+       }
+       numitems = newsetc;
+       *num = newsetc;
+       enditem = (POSTING *) newsetp;
+       return((POSTING *) item);
+}
+
+#if 0
+POSTING *
+boolsave(int clear)            /* flag about whether to clear core  */
+{
+       int     i;
+       POSTING *ptr;
+       POSTING *oldstuff, *newstuff;
+
+       if (numitems == 0) {
+               if (clear) 
+                       boolclear();
+               return(NULL);
+       }
+       /* if clear then give them what we have and use boolready to realloc  */
+       if (clear) {
+               ptr = item;
+               /* free up the space we didn't give them */
+               if (item == item1)
+                       item1 = NULL;
+               else
+                       item2 = NULL;
+               boolready();
+               return(ptr);
+       }
+       i = (enditem - item) * sizeof(POSTING) + 100;
+       if ((ptr = malloc(i))r == NULL) {
+               invcannotalloc(i);
+               return(ptr);
+       }
+       /* move present set into place  */
+       oldstuff = item;
+       newstuff = ptr;
+       while (oldstuff < enditem)
+               *newstuff++ = *oldstuff++;
+       return(ptr);
+}
+#endif
+
+static void
+invcannotalloc(unsigned n)
+{
+       fprintf(stderr, "%s: cannot allocate %u bytes\n", argv0, n);
+}
+
+static void
+invcannotopen(char *file)
+{
+       fprintf(stderr, "%s: cannot open file %s\n", argv0, file);
+}
+
+static void
+invcannotwrite(char *file)
+{
+       perror(argv0);  /* must be first to preserve errno */
+       fprintf(stderr, "%s: write to file %s failed\n", argv0, file);
+}
diff --git a/src/invlib.h b/src/invlib.h
new file mode 100644 (file)
index 0000000..d394835
--- /dev/null
@@ -0,0 +1,118 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: invlib.h,v 1.7 2004/02/12 18:14:05 broeker Exp $ */
+
+
+#ifndef CSCOPE_INVLIB_H
+#define CSCOPE_INVLIB_H
+
+#include <stdio.h>             /* need definition of FILE* */
+#include <limits.h>
+
+/* inverted index definitions */
+
+/* postings temporary file long number coding into characters */
+/* FIXME HBB: where would these definitions come from ? */
+#if CHAR_MAX==255
+# define       BASE            223     /* 255 - ' ' */
+# define       PRECISION       4       /* maximum digits after converting a long */
+#else
+# if CHAR_MAX==127     /* assume sign-extension of a char when converted to an int */
+#  define      BASE            95      /* 127 - ' ' */
+#  define      PRECISION       5       /* maximum digits after converting a long */
+# else
+  #error Need a platform with 8 bits in a char value
+# endif
+#endif
+
+/* inverted index access parameters */
+#define INVAVAIL       0
+#define INVBUSY                1
+#define INVALONE       2
+
+/* boolean set operations */
+#define        BOOL_OR         3
+#define        AND             4
+#define        NOT             5
+#define        REVERSENOT      6
+
+/* note that the entire first block is for parameters */
+typedef        struct  {
+       long    version;        /* inverted index format version */
+       long    filestat;       /* file status word  */
+       long    sizeblk;        /* size of logical block in bytes */
+       long    startbyte;      /* first byte of superfinger */
+       long    supsize;        /* size of superfinger in bytes */
+       long    cntlsize;       /* size of max cntl space (should be a multiple of BUFSIZ) */
+       long    share;          /* flag whether to use shared memory */
+} PARAM;
+
+typedef        struct {
+       FILE    *invfile;       /* the inverted file ptr */
+       FILE    *postfile;      /* posting file ptr */
+       PARAM   param;          /* control parameters for the file */
+       char    *iindex;        /* ptr to space for superindex */
+       union logicalblk *logblk;       /* ptr to space for a logical block */
+       long    numblk;         /* number of block presently at *logblk */
+       long    keypnt;         /* number item in present block found */
+} INVCONTROL;
+
+typedef        struct  {
+       short   offset;         /* offset in this logical block */
+       unsigned char size;     /* size of term */
+       unsigned char space;    /* number of longs of growth space */
+       long    post;           /* number of postings for this entry */
+} ENTRY;
+
+typedef        struct {
+       long    lineoffset;     /* source line database offset */
+       long    fcnoffset;      /* function name database offset */
+       long    fileindex : 24; /* source file name index */
+       long    type : 8;       /* reference type (mark character) */
+} POSTING;
+
+extern long    *srcoffset;     /* source file name database offsets */
+extern int     nsrcoffset;     /* number of file name database offsets */
+
+
+void   boolclear(void);
+POSTING        *boolfile(INVCONTROL *invcntl, long *num, int boolarg);
+void   invclose(INVCONTROL *invcntl);
+void   invdump(INVCONTROL *invcntl, char *term);
+long   invfind(INVCONTROL *invcntl, char *searchterm);
+int    invforward(INVCONTROL *invcntl);
+int    invopen(INVCONTROL *invcntl, char *invname, char *invpost, int status);
+long   invmake(char *invname, char *invpost, FILE *infile);
+long   invterm(INVCONTROL *invcntl, char *term);
+
+#endif /* CSCOPE_INVLIB_H */
diff --git a/src/library.h b/src/library.h
new file mode 100644 (file)
index 0000000..af5a5ed
--- /dev/null
@@ -0,0 +1,53 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: library.h,v 1.11 2006/07/23 20:59:20 broeker Exp $ */
+
+#ifndef CSCOPE_LIBRARY_H
+#define CSCOPE_LIBRARY_H
+
+#include <stdio.h>             /* need FILE* type def. */
+
+/* private library */
+char   *compath(char *pathname);
+char   *egrepinit(char *egreppat);
+char   *logdir(char *name);
+char   *mybasename(char *path);
+FILE   *myfopen(char *path, char *mode);
+char   *mygetenv(char *variable, char *deflt);
+int    myopen(char *path, int flag, int mode);
+FILE   *mypopen(char *cmd, char *mode);
+int    mypclose(FILE *ptr);
+FILE   *vpfopen(char *filename, char *type);
+void   egrepcaseless(int i);
+
+#endif /* CSCOPE_LIBRARY_H */
diff --git a/src/logdir.c b/src/logdir.c
new file mode 100644 (file)
index 0000000..8ed4b40
--- /dev/null
@@ -0,0 +1,102 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*
+ *     logdir()
+ *
+ *     This routine does not use the getpwent(3) library routine
+ *     because the latter uses the stdio package.  The allocation of
+ *     storage in this package destroys the integrity of the shell's
+ *     storage allocation.
+ */
+
+#include <unistd.h>
+#include <string.h>
+#include "global.h"
+
+#define        OURBUFSIZ       160     /* renamed: avoid conflict with <stdio.h> */
+
+static char const rcsid[] = "$Id: logdir.c,v 1.5 2002/07/28 15:40:07 broeker Exp $";
+
+static char line[OURBUFSIZ+1];
+
+/* Internal prototypes: */
+static char    *nextfield(char *p);
+
+
+static char *
+nextfield(char *p)
+{
+       while (*p && *p != ':')
+               ++p;
+       if (*p) *p++ = 0;
+       return(p);
+}
+
+char *
+logdir(char *name)
+{
+       char    *p;
+       int     i, j;
+       int     pwf;
+       
+       /* attempt to open the password file */
+       if ((pwf = myopen("/etc/passwd", 0, 0)) == -1)
+               return(0);
+               
+       /* find the matching password entry */
+       do {
+               /* get the next line in the password file */
+               i = read(pwf, line, OURBUFSIZ);
+               for (j = 0; j < i; j++)
+                       if (line[j] == '\n')
+                               break;
+               /* return a null pointer if the whole file has been read */
+               if (j >= i)
+                       return(0);
+               line[++j] = 0;                  /* terminate the line */
+               (void) lseek(pwf, (long) (j - i), 1);   /* point at the next line */
+               p = nextfield(line);            /* get the logname */
+       } while (*name != *line ||      /* fast pretest */
+           strcmp(name, line) != 0);
+       (void) close(pwf);
+       
+       /* skip the intervening fields */
+       p = nextfield(p);
+       p = nextfield(p);
+       p = nextfield(p);
+       p = nextfield(p);
+       
+       /* return the login directory */
+       (void) nextfield(p);
+       return(p);
+}
diff --git a/src/lookup.c b/src/lookup.c
new file mode 100644 (file)
index 0000000..809dff9
--- /dev/null
@@ -0,0 +1,151 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     keyword look-up routine for the C symbol scanner
+ */
+
+#include "global.h"
+#include "lookup.h"
+
+static char const rcsid[] = "$Id: lookup.c,v 1.4 2006/04/21 10:45:48 broeker Exp $";
+
+/* keyword text for fast testing of keywords in the scanner */
+char   enumtext[] = "enum";
+char   externtext[] = "extern";
+char   structtext[] = "struct";
+char   typedeftext[] = "typedef";
+char   uniontext[] = "union";
+
+/* This keyword table is also used for keyword text compression.  Keywords
+ * with an index less than the numeric value of a space are replaced with the
+ * control character corresponding to the index, so they cannot be moved
+ * without changing the database file version and adding compatibility code
+ * for old databases.
+ */
+struct keystruct keyword[] = {
+       {"",            '\0',   NULL},  /* dummy entry */
+       {"#define",     ' ',    NULL},  /* must be table entry 1 */
+       {"#include",    ' ',    NULL},  /* must be table entry 2 */
+       {"break",       '\0',   NULL},  /* rarely in cross-reference */
+       {"case",        ' ',    NULL},
+       {"char",        ' ',    NULL},
+       {"continue",    '\0',   NULL},  /* rarely in cross-reference */
+       {"default",     '\0',   NULL},  /* rarely in cross-reference */
+       {"double",      ' ',    NULL},
+       {"\t",          '\0',   NULL},  /* must be the table entry 9 */
+       {"\n",          '\0',   NULL},  /* must be the table entry 10 */
+       {"else",        ' ',    NULL},
+       {enumtext,      ' ',    NULL},
+       {externtext,    ' ',    NULL},
+       {"float",       ' ',    NULL},
+       {"for",         '(',    NULL},
+       {"goto",        ' ',    NULL},
+       {"if",          '(',    NULL},
+       {"int",         ' ',    NULL},
+       {"long",        ' ',    NULL},
+       {"register",    ' ',    NULL},
+       {"return",      '\0',   NULL},
+       {"short",       ' ',    NULL},
+       {"sizeof",      '\0',   NULL},
+       {"static",      ' ',    NULL},
+       {structtext,    ' ',    NULL},
+       {"switch",      '(',    NULL},
+       {typedeftext,   ' ',    NULL},
+       {uniontext,     ' ',    NULL},
+       {"unsigned",    ' ',    NULL},
+       {"void",        ' ',    NULL},
+       {"while",       '(',    NULL},
+       
+       /* these keywords are not compressed */
+       {"do",          '\0',   NULL},
+       {"auto",        ' ',    NULL},
+       {"fortran",     ' ',    NULL},
+       {"const",       ' ',    NULL},
+       {"signed",      ' ',    NULL},
+       {"volatile",    ' ',    NULL},
+};
+#define KEYWORDS       (sizeof(keyword) / sizeof(struct keystruct))
+
+#define HASHMOD        (KEYWORDS * 2 + 1)
+
+static struct  keystruct *hashtab[HASHMOD]; /* pointer table */
+
+/* put the keywords into the symbol table */
+
+void
+initsymtab(void)
+{
+    unsigned int i, j;
+    struct keystruct *p;
+       
+    for (i = 1; i < KEYWORDS; ++i) {
+       p = keyword + i;
+       j = hash(p->text) % HASHMOD;
+       p->next = hashtab[j];
+       hashtab[j] = p;
+    }
+}
+
+/* see if this identifier is a keyword */
+
+char *
+lookup(char *ident)
+{
+       struct  keystruct *p;
+       int     c;
+       
+       /* look up the identifier in the keyword table */
+       for (p = hashtab[hash(ident) % HASHMOD]; p != NULL; p = p->next) {
+               if (strequal(ident, p->text)) {
+                       if (compress == YES && (c = p - keyword) < ' ') {
+                               ident[0] = c;   /* compress the keyword */
+                       }
+                       return(p->text);
+               }
+       }
+       /* this is an identifier */
+       return(NULL);
+}
+
+/* form hash value for string */
+int
+hash(char *ss)
+{
+       int     i;
+       unsigned char   *s = (unsigned char *)ss;
+       
+       for (i = 0; *s != '\0'; )
+               i += *s++;      /* += is faster than <<= for cscope */
+       return(i);
+}
diff --git a/src/lookup.h b/src/lookup.h
new file mode 100644 (file)
index 0000000..8c7770f
--- /dev/null
@@ -0,0 +1,48 @@
+/*===========================================================================
+ Copyright (c) 2001, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: lookup.h,v 1.1 2001/06/01 12:43:24 broeker Exp $ */
+
+
+#ifndef CSCOPE_LOOKUP_H
+#define CSCOPE_LOOKUP_H
+
+/* declarations for objects defined in lookup.c */
+
+/* keyword text for fast testing of keywords in the scanner */
+extern char    enumtext[];
+extern char    externtext[];
+extern char    structtext[];
+extern char    typedeftext[];
+extern char    uniontext[];
+
+#endif /* CSCOPE_LOOKUP_H */
diff --git a/src/main.c b/src/main.c
new file mode 100644 (file)
index 0000000..c447c30
--- /dev/null
@@ -0,0 +1,1070 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     main functions
+ */
+
+#include "global.h"
+
+#include "build.h"
+#include "vp.h"
+#include "version.h"   /* FILEVERSION and FIXVERSION */
+#include "scanner.h" 
+#include "alloc.h"
+
+#include <stdlib.h>    /* atoi */
+#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#include <sys/types.h> /* needed by stat.h */
+#include <sys/stat.h>  /* stat */
+#include <signal.h>
+#ifdef HAVE_GETOPT_LONG 
+#include <getopt.h>
+#endif
+
+/* defaults for unset environment variables */
+#define        EDITOR  "vi"
+#define HOME   "/"     /* no $HOME --> use root directory */
+#define        SHELL   "sh"
+#define LINEFLAG "+%s" /* default: used by vi and emacs */
+#define TMPDIR "/tmp"
+#ifndef DFLT_INCDIR
+#define DFLT_INCDIR "/usr/include"
+#endif
+
+static char const rcsid[] = "$Id: main.c,v 1.55 2011/07/04 13:41:17 nhorman Exp $";
+
+/* note: these digraph character frequencies were calculated from possible 
+   printable digraphs in the cross-reference for the C compiler */
+char   dichar1[] = " teisaprnl(of)=c"; /* 16 most frequent first chars */
+char   dichar2[] = " tnerpla";         /* 8 most frequent second chars 
+                                          using the above as first chars */
+char   dicode1[256];           /* digraph first character code */
+char   dicode2[256];           /* digraph second character code */
+
+char   *editor, *shell, *lineflag;     /* environment variables */
+char   *home;                  /* Home directory */
+BOOL   lineflagafterfile;
+char   *argv0;                 /* command name */
+BOOL   compress = YES;         /* compress the characters in the crossref */
+BOOL   dbtruncated;            /* database symbols are truncated to 8 chars */
+int    dispcomponents = 1;     /* file path components to display */
+#if CCS
+BOOL   displayversion;         /* display the C Compilation System version */
+#endif
+BOOL   editallprompt = YES;    /* prompt between editing files */
+unsigned int fileargc;         /* file argument count */
+char   **fileargv;             /* file argument values */
+int    fileversion;            /* cross-reference file version */
+BOOL   incurses = NO;          /* in curses */
+BOOL   invertedindex;          /* the database has an inverted index */
+BOOL   isuptodate;             /* consider the crossref up-to-date */
+BOOL   kernelmode;             /* don't use DFLT_INCDIR - bad for kernels */
+BOOL   linemode = NO;          /* use line oriented user interface */
+BOOL   verbosemode = NO;       /* print extra information on line mode */
+BOOL   recurse_dir = NO;       /* recurse dirs when searching for src files */
+char   *namefile;              /* file of file names */
+BOOL   ogs;                    /* display OGS book and subsystem names */
+char   *prependpath;           /* prepend path to file names */
+FILE   *refsfound;             /* references found file */
+char   temp1[PATHLEN + 1];     /* temporary file name */
+char   temp2[PATHLEN + 1];     /* temporary file name */
+char   tempdirpv[PATHLEN + 1]; /* private temp directory */
+long   totalterms;             /* total inverted index terms */
+BOOL   trun_syms;              /* truncate symbols to 8 characters */
+char   tempstring[TEMPSTRING_LEN + 1]; /* use this as a buffer, instead of 'yytext', 
+                                * which had better be left alone */
+char   *tmpdir;                /* temporary directory */
+
+static BOOL    onesearch;              /* one search only in line mode */
+static char    *reflines;              /* symbol reference lines file */
+
+/* Internal prototypes: */
+static void    initcompress(void);
+static void    longusage(void);
+static void    skiplist(FILE *oldrefs);
+static void    usage(void);
+
+#ifdef HAVE_FIXKEYPAD
+void   fixkeypad();
+#endif
+
+#if defined(KEY_RESIZE) && !defined(__DJGPP__)
+void 
+sigwinch_handler(int sig, siginfo_t *info, void *unused)
+{
+    (void) sig;
+    (void) info;
+    (void) unused;
+    if(incurses == YES)
+        ungetch(KEY_RESIZE);
+}
+#endif
+
+#ifdef HAVE_GETOPT_LONG
+struct option lopts[] = {
+       {"help", 0, NULL, 'h'},
+       {"version", 0, NULL, 'V'},
+       {0, 0, 0, 0}
+};
+
+char ** parse_options(int *argc, char **argv)
+{
+       int opt;
+       int longind;
+       char path[PATHLEN + 1];     /* file path */
+       char *s;
+       int argcc = *argc;
+       
+
+       while ((opt = getopt_long(argcc, argv,
+              "hVbcCdeF:f:I:i:kLl0:1:2:3:4:5:6:7:8:9:P:p:qRs:TUuv",
+              lopts, &longind)) != -1) {
+               switch(opt) {
+
+               case '?':
+                       usage();
+                       myexit(1);
+                       break;
+               case '0':
+               case '1':
+               case '2':
+               case '3':
+               case '4':
+               case '5':
+               case '6':
+               case '7':
+               case '8':
+               case '9':
+                       /* The input fields numbers for line mode operation */
+                       field = opt - '0';
+                       if (strlen(optarg) > PATHLEN) {
+                                   postfatal("\
+                                       cscope: pattern too long, cannot be > \
+                                       %d characters\n", PATLEN);
+                       }
+                       strcpy(Pattern, optarg);        
+                       break;
+               case 'b':       /* only build the cross-reference */
+                       buildonly = YES;
+                       linemode  = YES;
+                       break;
+               case 'c':       /* ASCII characters only in crossref */
+                       compress = NO;
+                       break;
+               case 'C':       /* turn on caseless mode for symbol searches */
+                       caseless = YES;
+                       egrepcaseless(caseless); /* simulate egrep -i flag */
+                       break;
+               case 'd':       /* consider crossref up-to-date */
+                       isuptodate = YES;
+                       break;
+               case 'e':       /* suppress ^E prompt between files */
+                       editallprompt = NO;
+                       break;
+               case 'h':
+                       longusage();
+                       myexit(1);
+                       break;
+               case 'k':       /* ignore DFLT_INCDIR */
+                       kernelmode = YES;
+                       break;
+               case 'L':
+                       onesearch = YES;
+                       /* FALLTHROUGH */
+               case 'l':
+                       linemode = YES;
+                       break;
+               case 'v':
+                       verbosemode = YES;
+                       break;
+               case 'V':
+                       fprintf(stderr, "%s: version %d%s\n", argv0,
+                               FILEVERSION, FIXVERSION);
+                       myexit(0);
+                       break;
+               case 'q':       /* quick search */
+                       invertedindex = YES;
+                       break;
+               case 'T':       /* truncate symbols to 8 characters */
+                       trun_syms = YES;
+                       break;
+               case 'u':       /* unconditionally build the cross-reference */
+                       unconditional = YES;
+                       break;
+               case 'U':       /* assume some files have changed */
+                       fileschanged = YES;
+                       break;
+               case 'R':
+                       recurse_dir = YES;
+                       break;
+               case 'f':       /* alternate cross-reference file */
+                       reffile = optarg;
+                       if (strlen(reffile) > sizeof(path) - 3) {
+                               postfatal("\
+                                       cscope: reffile too long, cannot \
+                                       be > %d characters\n", sizeof(path) - 3);
+                               /* NOTREACHED */
+                       }
+                       strcpy(path, reffile);
+
+                       s = path + strlen(path);
+                       strcpy(s, ".in");
+                       invname = my_strdup(path);
+                       strcpy(s, ".po");
+                       invpost = my_strdup(path);
+                       break;
+
+               case 'F':       /* symbol reference lines file */
+                       reflines = optarg;
+                       break;
+               case 'i':       /* file containing file names */
+                       namefile = optarg;
+                       break;
+               case 'I':       /* #include file directory */
+                       includedir(optarg);
+                       break;
+               case 'p':       /* file path components to display */
+                       dispcomponents = atoi(optarg);
+                       break;
+               case 'P':       /* prepend path to file names */
+                       prependpath = optarg;
+                       break;
+               case 's':       /* additional source file directory */
+                       sourcedir(optarg);
+                       break;
+               }
+       }
+       /*
+        * This adjusts argv so that we only see the remaining 
+        * args.  Its ugly, but we need to do it so that the rest
+        * of the main routine doesn't get all confused
+        */
+       *argc = *argc - optind;
+       return &argv[optind];
+}
+#endif
+
+int
+main(int argc, char **argv)
+{
+    FILE *names;                       /* name file pointer */
+    int        oldnum;                 /* number in old cross-ref */
+    char path[PATHLEN + 1];    /* file path */
+    FILE *oldrefs;     /* old cross-reference file */
+    char *s;
+    int c;
+    unsigned int i;
+    pid_t pid;
+    struct stat        stat_buf;
+#if defined(KEY_RESIZE) && !defined(__DJGPP__)
+    struct sigaction winch_action;
+#endif
+    mode_t orig_umask;
+       
+    yyin = stdin;
+    yyout = stdout;
+    /* save the command name for messages */
+    argv0 = argv[0];
+
+    /* set the options */
+#ifdef HAVE_GETOPT_LONG 
+       argv = parse_options(&argc, argv);
+#else
+    while (--argc > 0 && (*++argv)[0] == '-') {
+       /* HBB 20030814: add GNU-style --help and --version options */
+       if (strequal(argv[0], "--help")
+           || strequal(argv[0], "-h")) {
+           longusage();
+           myexit(0);
+       }
+       if (strequal(argv[0], "--version")
+           || strequal(argv[0], "-V")) {
+#if CCS
+           displayversion = YES;
+#else
+           fprintf(stderr, "%s: version %d%s\n", argv0,
+                   FILEVERSION, FIXVERSION);
+           myexit(0);
+#endif
+       }
+
+       for (s = argv[0] + 1; *s != '\0'; s++) {
+
+           /* look for an input field number */
+           if (isdigit((unsigned char) *s)) {
+               field = *s - '0';
+               if (field > 8) {
+                   field = 8;
+               }
+               if (*++s == '\0' && --argc > 0) {
+                   s = *++argv;
+               }
+               if (strlen(s) > PATLEN) {
+                   postfatal("\
+cscope: pattern too long, cannot be > %d characters\n", PATLEN);
+                   /* NOTREACHED */
+               }
+               strcpy(Pattern, s);
+               goto nextarg;
+           }
+           switch (*s) {
+           case '-':   /* end of options */
+               --argc;
+               ++argv;
+               goto lastarg;
+           case 'b':   /* only build the cross-reference */
+               buildonly = YES;
+               linemode  = YES;
+               break;
+           case 'c':   /* ASCII characters only in crossref */
+               compress = NO;
+               break;
+           case 'C':   /* turn on caseless mode for symbol searches */
+               caseless = YES;
+               egrepcaseless(caseless); /* simulate egrep -i flag */
+               break;
+           case 'd':   /* consider crossref up-to-date */
+               isuptodate = YES;
+               break;
+           case 'e':   /* suppress ^E prompt between files */
+               editallprompt = NO;
+               break;
+           case 'k':   /* ignore DFLT_INCDIR */
+               kernelmode = YES;
+               break;
+           case 'L':
+               onesearch = YES;
+               /* FALLTHROUGH */
+           case 'l':
+               linemode = YES;
+               break;
+           case 'v':
+               verbosemode = YES;
+               break;
+           case 'o':   /* display OGS book and subsystem names */
+               ogs = YES;
+               break;
+           case 'q':   /* quick search */
+               invertedindex = YES;
+               break;
+           case 'T':   /* truncate symbols to 8 characters */
+               trun_syms = YES;
+               break;
+           case 'u':   /* unconditionally build the cross-reference */
+               unconditional = YES;
+               break;
+           case 'U':   /* assume some files have changed */
+               fileschanged = YES;
+               break;
+           case 'R':
+               recurse_dir = YES;
+               break;
+           case 'f':   /* alternate cross-reference file */
+           case 'F':   /* symbol reference lines file */
+           case 'i':   /* file containing file names */
+           case 'I':   /* #include file directory */
+           case 'p':   /* file path components to display */
+           case 'P':   /* prepend path to file names */
+           case 's':   /* additional source file directory */
+           case 'S':
+               c = *s;
+               if (*++s == '\0' && --argc > 0) {
+                   s = *++argv;
+               }
+               if (*s == '\0') {
+                   fprintf(stderr, "%s: -%c option: missing or empty value\n", 
+                           argv0, c);
+                   goto usage;
+               }
+               switch (c) {
+               case 'f':       /* alternate cross-reference file */
+                   reffile = s;
+                   if (strlen(reffile) > sizeof(path) - 3) {
+                         postfatal("\
+cscope: reffile too long, cannot be > %d characters\n", sizeof(path) - 3);
+                         /* NOTREACHED */
+                   }
+                   strcpy(path, s);
+#ifdef SHORT_NAMES_ONLY
+                   /* System V has a 14 character limit */
+                   s = mybasename(path);
+                   if (strlen(s) > 11) {
+                       s[11] = '\0';
+                   }
+#endif
+                   s = path + strlen(path);
+                   strcpy(s, ".in");
+                   invname = my_strdup(path);
+                   strcpy(s, ".po");
+                   invpost = my_strdup(path);
+                   break;
+               case 'F':       /* symbol reference lines file */
+                   reflines = s;
+                   break;
+               case 'i':       /* file containing file names */
+                   namefile = s;
+                   break;
+               case 'I':       /* #include file directory */
+                   includedir(s);
+                   break;
+               case 'p':       /* file path components to display */
+                   if (*s < '0' || *s > '9' ) {
+                       fprintf(stderr, "\
+%s: -p option: missing or invalid numeric value\n", 
+                               argv0);
+                       goto usage;
+                   }
+                   dispcomponents = atoi(s);
+                   break;
+               case 'P':       /* prepend path to file names */
+                   prependpath = s;
+                   break;
+               case 's':       /* additional source directory */
+               case 'S':
+                   sourcedir(s);
+                   break;
+               }
+               goto nextarg;
+           default:
+               fprintf(stderr, "%s: unknown option: -%c\n", argv0, 
+                       *s);
+           usage:
+               usage();
+               fprintf(stderr, "Try the -h option for more information.\n");
+               myexit(1);
+           } /* switch(option letter) */
+       } /* for(option) */
+    nextarg:   
+       ;
+    } /* while(argv) */
+
+ lastarg:
+#endif
+    /* read the environment */
+    editor = mygetenv("EDITOR", EDITOR);
+    editor = mygetenv("VIEWER", editor); /* use viewer if set */
+    editor = mygetenv("CSCOPE_EDITOR", editor);        /* has last word */
+    home = mygetenv("HOME", HOME);
+    shell = mygetenv("SHELL", SHELL);
+    lineflag = mygetenv("CSCOPE_LINEFLAG", LINEFLAG);
+    lineflagafterfile = getenv("CSCOPE_LINEFLAG_AFTER_FILE") ? 1 : 0;
+    tmpdir = mygetenv("TMPDIR", TMPDIR);
+
+    /* XXX remove if/when clearerr() in dir.c does the right thing. */
+    if (namefile && strcmp(namefile, "-") == 0 && !buildonly) {
+       postfatal("cscope: Must use -b if file list comes from stdin\n");
+       /* NOTREACHED */
+    }
+
+    /* make sure that tmpdir exists */
+    if (lstat (tmpdir, &stat_buf)) {
+       fprintf (stderr, "\
+cscope: Temporary directory %s does not exist or cannot be accessed\n", 
+                tmpdir);
+       fprintf (stderr, "\
+cscope: Please create the directory or set the environment variable\n\
+cscope: TMPDIR to a valid directory\n");
+       myexit(1);
+    }
+
+    /* create the temporary file names */
+    orig_umask = umask(S_IRWXG|S_IRWXO);
+    pid = getpid();
+    snprintf(tempdirpv, sizeof(tempdirpv), "%s/cscope.%d", tmpdir, pid);
+    if(mkdir(tempdirpv,S_IRWXU)) {
+       fprintf(stderr, "\
+cscope: Could not create private temp dir %s\n",
+               tempdirpv);
+       myexit(1);
+    }
+    umask(orig_umask);
+
+    snprintf(temp1, sizeof(temp1), "%s/cscope.1", tempdirpv);
+    snprintf(temp2, sizeof(temp2), "%s/cscope.2", tempdirpv);
+
+    /* if running in the foreground */
+    if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
+       /* cleanup on the interrupt and quit signals */
+       signal(SIGINT, myexit);
+       signal(SIGQUIT, myexit);
+    }
+    /* cleanup on the hangup signal */
+    signal(SIGHUP, myexit);
+
+    /* ditto the TERM signal */
+    signal(SIGTERM, myexit);
+
+    /* ignore PIPE signal, so myexit() will have a chance to clean up in
+     * linemode, while in curses mode the "|" command can cause a pipe signal
+     * too
+     */
+    signal(SIGPIPE, SIG_IGN);
+
+    /* if the database path is relative and it can't be created */
+    if (reffile[0] != '/' && access(".", WRITE) != 0) {
+
+       /* put it in the home directory if the database may not be
+        * up-to-date or doesn't exist in the relative directory,
+        * so a database in the current directory will be
+        * used instead of failing to open a non-existant database in
+        * the home directory
+        */
+       snprintf(path, sizeof(path), "%s/%s", home, reffile);
+       if (isuptodate == NO || access(path, READ) == 0) {
+           reffile = my_strdup(path);
+           snprintf(path, sizeof(path), "%s/%s", home, invname);
+           invname = my_strdup(path);
+           snprintf(path, sizeof(path), "%s/%s", home, invpost);
+           invpost = my_strdup(path);
+       }
+    }
+
+    if (linemode == NO) {
+       signal(SIGINT, SIG_IGN);        /* ignore interrupts */
+
+#if defined(KEY_RESIZE) && !defined(__DJGPP__)
+       winch_action.sa_sigaction = sigwinch_handler;
+       sigemptyset(&winch_action.sa_mask);
+       winch_action.sa_flags = SA_SIGINFO;
+       sigaction(SIGWINCH,&winch_action,NULL);
+#endif
+
+       /* initialize the curses display package */
+       initscr();      /* initialize the screen */
+       entercurses();
+#if TERMINFO
+       keypad(stdscr, TRUE);   /* enable the keypad */
+# ifdef HAVE_FIXKEYPAD
+       fixkeypad();    /* fix for getch() intermittently returning garbage */
+# endif
+#endif /* TERMINFO */
+#if UNIXPC
+       standend();     /* turn off reverse video */
+#endif
+       dispinit();     /* initialize display parameters */
+       setfield();     /* set the initial cursor position */
+       clearmsg();     /* clear any build progress message */
+       display();      /* display the version number and input fields */
+    }
+
+
+    /* if the cross-reference is to be considered up-to-date */
+    if (isuptodate == YES) {
+       if ((oldrefs = vpfopen(reffile, "rb")) == NULL) {
+           postfatal("cscope: cannot open file %s\n", reffile);
+           /* NOTREACHED */
+       }
+       /* get the crossref file version but skip the current directory */
+       if (fscanf(oldrefs, "cscope %d %*s", &fileversion) != 1) {
+           postfatal("cscope: cannot read file version from file %s\n", 
+                     reffile);
+           /* NOTREACHED */
+       }
+       if (fileversion >= 8) {
+
+           /* override these command line options */
+           compress = YES;
+           invertedindex = NO;
+
+           /* see if there are options in the database */
+           for (;;) {
+               getc(oldrefs);  /* skip the blank */
+               if ((c = getc(oldrefs)) != '-') {
+                   ungetc(c, oldrefs);
+                   break;
+               }
+               switch (getc(oldrefs)) {
+               case 'c':       /* ASCII characters only */
+                   compress = NO;
+                   break;
+               case 'q':       /* quick search */
+                   invertedindex = YES;
+                   fscanf(oldrefs, "%ld", &totalterms);
+                   break;
+               case 'T':       /* truncate symbols to 8 characters */
+                   dbtruncated = YES;
+                   trun_syms = YES;
+                   break;
+               }
+           }
+           initcompress();
+           seek_to_trailer(oldrefs);
+       }
+       /* skip the source and include directory lists */
+       skiplist(oldrefs);
+       skiplist(oldrefs);
+
+       /* get the number of source files */
+       if (fscanf(oldrefs, "%lu", &nsrcfiles) != 1) {
+           postfatal("\
+cscope: cannot read source file size from file %s\n", reffile);
+           /* NOTREACHED */
+       }
+       /* get the source file list */
+       srcfiles = mymalloc(nsrcfiles * sizeof(char *));
+       if (fileversion >= 9) {
+
+           /* allocate the string space */
+           if (fscanf(oldrefs, "%d", &oldnum) != 1) {
+               postfatal("\
+cscope: cannot read string space size from file %s\n", reffile);
+               /* NOTREACHED */
+           }
+           s = mymalloc(oldnum);
+           getc(oldrefs);      /* skip the newline */
+                       
+           /* read the strings */
+           if (fread(s, oldnum, 1, oldrefs) != 1) {
+               postfatal("\
+cscope: cannot read source file names from file %s\n", reffile);
+               /* NOTREACHED */
+           }
+           /* change newlines to nulls */
+           for (i = 0; i < nsrcfiles; ++i) {
+               srcfiles[i] = s;
+               for (++s; *s != '\n'; ++s) {
+                   ;
+               }
+               *s = '\0';
+               ++s;
+           }
+           /* if there is a file of source file names */
+           if ((namefile != NULL && (names = vpfopen(namefile, "r")) != NULL)
+               || (names = vpfopen(NAMEFILE, "r")) != NULL) {
+       
+               /* read any -p option from it */
+               while (fgets(path, sizeof(path), names) != NULL && *path == '-') {
+                   i = path[1];
+                   s = path + 2;               /* for "-Ipath" */
+                   if (*s == '\0') {   /* if "-I path" */
+                       fgets(path, sizeof(path), names);
+                       s = path;
+                   }
+                   switch (i) {
+                   case 'p':   /* file path components to display */
+                       if (*s < '0' || *s > '9') {
+                           posterr("cscope: -p option in file %s: missing or invalid numeric value\n",                                                                 namefile);
+
+                       }
+                       dispcomponents = atoi(s);
+                   }
+               }
+               fclose(names);
+           }
+       } else {
+           for (i = 0; i < nsrcfiles; ++i) {
+               if (!fgets(path, sizeof(path), oldrefs) ) {
+                   postfatal("\
+cscope: cannot read source file name from file %s\n", 
+                             reffile);
+                   /* NOTREACHED */
+               }
+               srcfiles[i] = my_strdup(path);
+           }
+       }
+       fclose(oldrefs);
+    } else {
+       /* save the file arguments */
+       fileargc = argc;
+       fileargv = argv;
+       
+       /* get source directories from the environment */
+       if ((s = getenv("SOURCEDIRS")) != NULL) {
+           sourcedir(s);
+       }
+       /* make the source file list */
+       srcfiles = mymalloc(msrcfiles * sizeof(char *));
+       makefilelist();
+       if (nsrcfiles == 0) {
+           postfatal("cscope: no source files found\n");
+           /* NOTREACHED */
+       }
+       /* get include directories from the environment */
+       if ((s = getenv("INCLUDEDIRS")) != NULL) {
+           includedir(s);
+       }
+       /* add /usr/include to the #include directory list,
+          but not in kernelmode... kernels tend not to use it. */
+       if (kernelmode == NO) {
+           if (NULL != (s = getenv("INCDIR"))) {
+               includedir(s);
+           } else {
+               includedir(DFLT_INCDIR);
+           }
+       }
+
+       /* initialize the C keyword table */
+       initsymtab();
+
+       /* Tell build.c about the filenames to create: */
+       setup_build_filenames(reffile);
+
+       /* build the cross-reference */
+       initcompress();
+       if (linemode == NO || verbosemode == YES)    /* display if verbose as well */
+           postmsg("Building cross-reference...");                 
+       build();
+       if (linemode == NO )
+           clearmsg(); /* clear any build progress message */
+       if (buildonly == YES) {
+           myexit(0);
+       }
+    }
+    opendatabase();
+
+    /* if using the line oriented user interface so cscope can be a 
+       subprocess to emacs or samuel */
+    if (linemode == YES) {
+       if (*Pattern != '\0') {         /* do any optional search */
+           if (search() == YES) {
+               /* print the total number of lines in
+                * verbose mode */
+               if (verbosemode == YES)
+                   printf("cscope: %d lines\n",
+                          totallines);
+
+               while ((c = getc(refsfound)) != EOF)
+                   putchar(c);
+           }
+       }
+       if (onesearch == YES)
+           myexit(0);
+               
+       for (;;) {
+           char buf[PATLEN + 2];
+                       
+           printf(">> ");
+           fflush(stdout);
+           if (fgets(buf, sizeof(buf), stdin) == NULL) {
+               myexit(0);
+           }
+           /* remove any trailing newline character */
+           if (*(s = buf + strlen(buf) - 1) == '\n') {
+               *s = '\0';
+           }
+           switch (*buf) {
+           case '0':
+           case '1':
+           case '2':
+           case '3':
+           case '4':
+           case '5':
+           case '6':
+           case '7':
+           case '8':
+           case '9':   /* samuel only */
+               field = *buf - '0';
+               strcpy(Pattern, buf + 1);
+               search();
+               printf("cscope: %d lines\n", totallines);
+               while ((c = getc(refsfound)) != EOF) {
+                   putchar(c);
+               }
+               break;
+
+           case 'c':   /* toggle caseless mode */
+           case ctrl('C'):
+               if (caseless == NO) {
+                   caseless = YES;
+               } else {
+                   caseless = NO;
+               }
+               egrepcaseless(caseless);
+               break;
+
+           case 'r':   /* rebuild database cscope style */
+           case ctrl('R'):
+               freefilelist();
+               makefilelist();
+               /* FALLTHROUGH */
+
+           case 'R':   /* rebuild database samuel style */
+               rebuild();
+               putchar('\n');
+               break;
+
+           case 'C':   /* clear file names */
+               freefilelist();
+               putchar('\n');
+               break;
+
+           case 'F':   /* add a file name */
+               strcpy(path, buf + 1);
+               if (infilelist(path) == NO &&
+                   (s = inviewpath(path)) != NULL) {
+                   addsrcfile(s);
+               }
+               putchar('\n');
+               break;
+
+           case 'q':   /* quit */
+           case ctrl('D'):
+           case ctrl('Z'):
+               myexit(0);
+
+           default:
+               fprintf(stderr, "cscope: unknown command '%s'\n", buf);
+               break;
+           }
+       }
+       /* NOTREACHED */
+    }
+    /* pause before clearing the screen if there have been error messages */
+    if (errorsfound == YES) {
+       errorsfound = NO;
+       askforreturn();
+    }
+    /* do any optional search */
+    if (*Pattern != '\0') {
+       atfield();              /* move to the input field */
+       command(ctrl('Y'));     /* search */
+    } else if (reflines != NULL) {
+       /* read any symbol reference lines file */
+       readrefs(reflines);
+    }
+    display();         /* update the display */
+
+    for (;;) {
+       if (!selecting)
+           atfield();  /* move to the input field */
+
+       /* exit if the quit command is entered */
+       if ((c = mygetch()) == EOF || c == ctrl('D')) {
+           break;
+       }
+       if (c == ctrl('Z')) {
+#ifdef SIGTSTP
+           kill(0, SIGTSTP);
+           continue;
+#else
+           break;
+#endif
+       }
+       /* execute the commmand, updating the display if necessary */
+       if (command(c) == YES) {
+           display();
+       }
+
+       if (selecting) {
+           move(displine[curdispline], 0);
+           refresh();
+       }
+    }
+    /* cleanup and exit */
+    myexit(0);
+    /* NOTREACHED */
+    return 0;          /* avoid warning... */
+}
+
+void
+cannotopen(char *file)
+{
+    posterr("Cannot open file %s", file);
+}
+
+/* FIXME MTE - should use postfatal here */
+void
+cannotwrite(char *file)
+{
+    char       msg[MSGLEN + 1];
+
+    snprintf(msg, sizeof(msg), "Removed file %s because write failed", file);
+
+    myperror(msg);     /* display the reason */
+
+    unlink(file);
+    myexit(1); /* calls exit(2), which closes files */
+}
+
+
+/* set up the digraph character tables for text compression */
+static void
+initcompress(void)
+{
+    int        i;
+       
+    if (compress == YES) {
+       for (i = 0; i < 16; ++i) {
+           dicode1[(unsigned char) (dichar1[i])] = i * 8 + 1;
+       }
+       for (i = 0; i < 8; ++i) {
+           dicode2[(unsigned char) (dichar2[i])] = i + 1;
+       }
+    }
+}
+
+/* skip the list in the cross-reference file */
+
+static void
+skiplist(FILE *oldrefs)
+{
+    int        i;
+       
+    if (fscanf(oldrefs, "%d", &i) != 1) {
+       postfatal("cscope: cannot read list size from file %s\n", reffile);
+       /* NOTREACHED */
+    }
+    while (--i >= 0) {
+       if (fscanf(oldrefs, "%*s") != 0) {
+           postfatal("cscope: cannot read list name from file %s\n", reffile);
+           /* NOTREACHED */
+       }
+    }
+}
+
+
+/* enter curses mode */
+void
+entercurses(void)
+{
+    incurses = YES;
+#ifndef __MSDOS__ /* HBB 20010313 */
+    nonl();                /* don't translate an output \n to \n\r */
+#endif
+    raw();                     /* single character input */
+    noecho();                  /* don't echo input characters */
+    clear();                   /* clear the screen */
+    mouseinit();               /* initialize any mouse interface */
+    drawscrollbar(topline, nextline);
+}
+
+
+/* exit curses mode */
+void
+exitcurses(void)
+{
+       /* clear the bottom line */
+       move(LINES - 1, 0);
+       clrtoeol();
+       refresh();
+
+       /* exit curses and restore the terminal modes */
+       endwin();
+       incurses = NO;
+
+       /* restore the mouse */
+       mousecleanup();
+       fflush(stdout);
+}
+
+
+/* normal usage message */
+static void
+usage(void)
+{
+       fprintf(stderr, "Usage: cscope [-bcCdehklLqRTuUvV] [-f file] [-F file] [-i file] [-I dir] [-s dir]\n");
+       fprintf(stderr, "              [-p number] [-P path] [-[0-8] pattern] [source files]\n");
+}
+
+
+/* long usage message */
+static void
+longusage(void)
+{
+       usage();
+       fprintf(stderr, "\
+\n\
+-b            Build the cross-reference only.\n\
+-C            Ignore letter case when searching.\n\
+-c            Use only ASCII characters in the cross-ref file (don't compress).\n\
+-d            Do not update the cross-reference.\n\
+-e            Suppress the <Ctrl>-e command prompt between files.\n\
+-F symfile    Read symbol reference lines from symfile.\n\
+-f reffile    Use reffile as cross-ref file name instead of %s.\n",
+               REFFILE);
+       fprintf(stderr, "\
+-h            This help screen.\n\
+-I incdir     Look in incdir for any #include files.\n\
+-i namefile   Browse through files listed in namefile, instead of %s\n",
+               NAMEFILE);
+       fprintf(stderr, "\
+-k            Kernel Mode - don't use %s for #include files.\n",
+               DFLT_INCDIR);
+       fputs("\
+-L            Do a single search with line-oriented output.\n\
+-l            Line-oriented interface.\n\
+-num pattern  Go to input field num (counting from 0) and find pattern.\n\
+-P path       Prepend path to relative file names in pre-built cross-ref file.\n\
+-p n          Display the last n file path components.\n\
+-q            Build an inverted index for quick symbol searching.\n\
+-R            Recurse directories for files.\n\
+-s dir        Look in dir for additional source  files.\n\
+-T            Use only the first eight characters to match against C symbols.\n\
+-U            Check file time stamps.\n\
+-u            Unconditionally build the cross-reference file.\n\
+-v            Be more verbose in line mode.\n\
+-V            Print the version number.\n\
+\n\
+Please see the manpage for more information.\n",
+             stderr);
+}
+
+/* cleanup and exit */
+
+void
+myexit(int sig)
+{
+       /* HBB 20010313; close file before unlinking it. Unix may not care
+        * about that, but DOS absolutely needs it */
+       if (refsfound != NULL)
+               fclose(refsfound);
+       
+       /* remove any temporary files */
+       if (temp1[0] != '\0') {
+               unlink(temp1);
+               unlink(temp2);
+               rmdir(tempdirpv);               
+       }
+       /* restore the terminal to its original mode */
+       if (incurses == YES) {
+               exitcurses();
+       }
+       /* dump core for debugging on the quit signal */
+       if (sig == SIGQUIT) {
+               abort();
+       }
+       /* HBB 20000421: be nice: free allocated data */
+       freefilelist();
+       freeinclist();
+       freesrclist();
+       freecrossref();
+       free_newbuildfiles();
+
+       exit(sig);
+}
diff --git a/src/mouse.c b/src/mouse.c
new file mode 100644 (file)
index 0000000..69b85c0
--- /dev/null
@@ -0,0 +1,433 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     mouse functions
+ */
+
+#include "global.h"
+
+BOOL   mouse = NO;                     /* mouse interface */
+
+#ifdef UNIXPC  /* build command requires #ifdef instead of #if */
+#include <sys/window.h>
+BOOL   unixpcmouse = NO;       /* running with a mouse on the Unix PC? */
+static int uw_hs, uw_vs;       /* character height and width */
+#endif
+
+static char const rcsid[] = "$Id: mouse.c,v 1.4 2001/07/05 14:31:00 broeker Exp $";
+
+typedef        struct {                        /* menu */
+       char    *text;
+       char    *value;
+} MENU;
+
+static MENU    mainmenu[] = {          /* main menu */
+       {"Send",        "##\033s##\r"},
+       {"Repeat",      "\031"},
+       {"Edit All",    "\05"},
+       {"Rebuild",     "\022"},
+       {"Shell",       "!"},
+       {"Redraw",      "\f"},
+       {"Help",        "?"},
+       {"Exit",        "\04"},
+       {NULL,          NULL}
+};
+
+static MENU    changemenu[] = {        /* change mode menu */
+       {"Mark Screen", "*"},
+       {"Mark All",    "a"},
+       {"Change",      "\04"},
+       {"No Change",   "\033"},
+       {"Shell",       "!"},
+       {"Redraw",      "\f"},
+       {"Help",        "?"},
+       {NULL,          NULL}
+};
+
+static MENU    *loaded;                /* menu loaded */
+static BOOL    emacsviterm = NO;       /* terminal type */
+
+static void    loadmenu(MENU *menu);
+static int     getcoordinate(void);
+static int     getpercent(void);
+
+/* see if there is a mouse interface */
+
+void
+mouseinit(void)
+{
+       char    *term;
+
+       /* see if this is emacsterm or viterm */
+       term = mygetenv("TERM", "");
+       if (strcmp(term, "emacsterm") == 0 || 
+           strcmp(term, "viterm") == 0) {
+               emacsviterm = YES;
+               mouse = YES;
+       }
+       /* the MOUSE enviroment variable is for 5620 terminal programs that have
+          mouse support but the TERM environment variable is the same as a
+          terminal without a mouse, such as myx */
+       else if (strcmp(mygetenv("MOUSE", ""), "myx") == 0) {
+               mouse = YES;
+       }
+#if UNIXPC
+       else if (strcmp(term,"s4") == 0 || 
+                strcmp(term,"s120") == 0 ||
+                strcmp(term,"s90") == 0) {
+               int retval;
+               struct uwdata uwd;      /* Window data structure */
+               struct umdata umd;      /* Mouse data structure */
+
+               /* Ask for character size info */
+                       
+               retval = ioctl(1,WIOCGETD,&uwd);
+               if(retval || uwd.uw_hs <= 0 || uwd.uw_vs <= 0) {
+                       /**************************************************
+                        * something wrong with the kernel, so fake it... 
+                        **************************************************/
+                       if(!strcmp(term,"s4")) {
+                               uw_hs = 9;
+                               uw_vs = 12;
+                       }
+                       else {
+                               uw_hs = 6;
+                               uw_vs = 10;
+                       }
+               }
+               else {
+                       /* Kernel is working and knows about this font */
+                       uw_hs = uwd.uw_hs;
+                       uw_vs = uwd.uw_vs;
+               }
+               
+               /**************************************************
+                * Now turn on mouse reporting so we can actually
+                * make use of all this stuff.
+                **************************************************/
+               if((retval = ioctl(1,WIOCGETMOUSE,&umd)) != -1) {
+                       umd.um_flags= MSDOWN+MSUP;
+                       ioctl(1,WIOCSETMOUSE,&umd);
+               }
+               unixpcmouse = YES;
+       }
+#endif
+       if (mouse == YES) {
+               loadmenu(mainmenu);
+       }
+}
+
+/* load the correct mouse menu */
+
+void
+mousemenu(void)
+{
+       if (mouse == YES) {
+               if (changing == YES) {
+                       loadmenu(changemenu);
+               }
+               else {
+                       loadmenu(mainmenu);
+               }
+       }
+}
+
+/* download a menu */
+
+static void
+loadmenu(MENU *menu)
+{
+       int     i;
+
+       if (emacsviterm == YES) {
+               mousereinit();
+               (void) printf("\033V1");        /* display the scrollbar */
+               (void) printf("\033M0@%s@%s@", menu[0].text, menu[0].value);
+               for (i = 1; menu[i].text != NULL; ++i) {
+                       (void) printf("\033M@%s@%s@", menu[i].text, menu[i].value);
+               }
+       }
+       else {  /* myx */
+               int     len;
+               
+               mousecleanup();
+               (void) printf("\033[6;1X\033[9;1X");
+               for (i = 0; menu[i].text != NULL; ++i) {
+                       len = strlen(menu[i].text);
+                       (void) printf("\033[%d;%dx%s%s", len,
+                                     (int) (len + strlen(menu[i].value)), 
+                                     menu[i].text, menu[i].value);
+               }
+               loaded = menu;
+       }
+       (void) fflush(stdout);
+}
+
+/* reinitialize the mouse in case curses changed the attributes */
+
+void
+mousereinit(void)
+{
+       if (emacsviterm == YES) {
+
+               /* enable the mouse click and sweep coordinate control sequence */
+               /* and switch to menu 2 */
+               (void) printf("\033{2\033#2");
+               (void) fflush(stdout);
+       }
+}
+
+/* restore the mouse attributes */
+
+void
+mousecleanup(void)
+{
+       int     i;
+
+       if (loaded != NULL) {   /* only true for myx */
+               
+               /* remove the mouse menu */
+               (void) printf("\033[6;0X\033[9;0X");
+               for (i = 0; loaded[i].text != NULL; ++i) {
+                       (void) printf("\033[0;0x");
+               }
+               loaded = NULL;
+       }
+}
+
+/* draw the scrollbar */
+
+void
+drawscrollbar(int top, int bot)
+{
+       int p1, p2;
+
+       if (emacsviterm == YES) {
+               if (bot > top) {
+                       p1 = 16 + (top - 1) * 100 / totallines;
+                       p2 = 16 + (bot - 1) * 100 / totallines;
+                       if (p2 > 116) {
+                               p2 = 116;
+                       }
+                       if (p1 < 16) {
+                               p1 = 16;
+                       }
+                       /* don't send ^S or ^Q because it will hang a layer using cu(1) */
+                       if (p1 == ctrl('Q') || p1 == ctrl('S')) {
+                               ++p1;
+                       }
+                       if (p2 == ctrl('Q') || p2 == ctrl('S')) {
+                               ++p2;
+                       }
+               }
+               else {
+                       p1 = p2 = 16;
+               }
+               (void) printf("\033W%c%c", p1, p2);
+       }
+}
+
+/* get the mouse information */
+
+MOUSE *
+getmouseaction(char leading_char)
+{
+       static  MOUSE   m;
+
+#if UNIXPC
+
+       if(unixpcmouse == YES && leading_char == ESC) {
+
+               /* Called if cscope received an ESC character.  See if it is
+                * a mouse report and if so, decipher it.  A mouse report
+                * looks like: "<ESC>[?xx;yy;b;rM"
+                */
+               int x = 0, y = 0, button = 0, reason = 0;
+               int i;
+       
+               /* Get a mouse report.  The form is: XX;YY;B;RM where
+                * XX is 1,2, or 3 decimal digits with the X pixel position.
+                * Similarly for YY.  B is a single decimal digit with the
+                * button number (4 for one, 2 for two, and 1 for three).
+                * R is the reason for the mouse report.
+                *
+                * In general, the input is read until the mouse report has
+                * been completely read in or we have discovered that this
+                * escape sequence is NOT a mouse report.  In the latter case
+                * return the last character read to the input stream with
+                * myungetch().
+                */
+               
+               /* Check for "[?" being next 2 chars */
+               if(((i = mygetch()) != '[') || ((i = mygetch()) != '?')) {
+                       myungetch(i);
+                       return(NULL);
+               }
+       
+               /* Grab the X position (in pixels) */
+               while(isdigit(i = mygetch())) {
+                       x = (x*10) + (i - '0');
+               }
+               if(i != ';') {
+                       myungetch(i);
+                       return(NULL);   /* not a mouse report after all */
+               }
+       
+               /* Grab the Y position (in pixels) */
+               while(isdigit(i = mygetch())) {
+                       y = (y*10) + (i - '0');
+               }
+               if(i != ';') {
+                       myungetch(i);
+                       return(NULL);
+               }
+       
+               /* Get which button */
+               if((button = mygetch()) > '4') {
+                       myungetch(button);
+                       return(NULL);
+               }
+               if((i = mygetch()) != ';') {
+                       myungetch(i);
+                       return(NULL);
+               }
+               
+               /* Get the reason for this mouse report */
+               if((reason = mygetch()) > '8') {
+                       myungetch(reason);
+                       return(NULL);
+               }
+               
+               /* sequence should terminate with an 'M' */
+               if((i = mygetch()) != 'M') {
+                       myungetch(i);
+                       return(NULL);
+               }
+       
+       
+               /* OK.  We get a mouse report whenever a button is depressed
+                * or released.  Let's ignore the report whenever the button
+                * is depressed until when I am ready to implement sweeping.
+                */
+               if(reason != '2') {
+                       return(NULL);   /* '2' means button is released */
+               }
+       
+               /************************************************************
+                * Always indicate button 1 irregardless of which button was
+                * really pushed.
+                ************************************************************/
+               m.button = 1;
+       
+               /************************************************************
+                * Convert pixel coordinates to line and column coords.
+                * The height and width are obtained using an ioctl() call
+                * in mouseinit().  This assumes that variable width chars
+                * are not being used ('though it would probably work anyway).
+                ************************************************************/
+               
+               m.x1 = x/uw_hs; /* pixel/horizontal_spacing */
+               m.y1 = y/uw_vs; /* pixel/vertical_spacing   */
+       
+               /* "null" out the other fields */
+               m.percent = m.x2 = m.y2 = -1;
+       }
+       else
+#endif /* not UNIXPC */
+
+       if (mouse == YES && leading_char == ctrl('X')) {
+       
+               switch (mygetch()) {
+               case ctrl('_'):         /* click */
+                       if ((m.button = mygetch()) == '0') {    /* if scrollbar */
+                               m.percent = getpercent();
+                       }
+                       else {
+                               m.x1 = getcoordinate();
+                               m.y1 = getcoordinate();
+                               m.x2 = m.y2 = -1;
+                       }
+                       break;
+       
+               case ctrl(']'):         /* sweep */
+                       m.button = mygetch();
+                       m.x1 = getcoordinate();
+                       m.y1 = getcoordinate();
+                       m.x2 = getcoordinate();
+                       m.y2 = getcoordinate();
+                       break;
+               default:
+                       return(NULL);
+               }
+       }
+       else return(NULL);
+
+       return(&m);
+}
+
+/* get a row or column coordinate from a mouse button click or sweep */
+
+static int
+getcoordinate(void)
+{
+       int  c, next;
+
+       c = mygetch();
+       next = 0;
+       if (c == ctrl('A')) {
+               next = 95;
+               c = mygetch();
+       }
+       if (c < ' ') {
+               return (0);
+       }
+       return (next + c - ' ');
+}
+
+/* get a percentage */
+
+static int
+getpercent(void)
+{
+       int c;
+
+       c = mygetch();
+       if (c < 16) {
+               return(0);
+       }
+       if (c > 120) {
+               return(100);
+       }
+       return(c - 16);
+}
diff --git a/src/mygetenv.c b/src/mygetenv.c
new file mode 100644 (file)
index 0000000..24ae35e
--- /dev/null
@@ -0,0 +1,51 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+static char const rcsid[] = "$Id: mygetenv.c,v 1.3 2001/07/05 16:47:04 broeker Exp $";
+
+#include "library.h"
+
+#include <stdlib.h>
+
+/* return the non-null environment value or the default argument */
+
+char   *
+mygetenv(char *variable, char *deflt)
+{
+       char    *value;
+
+       value = getenv(variable);
+       if (value == NULL || *value == '\0') {
+               return(deflt);
+       }
+       return(value);
+}
diff --git a/src/mypopen.c b/src/mypopen.c
new file mode 100644 (file)
index 0000000..87db2fa
--- /dev/null
@@ -0,0 +1,207 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include "global.h"    /* pid_t, RETSIGTYPE, shell, and mybasename() */
+
+#define        tst(a,b) (*mode == 'r'? (b) : (a))
+#define        RDR     0
+#define        WTR     1
+
+/* HBB 20010312: make this a bit safer --- don't blindly assume it's 1 */
+#ifdef FD_CLOEXEC
+# define CLOSE_ON_EXEC FD_CLOEXEC
+#else
+# define CLOSE_ON_EXEC 1
+#endif
+
+#ifdef HAVE_IO_H
+# include <io.h>               /* for setmode() */
+#endif
+
+static char const rcsid[] = "$Id: mypopen.c,v 1.14 2006/04/21 10:40:29 broeker Exp $";
+
+static pid_t popen_pid[20];
+static RETSIGTYPE (*tstat)(int);
+
+int
+myopen(char *path, int flag, int mode)
+{
+    /* opens a file descriptor and then sets close-on-exec for the file */
+    int fd;
+
+    /* 20020103: if file is not explicitly in Binary mode, make
+     * sure we override silly Cygwin behaviour of automatic binary
+     * mode for files in "binary mounted" paths */
+#if O_BINARY != O_TEXT
+    if (! (flag | O_BINARY))
+       flag |= O_TEXT;
+#endif
+    if(mode)
+       fd = open(path, flag, mode);
+    else
+       fd = open(path, flag);
+
+#ifdef __DJGPP__               /* FIXME: test feature, not platform */
+    /* HBB 20010312: DOS GCC doesn't have FD_CLOEXEC (yet), so it 
+     * always fails this call. Have to skip that step */
+    if(fd != -1)
+       return(fd);
+#endif
+    if(fd != -1 && (fcntl(fd, F_SETFD, CLOSE_ON_EXEC) != -1))
+       return(fd);
+
+    else
+       {
+           /* Ensure that if the fcntl fails and fd is valid, then
+              the file is closed properly. In general this should
+              not happen. */
+           if (fd != -1)
+               {
+                   close (fd);
+               }
+
+           return(-1);
+       }
+}
+
+FILE *
+myfopen(char *path, char *mode)
+{
+    /* opens a file pointer and then sets close-on-exec for the file */
+    FILE *fp;
+
+    fp = fopen(path, mode);
+
+#ifdef SETMODE
+    if (fp && ! strchr(mode, 'b')) {
+       SETMODE(fileno(fp), O_TEXT);
+    }
+#endif /* SETMODE */
+       
+#ifdef __DJGPP__ /* FIXME: test feature, not platform */
+    /* HBB 20010312: DOS GCC doesn't have FD_CLOEXEC (yet), so it 
+     * always fails this call. Have to skip that step */
+    if(fp)
+#else
+       if(fp && (fcntl(fileno(fp), F_SETFD, CLOSE_ON_EXEC) != -1))
+#endif
+           return(fp);
+
+       else
+           return(NULL);
+}
+
+FILE *
+mypopen(char *cmd, char *mode)
+{
+#ifdef __DJGPP__
+       /* HBB 20010312: Has its own implementation of popen(), which
+        * is better suited to the platform than cscope's */
+       return (popen)(cmd, mode);
+#else
+       int     p[2];
+       pid_t *poptr;
+       int myside, yourside;
+       pid_t pid;
+
+       if(pipe(p) < 0)
+               return(NULL);
+       myside = tst(p[WTR], p[RDR]);
+       yourside = tst(p[RDR], p[WTR]);
+       if((pid = fork()) == 0) {
+               /* myside and yourside reverse roles in child */
+               int     stdio;
+
+               /* close all pipes from other popen's */
+               for (poptr = popen_pid; poptr < popen_pid+20; poptr++) {
+                       if(*poptr)
+                               (void) close(poptr - popen_pid);
+               }
+               stdio = tst(0, 1);
+               close(myside);
+               close(stdio);
+#if V9
+               dup2(yourside, stdio);
+#else
+               fcntl(yourside, F_DUPFD, stdio);
+#endif
+               close(yourside);
+               execlp(shell, mybasename(shell), "-c", cmd, (void *)0);
+               _exit(1);
+       } else if (pid > 0)
+               tstat = signal(SIGTSTP, SIG_DFL);
+       if(pid == -1)
+               return(NULL);
+       popen_pid[myside] = pid;
+       (void) close(yourside);
+       return(fdopen(myside, mode));
+#endif /* DJGPP */
+}
+
+/* HBB 20010705: renamed from 'pclose', which would collide with
+ * system-supplied function of same name */
+int
+mypclose(FILE *ptr)
+{
+       int f;
+       pid_t r;
+       int status;
+       sighandler_t hstat, istat, qstat;
+
+#ifdef __DJGPP__ 
+       /* HBB 20010705: This system has its own pclose(), which we
+        * don't want to replace */
+       return (pclose)(ptr);
+#else
+       f = fileno(ptr);
+       (void) fclose(ptr);
+       istat = signal(SIGINT, SIG_IGN);
+       qstat = signal(SIGQUIT, SIG_IGN);
+       hstat = signal(SIGHUP, SIG_IGN);
+       while((r = wait(&status)) != popen_pid[f] && r != -1)
+               ;
+       if(r == -1)
+               status = -1;
+       (void) signal(SIGINT, istat);
+       (void) signal(SIGQUIT, qstat);
+       (void) signal(SIGHUP, hstat);
+       (void) signal(SIGTSTP, tstat);
+       /* mark this pipe closed */
+       popen_pid[f] = 0;
+       return(status);
+#endif /* DJGPP */
+}
diff --git a/src/scanner.c b/src/scanner.c
new file mode 100644 (file)
index 0000000..c7f6bfd
--- /dev/null
@@ -0,0 +1,2956 @@
+
+#line 3 "scanner.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               *yy_cp = (yy_hold_char); \
+               YY_RESTORE_YY_MORE_OFFSET \
+               (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via yyrestart()), so that the user can continue scanning by
+        * just pointing yyin at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+
+       };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;                /* whether we need to initialize */
+static int yy_start = 0;       /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file  );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+void yy_delete_buffer (YY_BUFFER_STATE b  );
+void yy_flush_buffer (YY_BUFFER_STATE b  );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
+
+void *yyalloc (yy_size_t  );
+void *yyrealloc (void *,yy_size_t  );
+void yyfree (void *  );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+       (yytext_ptr) = yy_bp; \
+       (yytext_ptr) -= (yy_more_len); \
+       yyleng = (size_t) (yy_cp - (yytext_ptr)); \
+       (yy_hold_char) = *yy_cp; \
+       *yy_cp = '\0'; \
+       (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 37
+#define YY_END_OF_BUFFER 38
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+       {
+       flex_int32_t yy_verify;
+       flex_int32_t yy_nxt;
+       };
+static yyconst flex_int16_t yy_acclist[267] =
+    {   0,
+       38,   36,   37,   29,   37,   31,   36,   37,   36,   37,
+       25,   36,   37,16406,16407,16408,   36,   37,   30,   36,
+       37,   12,   36,   37,   13,   36,   37,   16,   36,   37,
+       36,   37,   35,   36,   37,   15,   36,   37,   17,   36,
+       37,   14,   36,   37,   26,   36,   37,   36,   37,   27,
+       36,   37,   25,   36,   37,16406,16407,16408,   25,   36,
+       37,16406,16407,16408,   25,   36,   37,16406,16407,16408,
+       25,   36,   37,16406,16407,16408,    6,   36,   37,   11,
+       36,   37,   32,   36,   37,   36,   37,   25,   36,   37,
+    16406,16407,16408,   25,   36,   37,16406,16407,16408,   34,
+
+       34,   34,   34,   25,16406,16407,16408, 8215,    1,    2,
+       35,   35,   28,   25,16406,16407,16408,   25,16406,16407,
+    16408,   25,16406,16407,16408,   25,16406,16407,16408,   32,
+        3,   25,16406,16407,16408,   25,16406,16407,16408,   34,
+       34,   34,   34,    8,   34,   34, 8216,   25,16406,16407,
+    16408,   25,16406,16407,16408,   25,16406,16407,16408,   25,
+    16406,16407,16408,   25,16406,16407,16408,   25,16406,16407,
+    16408,   34,   34,   34,   34,   34,    8,   34,   34, 8214,
+       25,16406,16407,16408,   25,16404,16405,16406,16407,16408,
+       25,16406,16407,16408,   25,16406,16407,16408,   25,16406,
+
+    16407,16408,   25,16406,16407,16408,   34,    9,   34,   34,
+       34,   34,   25,16406,16407,16408, 8213,   25,16406,16407,
+    16408,   25,16406,16407,16408,   25,16406,16407,16408,   34,
+       10,   34,16391,    8,   34,   34, 8216,   25,16406,16407,
+    16408,   34,   34,   34, 8216, 8212,   25,16406,16407,16408,
+        4,    4,    4, 8216,   34,   19,   25,16406,16407,16408,
+        4,   18,    5,   18, 8199,   33
+    } ;
+
+static yyconst flex_int16_t yy_accept[153] =
+    {   0,
+        1,    1,    1,    1,    1,    2,    4,    6,    9,   11,
+       17,   19,   22,   25,   28,   31,   33,   36,   39,   42,
+       45,   48,   50,   53,   59,   65,   71,   77,   80,   83,
+       86,   88,   94,  100,  100,  101,  102,  103,  104,  104,
+      104,  108,  109,  110,  111,  112,  113,  114,  118,  122,
+      126,  130,  131,  132,  136,  140,  141,  142,  143,  144,
+      146,  147,  148,  148,  148,  148,  152,  156,  160,  164,
+      168,  172,  173,  174,  175,  176,  177,  179,  180,  180,
+      181,  181,  185,  191,  195,  199,  203,  207,  208,  210,
+      211,  212,  213,  213,  217,  217,  217,  218,  222,  226,
+
+      230,  231,  234,  236,  237,  237,  237,  237,  238,  242,
+      242,  243,  243,  243,  244,  245,  245,  245,  246,  246,
+      246,  247,  251,  252,  253,  255,  255,  255,  255,  256,
+      256,  256,  256,  256,  257,  261,  262,  263,  263,  263,
+      263,  263,  263,  264,  265,  266,  267,  267,  267,  267,
+      267,  267
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        4,    4,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    5,    6,    7,    8,    9,   10,   11,
+       12,   13,    1,   14,   15,   16,    1,   17,   18,   18,
+       18,   18,   18,   18,   18,   18,   19,   20,   21,   22,
+       23,   24,    1,    1,   25,   26,   26,   27,   28,   26,
+       29,   29,   29,   29,   29,   26,   29,   30,   29,   29,
+       29,   29,   31,   32,   26,   29,   29,   26,   29,   33,
+       34,   35,   36,    1,   37,    1,   38,   26,   39,   40,
+
+       41,   42,   29,   29,   43,   29,   29,   44,   45,   46,
+       47,   29,   29,   48,   49,   50,   51,   29,   29,   26,
+       29,   52,   53,    1,   54,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[55] =
+    {   0,
+        1,    2,    3,    4,    5,    6,    7,    1,    1,    1,
+        8,    9,   10,    1,    1,   11,   12,   12,   12,    9,
+        1,    1,    1,    5,   13,   13,   13,   13,   14,   14,
+       14,   14,   14,    1,    1,    1,   14,   13,   13,   13,
+       13,   13,   14,   13,   14,   14,   14,   14,   14,   14,
+       13,   14,   15,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[169] =
+    {   0,
+        0,   53,   28,   56,  306,  813,  813,  813,   61,   64,
+       16,  813,  813,  813,  813,   54,    0,  813,  813,  813,
+      813,  288,  813,   77,   92,   95,  107,  813,  813,   72,
+       70,  124,  128,  115,    0,  247,   39,   40,  146,  159,
+      162,  140,  813,  813,    0,    0,  813,  177,  180,  192,
+      195,   87,  813,  198,  210,    0,  242,   64,  240,   76,
+      233,  813,  214,  165,  255,  226,  240,  243,  246,  258,
+      263,  225,  222,  217,  212,  200,  193,  183,  275,  813,
+      167,  279,  294,  297,  300,  312,  327,  164,    0,  165,
+      162,  138,  146,  330,  354,  406,  813,  349,  366,  372,
+
+      110,  459,    0,  107,  125,  512,  183,  378,  384,  530,
+      110,  130,  315,    0,   88,   92,  548,  554,  390,  398,
+      813,  401,    0,  424,    0,  132,  430,  220,  416,   98,
+       47,    0,    0,  813,  437,    0,    0,  230,   51,  516,
+        0,   77,  442,    0,  813,    0,   43,  137,  553,  183,
+      813,  606,  619,  623,  630,  643,  656,  670,  684,  697,
+      711,  725,  739,  748,  761,  774,  783,  797
+    } ;
+
+static yyconst flex_int16_t yy_def[169] =
+    {   0,
+      151,    1,    1,    1,  151,  151,  151,  151,  152,  153,
+      151,  151,  151,  151,  151,  151,  154,  151,  151,  151,
+      151,  151,  151,  153,  153,  153,  153,  151,  151,  151,
+      151,  153,  153,  152,  155,  155,  155,  155,  156,  156,
+      153,  151,  151,  151,  154,  154,  151,  153,  153,  153,
+      153,  151,  151,  153,  153,  155,  155,  155,  155,  155,
+      155,  151,  151,  157,  151,  153,  153,  153,  153,  153,
+      153,  155,  155,  155,  155,  155,  155,  155,  157,  151,
+      151,  153,  153,  153,  153,  153,  153,  155,  155,  155,
+      155,  155,  151,  153,  158,  158,  151,  153,  153,  153,
+
+      155,  151,  155,  155,  151,  159,  160,  160,  153,  161,
+      155,  162,  151,  102,  155,  151,  163,  163,  151,  160,
+      151,  153,  164,  156,  164,  165,  151,  151,  155,  151,
+      166,  118,  118,  151,  153,  164,  167,  151,  151,  151,
+      168,  151,  156,  167,  151,  168,  151,  151,  151,  151,
+        0,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151
+    } ;
+
+static yyconst flex_int16_t yy_nxt[868] =
+    {   0,
+        6,    6,    7,    6,    8,    9,   10,   11,    6,   12,
+       13,   14,    6,   15,    6,   16,   17,   17,   17,   18,
+       19,    6,   20,    6,   10,   10,   10,   10,   10,   10,
+       10,   10,   10,   21,   22,   23,   10,   10,   24,   10,
+       25,   10,   10,   10,   10,   10,   10,   10,   26,   10,
+       27,   10,   28,   29,   30,   32,   30,   30,   33,   30,
+       31,  148,   34,   31,   34,   39,   40,   39,   43,   44,
+       45,   45,   45,   52,   42,   52,   40,   53,   39,   40,
+       39,   60,   58,   32,   59,   61,   33,   42,   52,   40,
+       52,  147,  145,   39,   40,   39,   39,   40,   39,  134,
+
+       36,   37,   42,   38,   40,   42,   73,   40,   39,   40,
+       39,  126,   74,  126,  142,   76,   34,   42,   34,   40,
+       48,   77,   43,   44,  130,   39,   40,   39,  129,   39,
+       40,   39,  113,  126,   42,  126,   40,   49,   42,  116,
+       40,   63,   63,   63,   50,  149,  115,   39,   40,   39,
+      111,   64,   51,   54,   36,   37,   42,   38,   40,   55,
+       40,   40,   40,   39,   40,   39,   79,   79,   79,  151,
+      105,   40,   42,  150,   40,   79,   79,   65,   39,   40,
+       39,   39,   40,   39,  119,  119,  119,   42,  104,   40,
+       42,  149,   40,   39,   40,   39,   39,   40,   39,   39,
+
+       40,   39,   42,  103,   40,   42,  102,   40,   42,  101,
+       40,   39,   40,   39,   66,   63,   63,   63,   93,  150,
+       42,  138,   40,  138,   70,   64,   92,   39,   40,   39,
+       67,  138,   76,  138,   71,  121,   42,   69,   40,   68,
+       91,   39,   40,   39,   39,   40,   39,   39,   40,   39,
+       42,   65,   40,   42,   90,   40,   42,   89,   40,   39,
+       40,   39,  139,   89,   39,   40,   39,   88,   42,   81,
+       40,   78,  139,   42,   82,   40,   79,   79,   79,   75,
+       39,   40,   39,   72,   83,   79,   79,   57,   86,   42,
+       47,   40,   85,   84,   87,   95,   96,   95,   39,   40,
+
+       39,   39,   40,   39,   42,  151,   40,   42,  151,   40,
+       42,  151,   40,   39,   40,   39,  127,  127,  127,  151,
+      128,  151,   42,  151,   40,  151,  151,   94,   39,   40,
+       39,  106,   40,  106,  151,   98,  151,   42,  151,   40,
+       42,  151,   40,   99,  151,   83,   97,  151,  151,  151,
+       39,   40,   39,  151,  100,   95,   96,   95,  151,   42,
+      107,   40,  151,  151,   42,  151,   40,   39,   40,   39,
+       62,   62,   62,  110,   40,  110,   42,  151,   40,  119,
+      119,  119,   42,  151,   40,   39,   40,   39,  151,  151,
+      109,  119,  119,  119,   42,  151,   40,  151,   83,  119,
+
+      119,  119,   39,   40,   39,  151,   97,   96,   96,   96,
+      151,   42,  107,   40,  151,  122,  151,  140,   40,  140,
+      141,  151,   62,   62,   62,   40,   40,   40,  135,  151,
+      121,  127,  127,  127,  151,  128,   40,  141,  143,   40,
+      143,  151,  121,   39,   40,   39,  151,   42,  151,   40,
+      121,  151,   42,  151,   40,  151,  151,  151,   97,  112,
+      112,  113,  112,  112,  112,  114,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  114,  114,  114,  112,  112,
+      112,  112,  112,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  112,  112,  112,  114,  114,  114,  114,  114,
+
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  112,  112,  106,   40,  106,  151,  140,  117,  140,
+      141,  151,   42,  151,   40,  151,  151,  151,   62,   62,
+       62,  110,   40,  110,  151,  151,  123,  141,  151,  151,
+       42,  151,  124,  151,  151,  151,   62,   62,   62,  131,
+      131,  131,  151,  151,  132,  131,  131,  131,  131,  131,
+      132,  151,  151,  151,  131,  131,   63,  131,   63,  151,
+      151,  151,   63,  131,  151,   63,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,   63,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+
+      134,  151,  151,  151,  151,  151,  134,   35,  151,   35,
+      151,  151,   35,  151,  151,  151,  151,  151,   35,   35,
+       41,   41,   41,  151,  151,   41,   41,  151,   41,  151,
+       41,   41,   41,   46,   46,   46,   56,  151,  151,  151,
+      151,   56,   56,   56,   62,   62,   62,  151,  151,  151,
+       62,  151,   62,  151,   62,   62,   62,   80,   80,   80,
+      151,   80,  151,   80,   80,  151,  151,  151,   80,   80,
+       80,  108,  108,  108,  151,  151,  108,  108,  151,  108,
+      151,  108,  108,  108,  108,  118,  118,  118,  151,  151,
+      118,  118,  151,  118,  151,  118,  118,  118,  120,  120,
+
+      120,  151,  151,  120,  151,  151,  151,  151,  120,  120,
+      120,  120,  125,  125,  125,  151,  151,  125,  125,  151,
+      125,  151,  125,  125,  125,  112,  112,  112,  112,  112,
+      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
+      133,  133,  133,  151,  151,  133,  133,  133,  151,  151,
+      133,  133,  133,  133,  136,  151,  151,  151,  151,  136,
+      136,  136,  137,  151,  137,  151,  151,  137,  151,  151,
+      151,  151,  151,  137,  137,  131,  131,  131,  151,  151,
+      151,  131,  131,  151,  151,  131,  131,  131,  131,  144,
+      151,  151,  151,  151,  144,  144,  144,  146,  151,  151,
+
+      146,  151,  146,  146,  146,  146,  146,  146,  146,  146,
+      146,  146,    5,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151
+    } ;
+
+static yyconst flex_int16_t yy_chk[868] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    2,    3,    2,    4,    3,    4,
+        2,  147,    9,    4,    9,   10,   10,   10,   11,   11,
+       16,   16,   16,   30,   10,   30,   10,   31,   24,   24,
+       24,   38,   37,    4,   37,   38,    4,   24,   52,   24,
+       52,  142,  139,   25,   25,   25,   26,   26,   26,  131,
+
+        9,    9,   25,    9,   25,   26,   58,   26,   27,   27,
+       27,  111,   58,  111,  130,   60,   34,   27,   34,   27,
+       24,   60,   31,   31,  116,   32,   32,   32,  115,   33,
+       33,   33,  112,  126,   32,  126,   32,   25,   33,  105,
+       33,   42,   42,   42,   26,  148,  104,   39,   39,   39,
+      101,   42,   27,   32,   34,   34,   39,   34,   39,   33,
+       40,   40,   40,   41,   41,   41,   64,   64,   64,   40,
+       93,   40,   41,  148,   41,   64,   64,   42,   48,   48,
+       48,   49,   49,   49,  107,  107,  107,   48,   92,   48,
+       49,  150,   49,   50,   50,   50,   51,   51,   51,   54,
+
+       54,   54,   50,   91,   50,   51,   90,   51,   54,   88,
+       54,   55,   55,   55,   48,   63,   63,   63,   81,  150,
+       55,  128,   55,  128,   54,   63,   78,   66,   66,   66,
+       49,  138,   77,  138,   55,  107,   66,   51,   66,   50,
+       76,   67,   67,   67,   68,   68,   68,   69,   69,   69,
+       67,   63,   67,   68,   75,   68,   69,   74,   69,   70,
+       70,   70,  128,   73,   71,   71,   71,   72,   70,   65,
+       70,   61,  138,   71,   66,   71,   79,   79,   79,   59,
+       82,   82,   82,   57,   67,   79,   79,   36,   70,   82,
+       22,   82,   69,   68,   71,   83,   83,   83,   84,   84,
+
+       84,   85,   85,   85,   83,    5,   83,   84,    0,   84,
+       85,    0,   85,   86,   86,   86,  113,  113,  113,    0,
+      113,    0,   86,    0,   86,    0,    0,   82,   87,   87,
+       87,   94,   94,   94,    0,   84,    0,   87,    0,   87,
+       94,    0,   94,   86,    0,   85,   83,    0,    0,    0,
+       98,   98,   98,    0,   87,   95,   95,   95,    0,   98,
+       95,   98,    0,    0,   95,    0,   95,   99,   99,   99,
+       95,   95,   95,  100,  100,  100,   99,    0,   99,  108,
+      108,  108,  100,    0,  100,  109,  109,  109,    0,    0,
+       99,  119,  119,  119,  109,    0,  109,    0,   98,  120,
+
+      120,  120,  122,  122,  122,    0,   95,   96,   96,   96,
+        0,  122,   96,  122,    0,  109,   96,  129,   96,  129,
+      129,    0,   96,   96,   96,  124,  124,  124,  122,    0,
+      108,  127,  127,  127,  124,  127,  124,  129,  135,  135,
+      135,    0,  119,  143,  143,  143,    0,  135,    0,  135,
+      120,    0,  143,    0,  143,    0,    0,    0,   96,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  106,  106,  106,    0,  140,  106,  140,
+      140,    0,  106,    0,  106,    0,    0,    0,  106,  106,
+      106,  110,  110,  110,    0,    0,  110,  140,    0,    0,
+      110,    0,  110,    0,    0,    0,  110,  110,  110,  117,
+      117,  117,    0,    0,  117,  118,  118,  118,  117,  117,
+      118,    0,    0,    0,  118,  118,  149,  117,  149,    0,
+        0,    0,  149,  118,    0,  149,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  149,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+      117,    0,    0,    0,    0,    0,  118,  152,    0,  152,
+        0,    0,  152,    0,    0,    0,    0,    0,  152,  152,
+      153,  153,  153,    0,    0,  153,  153,    0,  153,    0,
+      153,  153,  153,  154,  154,  154,  155,    0,    0,    0,
+        0,  155,  155,  155,  156,  156,  156,    0,    0,    0,
+      156,    0,  156,    0,  156,  156,  156,  157,  157,  157,
+        0,  157,    0,  157,  157,    0,    0,    0,  157,  157,
+      157,  158,  158,  158,    0,    0,  158,  158,    0,  158,
+        0,  158,  158,  158,  158,  159,  159,  159,    0,    0,
+      159,  159,    0,  159,    0,  159,  159,  159,  160,  160,
+
+      160,    0,    0,  160,    0,    0,    0,    0,  160,  160,
+      160,  160,  161,  161,  161,    0,    0,  161,  161,    0,
+      161,    0,  161,  161,  161,  162,  162,  162,  162,  162,
+      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
+      163,  163,  163,    0,    0,  163,  163,  163,    0,    0,
+      163,  163,  163,  163,  164,    0,    0,    0,    0,  164,
+      164,  164,  165,    0,  165,    0,    0,  165,    0,    0,
+        0,    0,    0,  165,  165,  166,  166,  166,    0,    0,
+        0,  166,  166,    0,    0,  166,  166,  166,  166,  167,
+        0,    0,    0,    0,  167,  167,  167,  168,    0,    0,
+
+      168,    0,  168,  168,  168,  168,  168,  168,  168,  168,
+      168,  168,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
+      151,  151,  151,  151,  151,  151,  151
+    } ;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
+static char *yy_full_match;
+static int yy_lp;
+static int yy_looking_for_trail_begin = 0;
+static int yy_full_lp;
+static int *yy_full_state;
+#define YY_TRAILING_MASK 0x2000
+#define YY_TRAILING_HEAD_MASK 0x4000
+#define REJECT \
+{ \
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
+(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
+yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
+++(yy_lp); \
+goto find_rule; \
+}
+
+static int yy_more_flag = 0;
+static int yy_more_len = 0;
+#define yymore() ((yy_more_flag) = 1)
+#define YY_MORE_ADJ (yy_more_len)
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "scanner.l"
+#line 2 "scanner.l"
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     C symbol scanner
+ */
+#include "global.h"
+#include "scanner.h"
+#include "lookup.h"
+
+/* the line counting has been moved from character reading for speed */
+/* comments are discarded */
+
+#define        IFLEVELINC      5       /* #if nesting level size increment */
+
+static char const rcsid[] = "$Id: scanner.l,v 1.10 2011/06/29 15:48:00 nhorman Exp $";
+
+int    first;  /* buffer index for first char of symbol */
+int    last;   /* buffer index for last char of symbol */
+int    lineno; /* symbol line number */
+int    myylineno = 1;
+
+static BOOL    arraydimension;         /* inside array dimension declaration */
+static BOOL    bplisting;              /* breakpoint listing */
+static int     braces;                 /* unmatched left brace count */
+static BOOL    classdef;               /* c++ class definition */
+static BOOL    elseelif;               /* #else or #elif found */
+static BOOL    esudef;                 /* enum/struct/union global definition */
+static BOOL    external;               /* external definition */
+static int     externalbraces;         /* external definition outer brace count */
+static BOOL    fcndef;                 /* function definition */
+static BOOL    global;                 /* file global scope (outside functions) */
+static int     iflevel;                /* #if nesting level */
+static BOOL    initializer;            /* data initializer */
+static int     initializerbraces;      /* data initializer outer brace count */
+static BOOL    lex;                    /* lex file */
+static int     miflevel = IFLEVELINC;  /* maximum #if nesting level */
+static int     *maxifbraces;           /* maximum brace count within #if */
+static int     *preifbraces;           /* brace count before #if */
+static int     parens;                 /* unmatched left parenthesis count */
+static BOOL    ppdefine;               /* preprocessor define statement */
+static BOOL    pseudoelif;             /* pseudo-#elif */
+static BOOL    oldtype;                /* next identifier is an old type */
+static BOOL    rules;                  /* lex/yacc rules */
+static BOOL    sdl;                    /* sdl file */
+static BOOL    structfield;            /* structure field declaration */
+static int     tagdef;                 /* class/enum/struct/union tag definition */
+static BOOL    template;               /* function template */
+static int     templateparens;         /* function template outer parentheses count */
+static int     typedefbraces = -1;     /* initial typedef brace count */
+static int     token;                  /* token found */
+
+
+void   multicharconstant(char terminator);
+int    skipcomment_input(void);
+int    comment(void);
+
+#ifdef FLEX_SCANNER
+#define YY_INPUT(buf,result,max_size) \
+       {\
+               int c = skipcomment_input (); \
+               result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
+       }
+#else
+/* Assume this is the AT&T/SCO style lex */
+#undef input
+#define input()  ((yytchar=(yytchar=yysptr>yysbuf?*(unsigned char *)--yysptr:getc(yyin))=='/'?comment():yytchar)==EOF?LEXEOF:yytchar)
+#define noncommentinput()  ((yytchar=yysptr>yysbuf?*--yysptr:getc(yyin))==EOF?LEXEOF:yytchar)
+#undef unput
+#define unput(c) (*yysptr++=(c))
+
+#endif
+
+
+#line 845 "scanner.c"
+
+#define INITIAL 0
+#define SDL 1
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag  );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *yyget_in (void );
+
+void yyset_in  (FILE * in_str  );
+
+FILE *yyget_out (void );
+
+void yyset_out  (FILE * out_str  );
+
+int yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number  );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+               { \
+               int c = '*'; \
+               int n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( yyin ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else \
+               { \
+               errno=0; \
+               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+                       { \
+                       if( errno != EINTR) \
+                               { \
+                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
+                               break; \
+                               } \
+                       errno=0; \
+                       clearerr(yyin); \
+                       } \
+               }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+       if ( yyleng > 0 ) \
+               YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+                               (yytext[yyleng - 1] == '\n'); \
+       YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
+    
+#line 115 "scanner.l"
+
+#line 1033 "scanner.c"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! (yy_state_buf) )
+            (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
+            if ( ! (yy_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! yyin )
+                       yyin = stdin;
+
+               if ( ! yyout )
+                       yyout = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       yyensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               yy_create_buffer(yyin,YY_BUF_SIZE );
+               }
+
+               yy_load_buffer_state( );
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+               (yy_more_len) = 0;
+               if ( (yy_more_flag) )
+                       {
+                       (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
+                       (yy_more_flag) = 0;
+                       }
+               yy_cp = (yy_c_buf_p);
+
+               /* Support of yytext. */
+               *yy_cp = (yy_hold_char);
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+               yy_current_state = (yy_start);
+               yy_current_state += YY_AT_BOL();
+
+               (yy_state_ptr) = (yy_state_buf);
+               *(yy_state_ptr)++ = yy_current_state;
+
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       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 >= 152 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
+                               }
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       *(yy_state_ptr)++ = yy_current_state;
+                       ++yy_cp;
+                       }
+               while ( yy_base[yy_current_state] != 813 );
+
+yy_find_action:
+               yy_current_state = *--(yy_state_ptr);
+               (yy_lp) = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+               for ( ; ; ) /* until we find what rule we matched */
+                       {
+                       if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
+                               {
+                               yy_act = yy_acclist[(yy_lp)];
+                               if ( yy_act & YY_TRAILING_HEAD_MASK ||
+                                    (yy_looking_for_trail_begin) )
+                                       {
+                                       if ( yy_act == (yy_looking_for_trail_begin) )
+                                               {
+                                               (yy_looking_for_trail_begin) = 0;
+                                               yy_act &= ~YY_TRAILING_HEAD_MASK;
+                                               break;
+                                               }
+                                       }
+                               else if ( yy_act & YY_TRAILING_MASK )
+                                       {
+                                       (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
+                                       (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
+                                       (yy_full_match) = yy_cp;
+                                       (yy_full_state) = (yy_state_ptr);
+                                       (yy_full_lp) = (yy_lp);
+                                       }
+                               else
+                                       {
+                                       (yy_full_match) = yy_cp;
+                                       (yy_full_state) = (yy_state_ptr);
+                                       (yy_full_lp) = (yy_lp);
+                                       break;
+                                       }
+                               ++(yy_lp);
+                               goto find_rule;
+                               }
+                       --yy_cp;
+                       yy_current_state = *--(yy_state_ptr);
+                       (yy_lp) = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+do_action:     /* This label is used only to access EOF actions. */
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+#line 116 "scanner.l"
+{      /* lex/yacc C declarations/definitions */
+                       global = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 121 "scanner.l"
+{
+                       global = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 126 "scanner.l"
+{      /* lex/yacc rules delimiter */
+                       braces = 0;
+                       if (rules == NO) {
+                               rules = YES;
+                               
+                               /* simulate a yylex() or yyparse() definition */
+                               (void) strcat(yytext, " /* ");
+                               first = strlen(yytext);
+                               if (lex == YES) {
+                                       (void) strcat(yytext, "yylex");
+                               }
+                               else {  /* yacc: yyparse implicitly calls yylex */
+                                       char *s = " yylex()";
+                                       char *cp = s + strlen(s);
+                                       while (--cp >= s) {
+                                               unput(*cp);
+                                       }
+                                       (void) strcat(yytext, "yyparse");
+                               }
+                               last = strlen(yytext);
+                               (void) strcat(yytext, " */");
+                               yyleng = strlen(yytext);
+                               yymore();
+                               return(FCNDEF);
+                       }
+                       else {
+                               rules = NO;
+                               global = YES;
+                               last = first;
+                               yymore();
+                               return(FCNEND);
+                               /* NOTREACHED */
+                       }
+               }
+       YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 160 "scanner.l"
+{ /* sdl state, treat as function def */
+                       braces = 1;
+                       fcndef = YES;
+                       token = FCNDEF;
+                       goto findident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 167 "scanner.l"
+{ /* end of an sdl state, treat as end of a function */
+                       goto endstate;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 171 "scanner.l"
+{      /* count unmatched left braces for fcn def detection */
+                       ++braces;
+                       
+                       /* mark an untagged enum/struct/union so its beginning
+                          can be found */
+                       if (tagdef) {
+                               if (braces == 1) {
+                                       esudef = YES;
+                               }
+                               token = tagdef;
+                               tagdef = '\0';
+                               last = first;
+                               yymore();
+                               return(token);
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+#line 189 "scanner.l"
+{
+                       /* attempt to correct erroneous brace count caused by:
+                        * 
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        */
+                       /* the current #if must not have an #else or #elif */
+                       if (elseelif == YES) {
+                               goto endif;
+                               /* NOTREACHED */
+                       }
+                       pseudoelif = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 208 "scanner.l"
+{ /* #if, #ifdef or #ifndef */
+                       elseelif = NO;
+                       if (pseudoelif == YES) {
+                               pseudoelif = NO;
+                               goto elif;
+                               /* NOTREACHED */
+                       }
+                       /* make sure there is room for the current brace count */
+                       if (iflevel == miflevel) {
+                               miflevel += IFLEVELINC;
+                               maxifbraces = myrealloc(maxifbraces, miflevel * sizeof(int));
+                               preifbraces = myrealloc(preifbraces, miflevel * sizeof(int));
+                       }
+                       /* push the current brace count */
+                       preifbraces[iflevel] = braces;
+                       maxifbraces[iflevel++] = 0;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 227 "scanner.l"
+{ /* #elif or #else */
+                       elseelif = YES;
+               elif:
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 242 "scanner.l"
+{      /* #endif */
+               endif:
+                       if (iflevel > 0) {
+                               
+                               /* get the maximum brace count for this #if */
+                               if (braces < maxifbraces[--iflevel]) {
+                                       braces = maxifbraces[iflevel];
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 254 "scanner.l"
+{
+                       /* could be the last enum member initializer */
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       if (--braces <= 0) {
+               endstate:
+                               braces = 0;
+                               classdef = NO;
+                       }
+                       if (braces == 0 || (braces == 1 && classdef == YES)) {
+
+                               /* if the end of an enum/struct/union definition */
+                               if (esudef == YES) {
+                                       esudef = NO;
+                               }
+                               /* if the end of the function */
+                               else if (fcndef == YES) {
+                                       fcndef = NO;
+                                       last = first;
+                                       yymore();
+                                       return(FCNEND);
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 282 "scanner.l"
+{      /* count unmatched left parentheses for function templates */
+                       ++parens;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 287 "scanner.l"
+{
+                       if (--parens <= 0) {
+                               parens = 0;
+                       }
+                       /* if the end of a function template */
+                       if (parens == templateparens) {
+                               templateparens = -1;
+                               template = NO;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 299 "scanner.l"
+{      /* if a global definition initializer */
+                       if (global == YES && ppdefine == NO && yytext[0] != '#') {
+                               initializerbraces = braces;
+                               initializer = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 307 "scanner.l"
+{      /* a if global structure field */
+                       if (global == YES && ppdefine == NO && yytext[0] != '#') {
+                               structfield = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 314 "scanner.l"
+{
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       structfield = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 323 "scanner.l"
+{      /* if the enum/struct/union was not a definition */
+                       if (braces == 0) {
+                               esudef = NO;
+                       }
+                       /* if the end of a typedef */
+                       if (braces == typedefbraces) {
+                               typedefbraces = -1;
+                       }
+                       /* if the end of a external definition */
+                       if (braces == externalbraces) {
+                               externalbraces = -1;
+                               external = NO;
+                       }
+                       structfield = NO;
+                       initializer = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 341 "scanner.l"
+{
+                               
+                       /* preprocessor macro or constant definition */
+                       ppdefine = YES;
+                       token = DEFINE;
+                       if (compress == YES) {
+                               yytext[0] = '\1';       /* compress the keyword */
+                       }
+               findident:
+                       first = yyleng - 1;
+                       while (yytext[first] != ' ' && yytext[first] != '\t') {
+                               --first;
+                       }
+                       ++first;
+                       goto fcn;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 19:
+/* rule 19 can match eol */
+YY_RULE_SETUP
+#line 358 "scanner.l"
+{      /* class definition */
+                       classdef = YES;
+                       tagdef =  'c';
+                       REJECT;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+#line 364 "scanner.l"
+{ /* enum/struct/union definition */
+                       tagdef = *(yytext + first);
+                       goto ident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+#line 369 "scanner.l"
+{ /* tag-less e/s/u definition */
+                       tagdef = yytext[first];
+                       if (braces == 0) {
+                               esudef = YES;
+                       }
+                       last = first;
+                       tagdef = '\0';
+                       goto more;
+               }                       
+       YY_BREAK
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+#line 378 "scanner.l"
+{
+                       
+                       /* warning: "if (...)" must not overflow yytext, so the content
+                          of function argument definitions is restricted, in particular
+                          parentheses are not allowed */
+
+                       /* if a function definition */
+                       /* note: "#define a (b) {" and "#if defined(a)\n#" are not */
+                       if ((braces == 0 && ppdefine == NO && yytext[0] != '#' && rules == NO) ||
+                           (braces == 1 && classdef == YES)) {
+                               fcndef = YES;
+                               token = FCNDEF;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       goto fcncal;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 396 "scanner.l"
+{ /* if a function call */
+               fcncal: if (fcndef == YES || ppdefine == YES || rules == YES) {
+                               token = FCNCALL;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       if (template == NO) {
+                               templateparens = parens;
+                               template = YES;
+                       }
+                       goto ident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+#line 409 "scanner.l"
+{      /* typedef name use */
+                       goto ident;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 413 "scanner.l"
+{
+                       char    *s;
+
+                       if (global == YES && ppdefine == NO && yytext[0] != '#' &&
+                           external == NO && initializer == NO && 
+                           arraydimension == NO && structfield == NO &&
+                           template == NO && fcndef == NO) {
+                               if (esudef == YES) {    /* if enum/struct/union */
+                                       token = MEMBERDEF;
+                               }
+                               else {
+                                       token = GLOBALDEF;
+                               }
+                       }
+                       else {
+               ident:          token = IDENT;
+                       }
+               fcn:
+                       /* if a long line */
+                       if (yyleng > STMTMAX) {
+                               int     c;
+                               
+                               /* skip to the end of the line */
+                               warning("line too long");
+                               while ((c = skipcomment_input()) != LEXEOF) { 
+                                       if (c == '\n') {
+                                               unput(c);
+                                               break;
+                                       }
+                               }
+                       }
+                       /* truncate a long symbol */
+                       if (yyleng - first > PATLEN) {
+                               warning("symbol too long");
+                               yyleng = first + PATLEN;
+                               yytext[yyleng] = '\0';
+                       }
+                       /* if a keyword */
+                       yymore();
+                       if ((s = lookup(yytext + first)) != NULL) {
+                               first = yyleng;
+                               
+                               /* if the start of a typedef */
+                               if (s == typedeftext) {
+                                       typedefbraces = braces;
+                                       oldtype = YES;
+                               }
+                               /* if an enum/struct/union */
+                               /* (needed for "typedef struct tag name;" so
+                                  tag isn't marked as the typedef name) */
+                               else if (s == enumtext || s == structtext || s == uniontext) {
+                               }
+                               /* if an external definition */
+                               else if (s == externtext) {
+                                       externalbraces = braces;
+                                       external = YES;
+                               }
+                               /* keyword doesn't start a function template */
+                               else if (templateparens == parens && template == YES) {
+                                       templateparens = -1;
+                                       template = NO;
+                               }
+                               else {  /* next identifier after typedef was a keyword */
+                                       oldtype = NO;
+                               }
+                       }
+                       else {  /* identifier */
+                               last = yyleng;
+                               
+                               /* if a class/enum/struct/union tag definition */
+                               if (tagdef && strnotequal(yytext + first, "class")) {
+                                       token = tagdef;
+                                       tagdef = '\0';
+                                       if (braces == 0) {
+                                               esudef = YES;
+                                       }
+                               }
+                               /* if a typedef name */
+                               else if (braces == typedefbraces && oldtype == NO &&
+                                   arraydimension == NO) {
+                                       token = TYPEDEF;
+                               }
+                               else {
+                                       oldtype = NO;
+                               }
+                               return(token);
+                               /* NOTREACHED */
+                       }
+               }
+       YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 502 "scanner.l"
+{      /* array dimension (don't worry or about subscripts) */
+                       arraydimension = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 507 "scanner.l"
+{
+                       arraydimension = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 28:
+/* rule 28 can match eol */
+YY_RULE_SETUP
+#line 512 "scanner.l"
+{      /* preprocessor statement is continued on next line */
+                       goto eol;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 29:
+/* rule 29 can match eol */
+YY_RULE_SETUP
+#line 516 "scanner.l"
+{      /* end of the line */
+                       if (ppdefine == YES) {  /* end of a #define */
+                               ppdefine = NO;
+                               yyless(yyleng - 1);     /* rescan \n */
+                               last = first;
+                               yymore();
+                               return(DEFINEEND);
+                       }
+                       /* skip the first 8 columns of a breakpoint listing line */
+                       /* and skip the file path in the page header */
+                       if (bplisting == YES) {
+                               int     c, i;
+
+                               switch (skipcomment_input()) {  /* tab and EOF just fall through */
+                               case ' ':       /* breakpoint number line */
+                               case '[':
+                                       for (i = 1; i < 8 && skipcomment_input() != LEXEOF; ++i)
+                                               ;
+                                       break;
+                               case '.':       /* header line */
+                               case '/':
+                                       /* skip to the end of the line */
+                                       while ((c = skipcomment_input()) != LEXEOF) {
+                                               if (c == '\n') {
+                                                       unput(c);
+                                                       break;
+                                               }
+                                       }
+                                       break;
+                               case '\n':      /* empty line */
+                                       unput('\n');
+                                       break;
+                               }
+                       }
+               eol:
+                       ++myylineno;
+                       first = 0;
+                       last = 0;
+                       if (symbols > 0) {
+                               return(NEWLINE);
+                       }
+                       lineno = myylineno;
+               }
+       YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 559 "scanner.l"
+{      /* character constant */
+                       if (sdl == NO) {
+                               multicharconstant('\'');
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 566 "scanner.l"
+{      /* string constant */
+                       multicharconstant('"');
+                       goto more;
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 571 "scanner.l"
+{      /* don't save leading white space */
+               }
+       YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 573 "scanner.l"
+{ /* #include file */
+                       char    *s;
+                       
+                       s = strpbrk(yytext, "\"<");
+                       if (!s)
+                               return(LEXERR);
+                       incfile(s + 1, s);
+                       /* HBB: avoid pointer mismatch if yytext is
+                        * unsigned, or a pointer */
+                       first = s - (char *)&(yytext[0]);
+                       last = yyleng;
+                       if (compress == YES) {
+                               yytext[0] = '\2';       /* compress the keyword */
+                       }
+                       yymore();
+                       return(INCLUDE);
+                       /* NOTREACHED */
+               }
+       YY_BREAK
+case 34:
+#line 592 "scanner.l"
+case 35:
+#line 593 "scanner.l"
+case 36:
+YY_RULE_SETUP
+#line 593 "scanner.l"
+{      /* punctuation and operators */
+               more:   first = yyleng;
+                       yymore();
+               }
+       YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 597 "scanner.l"
+ECHO;
+       YY_BREAK
+#line 1787 "scanner.c"
+                       case YY_STATE_EOF(INITIAL):
+                       case YY_STATE_EOF(SDL):
+                               yyterminate();
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = (yy_hold_char);
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed yyin at a new source and called
+                        * yylex().  If so, then we have to assure
+                        * consistency between YY_CURRENT_BUFFER and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state(  );
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+                       yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++(yy_c_buf_p);
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+                               yy_cp = (yy_c_buf_p);
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer(  ) )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               (yy_did_buffer_switch_on_eof) = 0;
+
+                               if ( yywrap( ) )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * yytext, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               (yy_c_buf_p) =
+                                       (yytext_ptr) + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               (yy_c_buf_p) =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+       else
+               {
+                       int num_to_read =
+                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+
+                       YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+                       (yy_n_chars), (size_t) num_to_read );
+
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       if ( (yy_n_chars) == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       yyrestart(yyin  );
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+               /* Extend the array by 50%, plus the number we really need. */
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+       }
+
+       (yy_n_chars) += number_to_move;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+       (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+       return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (void)
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+    
+       yy_current_state = (yy_start);
+       yy_current_state += YY_AT_BOL();
+
+       (yy_state_ptr) = (yy_state_buf);
+       *(yy_state_ptr)++ = yy_current_state;
+
+       for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+               {
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               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 >= 152 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               *(yy_state_ptr)++ = yy_current_state;
+               }
+
+       return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+{
+       register int yy_is_jam;
+    
+       register YY_CHAR yy_c = 1;
+       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 >= 152 )
+                       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 == 151);
+       if ( ! yy_is_jam )
+               *(yy_state_ptr)++ = yy_current_state;
+
+       return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp )
+{
+       register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+       /* undo effects of setting up yytext */
+       *yy_cp = (yy_hold_char);
+
+       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register int number_to_move = (yy_n_chars) + 2;
+               register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+               register char *source =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+       (yytext_ptr) = yy_bp;
+       (yy_hold_char) = *yy_cp;
+       (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+{
+       int c;
+    
+       *(yy_c_buf_p) = (yy_hold_char);
+
+       if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       /* This was really a NUL. */
+                       *(yy_c_buf_p) = '\0';
+
+               else
+                       { /* need more input */
+                       int offset = (yy_c_buf_p) - (yytext_ptr);
+                       ++(yy_c_buf_p);
+
+                       switch ( yy_get_next_buffer(  ) )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       yyrestart(yyin );
+
+                                       /*FALLTHROUGH*/
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( yywrap( ) )
+                                               return EOF;
+
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput();
+#else
+                                       return input();
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       (yy_c_buf_p) = (yytext_ptr) + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
+       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       (yy_hold_char) = *++(yy_c_buf_p);
+
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+
+       return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file )
+{
+    
+       if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack ();
+               YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE );
+       }
+
+       yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+       yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+{
+    
+       /* TODO. We should be able to replace this entire function body
+        * with
+        *              yypop_buffer_state();
+        *              yypush_buffer_state(new_buffer);
+     */
+       yyensure_buffer_stack ();
+       if ( YY_CURRENT_BUFFER == new_buffer )
+               return;
+
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+       yy_load_buffer_state( );
+
+       /* We don't actually know whether we did this switch during
+        * EOF (yywrap()) processing, but the only time this flag
+        * is looked at is after yywrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state  (void)
+{
+       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+       (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+{
+       YY_BUFFER_STATE b;
+    
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       yy_init_buffer(b,file );
+
+       return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * 
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b )
+{
+    
+       if ( ! b )
+               return;
+
+       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               yyfree((void *) b->yy_ch_buf  );
+
+       yyfree((void *) b  );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+
+{
+       int oerrno = errno;
+    
+       yy_flush_buffer(b );
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+       errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b )
+{
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == YY_CURRENT_BUFFER )
+               yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+       if (new_buffer == NULL)
+               return;
+
+       yyensure_buffer_stack();
+
+       /* This block is copied from yy_switch_to_buffer. */
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       /* Only push if top exists. Otherwise, replace top. */
+       if (YY_CURRENT_BUFFER)
+               (yy_buffer_stack_top)++;
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+       /* copied from yy_switch_to_buffer. */
+       yy_load_buffer_state( );
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+void yypop_buffer_state (void)
+{
+       if (!YY_CURRENT_BUFFER)
+               return;
+
+       yy_delete_buffer(YY_CURRENT_BUFFER );
+       YY_CURRENT_BUFFER_LVALUE = NULL;
+       if ((yy_buffer_stack_top) > 0)
+               --(yy_buffer_stack_top);
+
+       if (YY_CURRENT_BUFFER) {
+               yy_load_buffer_state( );
+               (yy_did_buffer_switch_on_eof) = 1;
+       }
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+       int num_to_alloc;
+    
+       if (!(yy_buffer_stack)) {
+
+               /* First allocation is just for 2 elements, since we don't know if this
+                * scanner will even need a stack. We use 2 instead of 1 to avoid an
+                * immediate realloc on the next call.
+         */
+               num_to_alloc = 1;
+               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                                                                 
+               memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+                               
+               (yy_buffer_stack_max) = num_to_alloc;
+               (yy_buffer_stack_top) = 0;
+               return;
+       }
+
+       if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+               /* Increase the buffer to prepare for a possible push. */
+               int grow_size = 8 /* arbitrary grow size */;
+
+               num_to_alloc = (yy_buffer_stack_max) + grow_size;
+               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+                                                               ((yy_buffer_stack),
+                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+               /* zero only the new slots.*/
+               memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+               (yy_buffer_stack_max) = num_to_alloc;
+       }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+{
+       YY_BUFFER_STATE b;
+    
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       yy_switch_to_buffer(b  );
+
+       return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+    
+       return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
+{
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n;
+       int i;
+    
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = _yybytes_len + 2;
+       buf = (char *) yyalloc(n  );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+       for ( i = 0; i < _yybytes_len; ++i )
+               buf[i] = yybytes[i];
+
+       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = yy_scan_buffer(buf,n );
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               yytext[yyleng] = (yy_hold_char); \
+               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               (yy_hold_char) = *(yy_c_buf_p); \
+               *(yy_c_buf_p) = '\0'; \
+               yyleng = yyless_macro_arg; \
+               } \
+       while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ * 
+ */
+int yyget_lineno  (void)
+{
+        
+    return yylineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *yyget_in  (void)
+{
+        return yyin;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *yyget_out  (void)
+{
+        return yyout;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+int yyget_leng  (void)
+{
+        return yyleng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *yyget_text  (void)
+{
+        return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void yyset_lineno (int  line_number )
+{
+    
+    yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str )
+{
+        yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str )
+{
+        yyout = out_str ;
+}
+
+int yyget_debug  (void)
+{
+        return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug )
+{
+        yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+    (yy_state_buf) = 0;
+    (yy_state_ptr) = 0;
+    (yy_full_match) = 0;
+    (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+       while(YY_CURRENT_BUFFER){
+               yy_delete_buffer(YY_CURRENT_BUFFER  );
+               YY_CURRENT_BUFFER_LVALUE = NULL;
+               yypop_buffer_state();
+       }
+
+       /* Destroy the stack itself. */
+       yyfree((yy_buffer_stack) );
+       (yy_buffer_stack) = NULL;
+
+    yyfree ( (yy_state_buf) );
+    (yy_state_buf)  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( );
+
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size )
+{
+       return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size )
+{
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 597 "scanner.l"
+
+
+
+void
+initscanner(char *srcfile)
+{
+       char    *s;
+       
+       if (maxifbraces == NULL) {
+               maxifbraces = mymalloc(miflevel * sizeof(int));
+               preifbraces = mymalloc(miflevel * sizeof(int));
+       }
+       first = 0;              /* buffer index for first char of symbol */
+       last = 0;               /* buffer index for last char of symbol */
+       lineno = 1;             /* symbol line number */
+       myylineno = 1;          /* input line number */
+       arraydimension = NO;    /* inside array dimension declaration */
+       bplisting = NO;         /* breakpoint listing */
+       braces = 0;             /* unmatched left brace count */
+       classdef = NO;          /* c++ class definition */
+       elseelif = NO;          /* #else or #elif found */
+       esudef = NO;            /* enum/struct/union global definition */
+       external = NO;          /* external definition */
+       externalbraces = -1;    /* external definition outer brace count */
+       fcndef = NO;            /* function definition */
+       global = YES;           /* file global scope (outside functions) */
+       iflevel = 0;            /* #if nesting level */
+       initializer = NO;       /* data initializer */
+       initializerbraces = -1; /* data initializer outer brace count */
+       lex = NO;               /* lex file */
+       parens = 0;             /* unmatched left parenthesis count */
+       ppdefine = NO;          /* preprocessor define statement */
+       pseudoelif = NO;        /* pseudo-#elif */
+       oldtype = NO;           /* next identifier is an old type */
+       rules = NO;             /* lex/yacc rules */
+       sdl = NO;               /* sdl file */
+       structfield = NO;       /* structure field declaration */
+       tagdef = '\0';          /* class/enum/struct/union tag definition */
+       template = NO;          /* function template */
+       templateparens = -1;    /* function template outer parentheses count */
+       typedefbraces = -1;     /* initial typedef braces count */
+
+       BEGIN 0;
+
+       /* if this is not a C file */
+       if ((s = strrchr(srcfile, '.')) != NULL) {
+               switch (*++s) { /* this switch saves time on C files */
+               case 'b':
+                       if (strcmp(s, "bp") == 0) {     /* breakpoint listing */
+                               bplisting = YES;
+                       }
+                       break;
+               case 'l':
+                       if (strcmp(s, "l") == 0) {      /* lex */
+                               lex = YES;
+                               global = NO;
+                       }
+                       break;
+               case 's':
+                       if (strcmp(s, "sd") == 0) {     /* sdl */
+                               sdl = YES;
+                               BEGIN SDL;
+                       }
+                       break;
+               case 'y':
+                       if (strcmp(s, "y") == 0) {      /* yacc */
+                               global = NO;
+                       }
+                       break;
+               }
+       }
+}
+
+int
+skipcomment_input(void)
+{
+       int     c;
+
+       if ((c = getc (yyin)) == '/') {
+               return comment ();
+       }
+       else {
+               return c;
+       }
+       
+}
+
+int
+comment_input(void)
+{
+       int c;
+
+       c = getc (yyin);
+
+       return (c == EOF) ? LEXEOF : c;
+}
+
+int
+comment(void)
+{
+       int     c, lastc;
+
+       do {
+               if ((c = getc(yyin)) == '*') {  /* C comment */
+                       lastc = '\0';
+                       while ((c = getc(yyin)) != EOF &&
+                           (c != '/' || lastc != '*')) { /* fewer '/'s */
+                               if (c == '\n') {
+                                       ++myylineno;
+                               }
+                               lastc = c;
+                       }
+                       /* return a blank for Reiser cpp token concatenation */
+                       if ((c = getc(yyin)) == '_' || isalnum(c)) {
+                               (void) ungetc(c, yyin);
+                               c = ' ';
+                               break;
+                       }
+               }
+               else if (c == '/') {            /* C++ comment */
+                       while ((c = getc(yyin)) != EOF && c != '\n') {
+                               ;
+                       }
+                       break;
+               }
+               else {  /* not a comment */
+                       (void) ungetc(c, yyin);
+                       c = '/';
+                       break;
+                       /* NOTREACHED */
+               }
+               
+       /* there may be an immediately following comment */
+       } while (c == '/');
+       return(c);
+}
+
+void
+multicharconstant(char terminator)
+{
+       char    c;
+
+       /* scan until the terminator is found */
+       while ((c = yytext[yyleng++] = comment_input()) != terminator) {
+               switch (c) {
+               case '\\':      /* escape character */
+                       if ((yytext[yyleng++] = comment_input()) == '\n') {
+                               ++myylineno;
+                       }
+                       break;
+               case '\t':      /* tab character */
+               
+                       /* if not a lex program, continue */
+                       if (lex == NO) {
+                               break;
+                       }
+                       /* fall through */
+                       
+               case '\n':      /* illegal character */
+                       
+                       /* assume the terminator is missing, so put
+                          this character back */
+                       unput(c);
+                       yytext[--yyleng] = '\0';
+                       /* fall through */
+                       
+               case LEXEOF:    /* end of file */
+                       return;
+                       
+               default:
+                       /* change a control character to a blank */
+                       if (!isprint((unsigned char)c)) {
+                               yytext[yyleng - 1] = ' ';
+                       }
+               }
+               /* if this token will overflow the line buffer */
+               /* note: '\\' may cause yyleng to be > STMTMAX */
+               if (yyleng >= STMTMAX) {
+                       
+                       /* truncate the token */
+                       while ((c = comment_input()) != LEXEOF) {
+                               if (c == terminator) {
+                                       unput(c);
+                                       break;
+                               }
+                               else if (c == '\n') {
+                                       ++myylineno;
+                               }
+                       }
+               }
+       }
+       yytext[yyleng] = '\0';
+}
+
diff --git a/src/scanner.h b/src/scanner.h
new file mode 100644 (file)
index 0000000..8f2dd1c
--- /dev/null
@@ -0,0 +1,97 @@
+/*===========================================================================
+ Copyright (c) 2001, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: scanner.h,v 1.5 2009/08/28 14:28:27 nhorman Exp $ */
+
+
+#ifndef CSCOPE_SCANNER_H
+#define CSCOPE_SCANNER_H
+
+#include <stdio.h>
+
+#undef YYLMAX          
+#define YYLMAX STMTMAX + PATLEN + 1    /* scanner line buffer size */
+
+/* cross-reference database mark characters (when new ones are added, 
+ * update the cscope.out format description in cscope.1)
+ */
+#define CLASSDEF       'c'
+#define        DEFINE          '#'
+#define        DEFINEEND       ')'
+#define ENUMDEF                'e'
+#define FCNCALL                '`'
+#define FCNDEF         '$'
+#define FCNEND         '}'
+#define GLOBALDEF      'g'
+#define        INCLUDE         '~'
+#define MEMBERDEF      'm'
+#define NEWFILE                '@'
+#define STRUCTDEF      's'
+#define TYPEDEF                't'
+#define UNIONDEF       'u'
+
+/* other scanner token types */
+#define        LEXEOF  0
+#define        LEXERR  1
+#define        IDENT   2       
+#define        NEWLINE 3       
+
+/* scanner.l global data */
+extern int     first;          /* buffer index for first char of symbol */
+extern int     last;           /* buffer index for last char of symbol */
+extern int     lineno;         /* symbol line number */
+extern FILE    *yyin;          /* input file descriptor */
+extern FILE    *yyout;         /* output file */
+extern int     myylineno;      /* input line number */
+
+#ifdef USING_LEX
+/* HBB 20010430: if lex is used instead of flex, have to simulate the
+ * private copies of yytext and yytext for the world outside scanner.l: */
+/* FIXME: there should be a feature test for this! */
+#if defined(__OSF1__) || defined(__sun) || defined(_AIX)
+extern char    yytext[];
+#else
+extern unsigned char   yytext[];
+#endif
+extern int     yyleng;
+# define my_yytext yytext
+# define my_yyleng yyleng
+#else
+extern char    *my_yytext;     /* private copy of input line */
+extern size_t  my_yyleng;      /* ... and current length of it */
+#endif
+
+/* The master function exported by scanner.l */
+int    yylex(void);
+void   initscanner(char *srcfile);
+
+#endif /* CSCOPE_SCANNER_H ends */
diff --git a/src/scanner.l b/src/scanner.l
new file mode 100644 (file)
index 0000000..e96b01d
--- /dev/null
@@ -0,0 +1,788 @@
+%{
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     C symbol scanner
+ */
+#include "global.h"
+#include "scanner.h"
+#include "lookup.h"
+
+/* the line counting has been moved from character reading for speed */
+/* comments are discarded */
+
+#define        IFLEVELINC      5       /* #if nesting level size increment */
+
+static char const rcsid[] = "$Id: scanner.l,v 1.10 2011/06/29 15:48:00 nhorman Exp $";
+
+int    first;  /* buffer index for first char of symbol */
+int    last;   /* buffer index for last char of symbol */
+int    lineno; /* symbol line number */
+int    myylineno = 1;
+
+static BOOL    arraydimension;         /* inside array dimension declaration */
+static BOOL    bplisting;              /* breakpoint listing */
+static int     braces;                 /* unmatched left brace count */
+static BOOL    classdef;               /* c++ class definition */
+static BOOL    elseelif;               /* #else or #elif found */
+static BOOL    esudef;                 /* enum/struct/union global definition */
+static BOOL    external;               /* external definition */
+static int     externalbraces;         /* external definition outer brace count */
+static BOOL    fcndef;                 /* function definition */
+static BOOL    global;                 /* file global scope (outside functions) */
+static int     iflevel;                /* #if nesting level */
+static BOOL    initializer;            /* data initializer */
+static int     initializerbraces;      /* data initializer outer brace count */
+static BOOL    lex;                    /* lex file */
+static int     miflevel = IFLEVELINC;  /* maximum #if nesting level */
+static int     *maxifbraces;           /* maximum brace count within #if */
+static int     *preifbraces;           /* brace count before #if */
+static int     parens;                 /* unmatched left parenthesis count */
+static BOOL    ppdefine;               /* preprocessor define statement */
+static BOOL    pseudoelif;             /* pseudo-#elif */
+static BOOL    oldtype;                /* next identifier is an old type */
+static BOOL    rules;                  /* lex/yacc rules */
+static BOOL    sdl;                    /* sdl file */
+static BOOL    structfield;            /* structure field declaration */
+static int     tagdef;                 /* class/enum/struct/union tag definition */
+static BOOL    template;               /* function template */
+static int     templateparens;         /* function template outer parentheses count */
+static int     typedefbraces = -1;     /* initial typedef brace count */
+static int     token;                  /* token found */
+
+
+void   multicharconstant(char terminator);
+int    skipcomment_input(void);
+int    comment(void);
+
+#ifdef FLEX_SCANNER
+#define YY_INPUT(buf,result,max_size) \
+       {\
+               int c = skipcomment_input (); \
+               result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
+       }
+#else
+/* Assume this is the AT&T/SCO style lex */
+#undef input
+#define input()  ((yytchar=(yytchar=yysptr>yysbuf?*(unsigned char *)--yysptr:getc(yyin))=='/'?comment():yytchar)==EOF?LEXEOF:yytchar)
+#define noncommentinput()  ((yytchar=yysptr>yysbuf?*--yysptr:getc(yyin))==EOF?LEXEOF:yytchar)
+#undef unput
+#define unput(c) (*yysptr++=(c))
+
+#endif
+
+%}
+
+ws             [ \t\r\v\f]
+wsnl           [ \t\r\v\f\n]
+identifier     [a-zA-Z_$][a-zA-Z_0-9$]*
+number         \.?[0-9][.0-9a-fA-FlLuUxX]*
+
+%start SDL
+%a 12000
+%o 7000
+%%
+%\{            {       /* lex/yacc C declarations/definitions */
+                       global = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+%\}            {
+                       global = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+^%%            {       /* lex/yacc rules delimiter */
+                       braces = 0;
+                       if (rules == NO) {
+                               rules = YES;
+                               
+                               /* simulate a yylex() or yyparse() definition */
+                               (void) strcat(yytext, " /* ");
+                               first = strlen(yytext);
+                               if (lex == YES) {
+                                       (void) strcat(yytext, "yylex");
+                               }
+                               else {  /* yacc: yyparse implicitly calls yylex */
+                                       char *s = " yylex()";
+                                       char *cp = s + strlen(s);
+                                       while (--cp >= s) {
+                                               unput(*cp);
+                                       }
+                                       (void) strcat(yytext, "yyparse");
+                               }
+                               last = strlen(yytext);
+                               (void) strcat(yytext, " */");
+                               yyleng = strlen(yytext);
+                               yymore();
+                               return(FCNDEF);
+                       }
+                       else {
+                               rules = NO;
+                               global = YES;
+                               last = first;
+                               yymore();
+                               return(FCNEND);
+                               /* NOTREACHED */
+                       }
+               }
+<SDL>STATE{ws}+({identifier}|\*)       { /* sdl state, treat as function def */
+                       braces = 1;
+                       fcndef = YES;
+                       token = FCNDEF;
+                       goto findident;
+                       /* NOTREACHED */
+               }
+<SDL>ENDSTATE{ws}      { /* end of an sdl state, treat as end of a function */
+                       goto endstate;
+                       /* NOTREACHED */
+               }
+\{             {       /* count unmatched left braces for fcn def detection */
+                       ++braces;
+                       
+                       /* mark an untagged enum/struct/union so its beginning
+                          can be found */
+                       if (tagdef) {
+                               if (braces == 1) {
+                                       esudef = YES;
+                               }
+                               token = tagdef;
+                               tagdef = '\0';
+                               last = first;
+                               yymore();
+                               return(token);
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\#{ws}*endif/.*\n{wsnl}*#{ws}*if       {
+                       /* attempt to correct erroneous brace count caused by:
+                        * 
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        * #if ...
+                        *      ... {
+                        * #endif
+                        */
+                       /* the current #if must not have an #else or #elif */
+                       if (elseelif == YES) {
+                               goto endif;
+                               /* NOTREACHED */
+                       }
+                       pseudoelif = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\#{ws}*ifn?(def)?      { /* #if, #ifdef or #ifndef */
+                       elseelif = NO;
+                       if (pseudoelif == YES) {
+                               pseudoelif = NO;
+                               goto elif;
+                               /* NOTREACHED */
+                       }
+                       /* make sure there is room for the current brace count */
+                       if (iflevel == miflevel) {
+                               miflevel += IFLEVELINC;
+                               maxifbraces = myrealloc(maxifbraces, miflevel * sizeof(int));
+                               preifbraces = myrealloc(preifbraces, miflevel * sizeof(int));
+                       }
+                       /* push the current brace count */
+                       preifbraces[iflevel] = braces;
+                       maxifbraces[iflevel++] = 0;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\#{ws}*el(se|if)       { /* #elif or #else */
+                       elseelif = YES;
+               elif:
+                       if (iflevel > 0) {
+                               
+                               /* save the maximum brace count for this #if */
+                               if (braces > maxifbraces[iflevel - 1]) {
+                                       maxifbraces[iflevel - 1] = braces;
+                               }
+                               /* restore the brace count to before the #if */
+                               braces = preifbraces[iflevel - 1];
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\#{ws}*endif   {       /* #endif */
+               endif:
+                       if (iflevel > 0) {
+                               
+                               /* get the maximum brace count for this #if */
+                               if (braces < maxifbraces[--iflevel]) {
+                                       braces = maxifbraces[iflevel];
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\}             {
+                       /* could be the last enum member initializer */
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       if (--braces <= 0) {
+               endstate:
+                               braces = 0;
+                               classdef = NO;
+                       }
+                       if (braces == 0 || (braces == 1 && classdef == YES)) {
+
+                               /* if the end of an enum/struct/union definition */
+                               if (esudef == YES) {
+                                       esudef = NO;
+                               }
+                               /* if the end of the function */
+                               else if (fcndef == YES) {
+                                       fcndef = NO;
+                                       last = first;
+                                       yymore();
+                                       return(FCNEND);
+                               }
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\(             {       /* count unmatched left parentheses for function templates */
+                       ++parens;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\)             {
+                       if (--parens <= 0) {
+                               parens = 0;
+                       }
+                       /* if the end of a function template */
+                       if (parens == templateparens) {
+                               templateparens = -1;
+                               template = NO;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+=              {       /* if a global definition initializer */
+                       if (global == YES && ppdefine == NO && yytext[0] != '#') {
+                               initializerbraces = braces;
+                               initializer = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+:              {       /* a if global structure field */
+                       if (global == YES && ppdefine == NO && yytext[0] != '#') {
+                               structfield = YES;
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\,             {
+                       if (braces == initializerbraces) {
+                               initializerbraces = -1;
+                               initializer = NO;
+                       }
+                       structfield = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+;              {       /* if the enum/struct/union was not a definition */
+                       if (braces == 0) {
+                               esudef = NO;
+                       }
+                       /* if the end of a typedef */
+                       if (braces == typedefbraces) {
+                               typedefbraces = -1;
+                       }
+                       /* if the end of a external definition */
+                       if (braces == externalbraces) {
+                               externalbraces = -1;
+                               external = NO;
+                       }
+                       structfield = NO;
+                       initializer = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\#{ws}*define{ws}+{identifier} {
+                               
+                       /* preprocessor macro or constant definition */
+                       ppdefine = YES;
+                       token = DEFINE;
+                       if (compress == YES) {
+                               yytext[0] = '\1';       /* compress the keyword */
+                       }
+               findident:
+                       first = yyleng - 1;
+                       while (yytext[first] != ' ' && yytext[first] != '\t') {
+                               --first;
+                       }
+                       ++first;
+                       goto fcn;
+                       /* NOTREACHED */
+               }
+class{ws}+{identifier}({wsnl}|[a-zA-Z0-9_():])*\{      {       /* class definition */
+                       classdef = YES;
+                       tagdef =  'c';
+                       REJECT;
+                       /* NOTREACHED */
+               }
+(enum|struct|union)/({wsnl}+{identifier}){wsnl}*\{     { /* enum/struct/union definition */
+                       tagdef = *(yytext + first);
+                       goto ident;
+                       /* NOTREACHED */
+               }
+(enum|struct|union)/{wsnl}*\{          { /* tag-less e/s/u definition */
+                       tagdef = yytext[first];
+                       if (braces == 0) {
+                               esudef = YES;
+                       }
+                       last = first;
+                       tagdef = '\0';
+                       goto more;
+               }                       
+{identifier}/{ws}*\(({wsnl}|a-zA-Z0-9_*&[\]=,.:])*\)({wsnl}|[()])*[:a-zA-Z_#{] {
+                       
+                       /* warning: "if (...)" must not overflow yytext, so the content
+                          of function argument definitions is restricted, in particular
+                          parentheses are not allowed */
+
+                       /* if a function definition */
+                       /* note: "#define a (b) {" and "#if defined(a)\n#" are not */
+                       if ((braces == 0 && ppdefine == NO && yytext[0] != '#' && rules == NO) ||
+                           (braces == 1 && classdef == YES)) {
+                               fcndef = YES;
+                               token = FCNDEF;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       goto fcncal;
+                       /* NOTREACHED */
+               }
+{identifier}/{ws}*\(   { /* if a function call */
+               fcncal: if (fcndef == YES || ppdefine == YES || rules == YES) {
+                               token = FCNCALL;
+                               goto fcn;
+                               /* NOTREACHED */
+                       }
+                       if (template == NO) {
+                               templateparens = parens;
+                               template = YES;
+                       }
+                       goto ident;
+                       /* NOTREACHED */
+               }
+{identifier}/([*]|{wsnl})+[a-zA-Z0-9_] {       /* typedef name use */
+                       goto ident;
+                       /* NOTREACHED */
+               }
+{identifier}   {
+                       char    *s;
+
+                       if (global == YES && ppdefine == NO && yytext[0] != '#' &&
+                           external == NO && initializer == NO && 
+                           arraydimension == NO && structfield == NO &&
+                           template == NO && fcndef == NO) {
+                               if (esudef == YES) {    /* if enum/struct/union */
+                                       token = MEMBERDEF;
+                               }
+                               else {
+                                       token = GLOBALDEF;
+                               }
+                       }
+                       else {
+               ident:          token = IDENT;
+                       }
+               fcn:
+                       /* if a long line */
+                       if (yyleng > STMTMAX) {
+                               int     c;
+                               
+                               /* skip to the end of the line */
+                               warning("line too long");
+                               while ((c = skipcomment_input()) != LEXEOF) { 
+                                       if (c == '\n') {
+                                               unput(c);
+                                               break;
+                                       }
+                               }
+                       }
+                       /* truncate a long symbol */
+                       if (yyleng - first > PATLEN) {
+                               warning("symbol too long");
+                               yyleng = first + PATLEN;
+                               yytext[yyleng] = '\0';
+                       }
+                       /* if a keyword */
+                       yymore();
+                       if ((s = lookup(yytext + first)) != NULL) {
+                               first = yyleng;
+                               
+                               /* if the start of a typedef */
+                               if (s == typedeftext) {
+                                       typedefbraces = braces;
+                                       oldtype = YES;
+                               }
+                               /* if an enum/struct/union */
+                               /* (needed for "typedef struct tag name;" so
+                                  tag isn't marked as the typedef name) */
+                               else if (s == enumtext || s == structtext || s == uniontext) {
+                               }
+                               /* if an external definition */
+                               else if (s == externtext) {
+                                       externalbraces = braces;
+                                       external = YES;
+                               }
+                               /* keyword doesn't start a function template */
+                               else if (templateparens == parens && template == YES) {
+                                       templateparens = -1;
+                                       template = NO;
+                               }
+                               else {  /* next identifier after typedef was a keyword */
+                                       oldtype = NO;
+                               }
+                       }
+                       else {  /* identifier */
+                               last = yyleng;
+                               
+                               /* if a class/enum/struct/union tag definition */
+                               if (tagdef && strnotequal(yytext + first, "class")) {
+                                       token = tagdef;
+                                       tagdef = '\0';
+                                       if (braces == 0) {
+                                               esudef = YES;
+                                       }
+                               }
+                               /* if a typedef name */
+                               else if (braces == typedefbraces && oldtype == NO &&
+                                   arraydimension == NO) {
+                                       token = TYPEDEF;
+                               }
+                               else {
+                                       oldtype = NO;
+                               }
+                               return(token);
+                               /* NOTREACHED */
+                       }
+               }
+\[             {       /* array dimension (don't worry or about subscripts) */
+                       arraydimension = YES;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\]             {
+                       arraydimension = NO;
+                       goto more;
+                       /* NOTREACHED */
+               }
+\\\n           {       /* preprocessor statement is continued on next line */
+                       goto eol;
+                       /* NOTREACHED */
+               }
+\n             {       /* end of the line */
+                       if (ppdefine == YES) {  /* end of a #define */
+                               ppdefine = NO;
+                               yyless(yyleng - 1);     /* rescan \n */
+                               last = first;
+                               yymore();
+                               return(DEFINEEND);
+                       }
+                       /* skip the first 8 columns of a breakpoint listing line */
+                       /* and skip the file path in the page header */
+                       if (bplisting == YES) {
+                               int     c, i;
+
+                               switch (skipcomment_input()) {  /* tab and EOF just fall through */
+                               case ' ':       /* breakpoint number line */
+                               case '[':
+                                       for (i = 1; i < 8 && skipcomment_input() != LEXEOF; ++i)
+                                               ;
+                                       break;
+                               case '.':       /* header line */
+                               case '/':
+                                       /* skip to the end of the line */
+                                       while ((c = skipcomment_input()) != LEXEOF) {
+                                               if (c == '\n') {
+                                                       unput(c);
+                                                       break;
+                                               }
+                                       }
+                                       break;
+                               case '\n':      /* empty line */
+                                       unput('\n');
+                                       break;
+                               }
+                       }
+               eol:
+                       ++myylineno;
+                       first = 0;
+                       last = 0;
+                       if (symbols > 0) {
+                               return(NEWLINE);
+                       }
+                       lineno = myylineno;
+               }
+\'             {       /* character constant */
+                       if (sdl == NO) {
+                               multicharconstant('\'');
+                       }
+                       goto more;
+                       /* NOTREACHED */
+               }
+\"             {       /* string constant */
+                       multicharconstant('"');
+                       goto more;
+                       /* NOTREACHED */
+               }
+^{ws}+         {       /* don't save leading white space */
+               }
+\#{ws}*include{ws}*["<][^"> \t\n]+     { /* #include file */
+                       char    *s;
+                       
+                       s = strpbrk(yytext, "\"<");
+                       if (!s)
+                               return(LEXERR);
+                       incfile(s + 1, s);
+                       /* HBB: avoid pointer mismatch if yytext is
+                        * unsigned, or a pointer */
+                       first = s - (char *)&(yytext[0]);
+                       last = yyleng;
+                       if (compress == YES) {
+                               yytext[0] = '\2';       /* compress the keyword */
+                       }
+                       yymore();
+                       return(INCLUDE);
+                       /* NOTREACHED */
+               }
+\#{ws}*{identifier}    |       /* preprocessor keyword */
+{number}       |       /* number */
+.              {       /* punctuation and operators */
+               more:   first = yyleng;
+                       yymore();
+               }
+%%
+
+void
+initscanner(char *srcfile)
+{
+       char    *s;
+       
+       if (maxifbraces == NULL) {
+               maxifbraces = mymalloc(miflevel * sizeof(int));
+               preifbraces = mymalloc(miflevel * sizeof(int));
+       }
+       first = 0;              /* buffer index for first char of symbol */
+       last = 0;               /* buffer index for last char of symbol */
+       lineno = 1;             /* symbol line number */
+       myylineno = 1;          /* input line number */
+       arraydimension = NO;    /* inside array dimension declaration */
+       bplisting = NO;         /* breakpoint listing */
+       braces = 0;             /* unmatched left brace count */
+       classdef = NO;          /* c++ class definition */
+       elseelif = NO;          /* #else or #elif found */
+       esudef = NO;            /* enum/struct/union global definition */
+       external = NO;          /* external definition */
+       externalbraces = -1;    /* external definition outer brace count */
+       fcndef = NO;            /* function definition */
+       global = YES;           /* file global scope (outside functions) */
+       iflevel = 0;            /* #if nesting level */
+       initializer = NO;       /* data initializer */
+       initializerbraces = -1; /* data initializer outer brace count */
+       lex = NO;               /* lex file */
+       parens = 0;             /* unmatched left parenthesis count */
+       ppdefine = NO;          /* preprocessor define statement */
+       pseudoelif = NO;        /* pseudo-#elif */
+       oldtype = NO;           /* next identifier is an old type */
+       rules = NO;             /* lex/yacc rules */
+       sdl = NO;               /* sdl file */
+       structfield = NO;       /* structure field declaration */
+       tagdef = '\0';          /* class/enum/struct/union tag definition */
+       template = NO;          /* function template */
+       templateparens = -1;    /* function template outer parentheses count */
+       typedefbraces = -1;     /* initial typedef braces count */
+
+       BEGIN 0;
+
+       /* if this is not a C file */
+       if ((s = strrchr(srcfile, '.')) != NULL) {
+               switch (*++s) { /* this switch saves time on C files */
+               case 'b':
+                       if (strcmp(s, "bp") == 0) {     /* breakpoint listing */
+                               bplisting = YES;
+                       }
+                       break;
+               case 'l':
+                       if (strcmp(s, "l") == 0) {      /* lex */
+                               lex = YES;
+                               global = NO;
+                       }
+                       break;
+               case 's':
+                       if (strcmp(s, "sd") == 0) {     /* sdl */
+                               sdl = YES;
+                               BEGIN SDL;
+                       }
+                       break;
+               case 'y':
+                       if (strcmp(s, "y") == 0) {      /* yacc */
+                               global = NO;
+                       }
+                       break;
+               }
+       }
+}
+
+int
+skipcomment_input(void)
+{
+       int     c;
+
+       if ((c = getc (yyin)) == '/') {
+               return comment ();
+       }
+       else {
+               return c;
+       }
+       
+}
+
+int
+comment_input(void)
+{
+       int c;
+
+       c = getc (yyin);
+
+       return (c == EOF) ? LEXEOF : c;
+}
+
+int
+comment(void)
+{
+       int     c, lastc;
+
+       do {
+               if ((c = getc(yyin)) == '*') {  /* C comment */
+                       lastc = '\0';
+                       while ((c = getc(yyin)) != EOF &&
+                           (c != '/' || lastc != '*')) { /* fewer '/'s */
+                               if (c == '\n') {
+                                       ++myylineno;
+                               }
+                               lastc = c;
+                       }
+                       /* return a blank for Reiser cpp token concatenation */
+                       if ((c = getc(yyin)) == '_' || isalnum(c)) {
+                               (void) ungetc(c, yyin);
+                               c = ' ';
+                               break;
+                       }
+               }
+               else if (c == '/') {            /* C++ comment */
+                       while ((c = getc(yyin)) != EOF && c != '\n') {
+                               ;
+                       }
+                       break;
+               }
+               else {  /* not a comment */
+                       (void) ungetc(c, yyin);
+                       c = '/';
+                       break;
+                       /* NOTREACHED */
+               }
+               
+       /* there may be an immediately following comment */
+       } while (c == '/');
+       return(c);
+}
+
+void
+multicharconstant(char terminator)
+{
+       char    c;
+
+       /* scan until the terminator is found */
+       while ((c = yytext[yyleng++] = comment_input()) != terminator) {
+               switch (c) {
+               case '\\':      /* escape character */
+                       if ((yytext[yyleng++] = comment_input()) == '\n') {
+                               ++myylineno;
+                       }
+                       break;
+               case '\t':      /* tab character */
+               
+                       /* if not a lex program, continue */
+                       if (lex == NO) {
+                               break;
+                       }
+                       /* fall through */
+                       
+               case '\n':      /* illegal character */
+                       
+                       /* assume the terminator is missing, so put
+                          this character back */
+                       unput(c);
+                       yytext[--yyleng] = '\0';
+                       /* fall through */
+                       
+               case LEXEOF:    /* end of file */
+                       return;
+                       
+               default:
+                       /* change a control character to a blank */
+                       if (!isprint((unsigned char)c)) {
+                               yytext[yyleng - 1] = ' ';
+                       }
+               }
+               /* if this token will overflow the line buffer */
+               /* note: '\\' may cause yyleng to be > STMTMAX */
+               if (yyleng >= STMTMAX) {
+                       
+                       /* truncate the token */
+                       while ((c = comment_input()) != LEXEOF) {
+                               if (c == terminator) {
+                                       unput(c);
+                                       break;
+                               }
+                               else if (c == '\n') {
+                                       ++myylineno;
+                               }
+                       }
+               }
+       }
+       yytext[yyleng] = '\0';
+}
diff --git a/src/snprintf.c b/src/snprintf.c
new file mode 100644 (file)
index 0000000..c47bcdd
--- /dev/null
@@ -0,0 +1,2097 @@
+/* $Id: snprintf.c,v 1.1 2009/04/10 13:39:23 broeker Exp $ */
+
+/*
+ * Copyright (c) 1995 Patrick Powell.
+ *
+ * This code is based on code written by Patrick Powell <papowell@astart.com>.
+ * It may be used for any purpose as long as this notice remains intact on all
+ * source code distributions.
+ */
+
+/*
+ * Copyright (c) 2008 Holger Weiss.
+ *
+ * This version of the code is maintained by Holger Weiss <holger@jhweiss.de>.
+ * My changes to the code may freely be used, modified and/or redistributed for
+ * any purpose.  It would be nice if additions and fixes to this file (including
+ * trivial code cleanups) would be sent back in order to let me include them in
+ * the version available at <http://www.jhweiss.de/software/snprintf.html>.
+ * However, this is not a requirement for using or redistributing (possibly
+ * modified) versions of this file, nor is leaving this notice intact mandatory.
+ */
+
+/*
+ * History
+ *
+ * 2008-01-20 Holger Weiss <holger@jhweiss.de> for C99-snprintf 1.1:
+ *
+ *     Fixed the detection of infinite floating point values on IRIX (and
+ *     possibly other systems) and applied another few minor cleanups.
+ *
+ * 2008-01-06 Holger Weiss <holger@jhweiss.de> for C99-snprintf 1.0:
+ *
+ *     Added a lot of new features, fixed many bugs, and incorporated various
+ *     improvements done by Andrew Tridgell <tridge@samba.org>, Russ Allbery
+ *     <rra@stanford.edu>, Hrvoje Niksic <hniksic@xemacs.org>, Damien Miller
+ *     <djm@mindrot.org>, and others for the Samba, INN, Wget, and OpenSSH
+ *     projects.  The additions include: support the "e", "E", "g", "G", and
+ *     "F" conversion specifiers (and use conversion style "f" or "F" for the
+ *     still unsupported "a" and "A" specifiers); support the "hh", "ll", "j",
+ *     "t", and "z" length modifiers; support the "#" flag and the (non-C99)
+ *     "'" flag; use localeconv(3) (if available) to get both the current
+ *     locale's decimal point character and the separator between groups of
+ *     digits; fix the handling of various corner cases of field width and
+ *     precision specifications; fix various floating point conversion bugs;
+ *     handle infinite and NaN floating point values; don't attempt to write to
+ *     the output buffer (which may be NULL) if a size of zero was specified;
+ *     check for integer overflow of the field width, precision, and return
+ *     values and during the floating point conversion; use the OUTCHAR() macro
+ *     instead of a function for better performance; provide asprintf(3) and
+ *     vasprintf(3) functions; add new test cases.  The replacement functions
+ *     have been renamed to use an "rpl_" prefix, the function calls in the
+ *     main project (and in this file) must be redefined accordingly for each
+ *     replacement function which is needed (by using Autoconf or other means).
+ *     Various other minor improvements have been applied and the coding style
+ *     was cleaned up for consistency.
+ *
+ * 2007-07-23 Holger Weiss <holger@jhweiss.de> for Mutt 1.5.13:
+ *
+ *     C99 compliant snprintf(3) and vsnprintf(3) functions return the number
+ *     of characters that would have been written to a sufficiently sized
+ *     buffer (excluding the '\0').  The original code simply returned the
+ *     length of the resulting output string, so that's been fixed.
+ *
+ * 1998-03-05 Michael Elkins <me@mutt.org> for Mutt 0.90.8:
+ *
+ *     The original code assumed that both snprintf(3) and vsnprintf(3) were
+ *     missing.  Some systems only have snprintf(3) but not vsnprintf(3), so
+ *     the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
+ *
+ * 1998-01-27 Thomas Roessler <roessler@does-not-exist.org> for Mutt 0.89i:
+ *
+ *     The PGP code was using unsigned hexadecimal formats.  Unfortunately,
+ *     unsigned formats simply didn't work.
+ *
+ * 1997-10-22 Brandon Long <blong@fiction.net> for Mutt 0.87.1:
+ *
+ *     Ok, added some minimal floating point support, which means this probably
+ *     requires libm on most operating systems.  Don't yet support the exponent
+ *     (e,E) and sigfig (g,G).  Also, fmtint() was pretty badly broken, it just
+ *     wasn't being exercised in ways which showed it, so that's been fixed.
+ *     Also, formatted the code to Mutt conventions, and removed dead code left
+ *     over from the original.  Also, there is now a builtin-test, run with:
+ *     gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm && ./snprintf
+ *
+ * 2996-09-15 Brandon Long <blong@fiction.net> for Mutt 0.43:
+ *
+ *     This was ugly.  It is still ugly.  I opted out of floating point
+ *     numbers, but the formatter understands just about everything from the
+ *     normal C string format, at least as far as I can tell from the Solaris
+ *     2.5 printf(3S) man page.
+ */
+
+/*
+ * ToDo
+ *
+ * - Add wide character support.
+ * - Add support for "%a" and "%A" conversions.
+ * - Create test routines which predefine the expected results.  Our test cases
+ *   usually expose bugs in system implementations rather than in ours :-)
+ */
+
+/*
+ * Usage
+ *
+ * 1) The following preprocessor macros should be defined to 1 if the feature or
+ *    file in question is available on the target system (by using Autoconf or
+ *    other means), though basic functionality should be available as long as
+ *    HAVE_STDARG_H and HAVE_STDLIB_H are defined correctly:
+ *
+ *     HAVE_VSNPRINTF
+ *     HAVE_SNPRINTF
+ *     HAVE_VASPRINTF
+ *     HAVE_ASPRINTF
+ *     HAVE_STDARG_H
+ *     HAVE_STDDEF_H
+ *     HAVE_STDINT_H
+ *     HAVE_STDLIB_H
+ *     HAVE_INTTYPES_H
+ *     HAVE_LOCALE_H
+ *     HAVE_LOCALECONV
+ *     HAVE_LCONV_DECIMAL_POINT
+ *     HAVE_LCONV_THOUSANDS_SEP
+ *     HAVE_LONG_DOUBLE
+ *     HAVE_LONG_LONG_INT
+ *     HAVE_UNSIGNED_LONG_LONG_INT
+ *     HAVE_INTMAX_T
+ *     HAVE_UINTMAX_T
+ *     HAVE_UINTPTR_T
+ *     HAVE_PTRDIFF_T
+ *     HAVE_VA_COPY
+ *     HAVE___VA_COPY
+ *
+ * 2) The calls to the functions which should be replaced must be redefined
+ *    throughout the project files (by using Autoconf or other means):
+ *
+ *     #define vsnprintf rpl_vsnprintf
+ *     #define snprintf rpl_snprintf
+ *     #define vasprintf rpl_vasprintf
+ *     #define asprintf rpl_asprintf
+ *
+ * 3) The required replacement functions should be declared in some header file
+ *    included throughout the project files:
+ *
+ *     #if HAVE_CONFIG_H
+ *     #include <config.h>
+ *     #endif
+ *     #if HAVE_STDARG_H
+ *     #include <stdarg.h>
+ *     #if !HAVE_VSNPRINTF
+ *     int rpl_vsnprintf(char *, size_t, const char *, va_list);
+ *     #endif
+ *     #if !HAVE_SNPRINTF
+ *     int rpl_snprintf(char *, size_t, const char *, ...);
+ *     #endif
+ *     #if !HAVE_VASPRINTF
+ *     int rpl_vasprintf(char **, const char *, va_list);
+ *     #endif
+ *     #if !HAVE_ASPRINTF
+ *     int rpl_asprintf(char **, const char *, ...);
+ *     #endif
+ *     #endif
+ *
+ * Autoconf macros for handling step 1 and step 2 are available at
+ * <http://www.jhweiss.de/software/snprintf.html>.
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#if TEST_SNPRINTF
+#include <math.h>      /* For pow(3), NAN, and INFINITY. */
+#include <string.h>    /* For strcmp(3). */
+#if defined(__NetBSD__) || \
+    defined(__FreeBSD__) || \
+    defined(__OpenBSD__) || \
+    defined(__NeXT__) || \
+    defined(__bsd__)
+#define OS_BSD 1
+#elif defined(sgi) || defined(__sgi)
+#ifndef __c99
+#define __c99  /* Force C99 mode to get <stdint.h> included on IRIX 6.5.30. */
+#endif /* !defined(__c99) */
+#define OS_IRIX 1
+#define OS_SYSV 1
+#elif defined(__svr4__)
+#define OS_SYSV 1
+#elif defined(__linux__)
+#define OS_LINUX 1
+#endif /* defined(__NetBSD__) || defined(__FreeBSD__) || [...] */
+#if HAVE_CONFIG_H      /* Undefine definitions possibly done in config.h. */
+#ifdef HAVE_SNPRINTF
+#undef HAVE_SNPRINTF
+#endif /* defined(HAVE_SNPRINTF) */
+#ifdef HAVE_VSNPRINTF
+#undef HAVE_VSNPRINTF
+#endif /* defined(HAVE_VSNPRINTF) */
+#ifdef HAVE_ASPRINTF
+#undef HAVE_ASPRINTF
+#endif /* defined(HAVE_ASPRINTF) */
+#ifdef HAVE_VASPRINTF
+#undef HAVE_VASPRINTF
+#endif /* defined(HAVE_VASPRINTF) */
+#ifdef snprintf
+#undef snprintf
+#endif /* defined(snprintf) */
+#ifdef vsnprintf
+#undef vsnprintf
+#endif /* defined(vsnprintf) */
+#ifdef asprintf
+#undef asprintf
+#endif /* defined(asprintf) */
+#ifdef vasprintf
+#undef vasprintf
+#endif /* defined(vasprintf) */
+#else  /* By default, we assume a modern system for testing. */
+#ifndef HAVE_STDARG_H
+#define HAVE_STDARG_H 1
+#endif /* HAVE_STDARG_H */
+#ifndef HAVE_STDDEF_H
+#define HAVE_STDDEF_H 1
+#endif /* HAVE_STDDEF_H */
+#ifndef HAVE_STDINT_H
+#define HAVE_STDINT_H 1
+#endif /* HAVE_STDINT_H */
+#ifndef HAVE_STDLIB_H
+#define HAVE_STDLIB_H 1
+#endif /* HAVE_STDLIB_H */
+#ifndef HAVE_INTTYPES_H
+#define HAVE_INTTYPES_H 1
+#endif /* HAVE_INTTYPES_H */
+#ifndef HAVE_LOCALE_H
+#define HAVE_LOCALE_H 1
+#endif /* HAVE_LOCALE_H */
+#ifndef HAVE_LOCALECONV
+#define HAVE_LOCALECONV 1
+#endif /* !defined(HAVE_LOCALECONV) */
+#ifndef HAVE_LCONV_DECIMAL_POINT
+#define HAVE_LCONV_DECIMAL_POINT 1
+#endif /* HAVE_LCONV_DECIMAL_POINT */
+#ifndef HAVE_LCONV_THOUSANDS_SEP
+#define HAVE_LCONV_THOUSANDS_SEP 1
+#endif /* HAVE_LCONV_THOUSANDS_SEP */
+#ifndef HAVE_LONG_DOUBLE
+#define HAVE_LONG_DOUBLE 1
+#endif /* !defined(HAVE_LONG_DOUBLE) */
+#ifndef HAVE_LONG_LONG_INT
+#define HAVE_LONG_LONG_INT 1
+#endif /* !defined(HAVE_LONG_LONG_INT) */
+#ifndef HAVE_UNSIGNED_LONG_LONG_INT
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+#endif /* !defined(HAVE_UNSIGNED_LONG_LONG_INT) */
+#ifndef HAVE_INTMAX_T
+#define HAVE_INTMAX_T 1
+#endif /* !defined(HAVE_INTMAX_T) */
+#ifndef HAVE_UINTMAX_T
+#define HAVE_UINTMAX_T 1
+#endif /* !defined(HAVE_UINTMAX_T) */
+#ifndef HAVE_UINTPTR_T
+#define HAVE_UINTPTR_T 1
+#endif /* !defined(HAVE_UINTPTR_T) */
+#ifndef HAVE_PTRDIFF_T
+#define HAVE_PTRDIFF_T 1
+#endif /* !defined(HAVE_PTRDIFF_T) */
+#ifndef HAVE_VA_COPY
+#define HAVE_VA_COPY 1
+#endif /* !defined(HAVE_VA_COPY) */
+#ifndef HAVE___VA_COPY
+#define HAVE___VA_COPY 1
+#endif /* !defined(HAVE___VA_COPY) */
+#endif /* HAVE_CONFIG_H */
+#define snprintf rpl_snprintf
+#define vsnprintf rpl_vsnprintf
+#define asprintf rpl_asprintf
+#define vasprintf rpl_vasprintf
+#endif /* TEST_SNPRINTF */
+
+#if !HAVE_SNPRINTF || !HAVE_VSNPRINTF || !HAVE_ASPRINTF || !HAVE_VASPRINTF
+#include <stdio.h>     /* For NULL, size_t, vsnprintf(3), and vasprintf(3). */
+#ifdef VA_START
+#undef VA_START
+#endif /* defined(VA_START) */
+#ifdef VA_SHIFT
+#undef VA_SHIFT
+#endif /* defined(VA_SHIFT) */
+#if HAVE_STDARG_H
+#include <stdarg.h>
+#define VA_START(ap, last) va_start(ap, last)
+#define VA_SHIFT(ap, value, type) /* No-op for ANSI C. */
+#else  /* Assume <varargs.h> is available. */
+#include <varargs.h>
+#define VA_START(ap, last) va_start(ap)        /* "last" is ignored. */
+#define VA_SHIFT(ap, value, type) value = va_arg(ap, type)
+#endif /* HAVE_STDARG_H */
+
+#if !HAVE_VASPRINTF
+#if HAVE_STDLIB_H
+#include <stdlib.h>    /* For malloc(3). */
+#endif /* HAVE_STDLIB_H */
+#ifdef VA_COPY
+#undef VA_COPY
+#endif /* defined(VA_COPY) */
+#ifdef VA_END_COPY
+#undef VA_END_COPY
+#endif /* defined(VA_END_COPY) */
+#if HAVE_VA_COPY
+#define VA_COPY(dest, src) va_copy(dest, src)
+#define VA_END_COPY(ap) va_end(ap)
+#elif HAVE___VA_COPY
+#define VA_COPY(dest, src) __va_copy(dest, src)
+#define VA_END_COPY(ap) va_end(ap)
+#else
+#define VA_COPY(dest, src) (void)mymemcpy(&dest, &src, sizeof(va_list))
+#define VA_END_COPY(ap) /* No-op. */
+#define NEED_MYMEMCPY 1
+static void *mymemcpy(void *, void *, size_t);
+#endif /* HAVE_VA_COPY */
+#endif /* !HAVE_VASPRINTF */
+
+#if !HAVE_VSNPRINTF
+#include <errno.h>     /* For ERANGE and errno. */
+#include <limits.h>    /* For *_MAX. */
+#if HAVE_INTTYPES_H
+#include <inttypes.h>  /* For intmax_t (if not defined in <stdint.h>). */
+#endif /* HAVE_INTTYPES_H */
+#if HAVE_LOCALE_H
+#include <locale.h>    /* For localeconv(3). */
+#endif /* HAVE_LOCALE_H */
+#if HAVE_STDDEF_H
+#include <stddef.h>    /* For ptrdiff_t. */
+#endif /* HAVE_STDDEF_H */
+#if HAVE_STDINT_H
+#include <stdint.h>    /* For intmax_t. */
+#endif /* HAVE_STDINT_H */
+
+/* Support for unsigned long long int.  We may also need ULLONG_MAX. */
+#ifndef ULONG_MAX      /* We may need ULONG_MAX as a fallback. */
+#ifdef UINT_MAX
+#define ULONG_MAX UINT_MAX
+#else
+#define ULONG_MAX INT_MAX
+#endif /* defined(UINT_MAX) */
+#endif /* !defined(ULONG_MAX) */
+#ifdef ULLONG
+#undef ULLONG
+#endif /* defined(ULLONG) */
+#if HAVE_UNSIGNED_LONG_LONG_INT
+#define ULLONG unsigned long long int
+#ifndef ULLONG_MAX
+#define ULLONG_MAX ULONG_MAX
+#endif /* !defined(ULLONG_MAX) */
+#else
+#define ULLONG unsigned long int
+#ifdef ULLONG_MAX
+#undef ULLONG_MAX
+#endif /* defined(ULLONG_MAX) */
+#define ULLONG_MAX ULONG_MAX
+#endif /* HAVE_LONG_LONG_INT */
+
+/* Support for uintmax_t.  We also need UINTMAX_MAX. */
+#ifdef UINTMAX_T
+#undef UINTMAX_T
+#endif /* defined(UINTMAX_T) */
+#if HAVE_UINTMAX_T || defined(uintmax_t)
+#define UINTMAX_T uintmax_t
+#ifndef UINTMAX_MAX
+#define UINTMAX_MAX ULLONG_MAX
+#endif /* !defined(UINTMAX_MAX) */
+#else
+#define UINTMAX_T ULLONG
+#ifdef UINTMAX_MAX
+#undef UINTMAX_MAX
+#endif /* defined(UINTMAX_MAX) */
+#define UINTMAX_MAX ULLONG_MAX
+#endif /* HAVE_UINTMAX_T || defined(uintmax_t) */
+
+/* Support for long double. */
+#ifndef LDOUBLE
+#if HAVE_LONG_DOUBLE
+#define LDOUBLE long double
+#else
+#define LDOUBLE double
+#endif /* HAVE_LONG_DOUBLE */
+#endif /* !defined(LDOUBLE) */
+
+/* Support for long long int. */
+#ifndef LLONG
+#if HAVE_LONG_LONG_INT
+#define LLONG long long int
+#else
+#define LLONG long int
+#endif /* HAVE_LONG_LONG_INT */
+#endif /* !defined(LLONG) */
+
+/* Support for intmax_t. */
+#ifndef INTMAX_T
+#if HAVE_INTMAX_T || defined(intmax_t)
+#define INTMAX_T intmax_t
+#else
+#define INTMAX_T LLONG
+#endif /* HAVE_INTMAX_T || defined(intmax_t) */
+#endif /* !defined(INTMAX_T) */
+
+/* Support for uintptr_t. */
+#ifndef UINTPTR_T
+#if HAVE_UINTPTR_T || defined(uintptr_t)
+#define UINTPTR_T uintptr_t
+#else
+#define UINTPTR_T unsigned long int
+#endif /* HAVE_UINTPTR_T || defined(uintptr_t) */
+#endif /* !defined(UINTPTR_T) */
+
+/* Support for ptrdiff_t. */
+#ifndef PTRDIFF_T
+#if HAVE_PTRDIFF_T || defined(ptrdiff_t)
+#define PTRDIFF_T ptrdiff_t
+#else
+#define PTRDIFF_T long int
+#endif /* HAVE_PTRDIFF_T || defined(ptrdiff_t) */
+#endif /* !defined(PTRDIFF_T) */
+
+/*
+ * We need an unsigned integer type corresponding to ptrdiff_t (cf. C99:
+ * 7.19.6.1, 7).  However, we'll simply use PTRDIFF_T and convert it to an
+ * unsigned type if necessary.  This should work just fine in practice.
+ */
+#ifndef UPTRDIFF_T
+#define UPTRDIFF_T PTRDIFF_T
+#endif /* !defined(UPTRDIFF_T) */
+
+/*
+ * We need a signed integer type corresponding to size_t (cf. C99: 7.19.6.1, 7).
+ * However, we'll simply use size_t and convert it to a signed type if
+ * necessary.  This should work just fine in practice.
+ */
+#ifndef SSIZE_T
+#define SSIZE_T size_t
+#endif /* !defined(SSIZE_T) */
+
+/* Either ERANGE or E2BIG should be available everywhere. */
+#ifndef ERANGE
+#define ERANGE E2BIG
+#endif /* !defined(ERANGE) */
+#ifndef EOVERFLOW
+#define EOVERFLOW ERANGE
+#endif /* !defined(EOVERFLOW) */
+
+/*
+ * Buffer size to hold the octal string representation of UINT128_MAX without
+ * nul-termination ("3777777777777777777777777777777777777777777").
+ */
+#ifdef MAX_CONVERT_LENGTH
+#undef MAX_CONVERT_LENGTH
+#endif /* defined(MAX_CONVERT_LENGTH) */
+#define MAX_CONVERT_LENGTH      43
+
+/* Format read states. */
+#define PRINT_S_DEFAULT         0
+#define PRINT_S_FLAGS           1
+#define PRINT_S_WIDTH           2
+#define PRINT_S_DOT             3
+#define PRINT_S_PRECISION       4
+#define PRINT_S_MOD             5
+#define PRINT_S_CONV            6
+
+/* Format flags. */
+#define PRINT_F_MINUS           (1 << 0)
+#define PRINT_F_PLUS            (1 << 1)
+#define PRINT_F_SPACE           (1 << 2)
+#define PRINT_F_NUM             (1 << 3)
+#define PRINT_F_ZERO            (1 << 4)
+#define PRINT_F_QUOTE           (1 << 5)
+#define PRINT_F_UP              (1 << 6)
+#define PRINT_F_UNSIGNED        (1 << 7)
+#define PRINT_F_TYPE_G          (1 << 8)
+#define PRINT_F_TYPE_E          (1 << 9)
+
+/* Conversion flags. */
+#define PRINT_C_CHAR            1
+#define PRINT_C_SHORT           2
+#define PRINT_C_LONG            3
+#define PRINT_C_LLONG           4
+#define PRINT_C_LDOUBLE         5
+#define PRINT_C_SIZE            6
+#define PRINT_C_PTRDIFF         7
+#define PRINT_C_INTMAX          8
+
+#ifndef MAX
+#define MAX(x, y) ((x >= y) ? x : y)
+#endif /* !defined(MAX) */
+#ifndef CHARTOINT
+#define CHARTOINT(ch) (ch - '0')
+#endif /* !defined(CHARTOINT) */
+#ifndef ISDIGIT
+#define ISDIGIT(ch) ('0' <= (unsigned char)ch && (unsigned char)ch <= '9')
+#endif /* !defined(ISDIGIT) */
+#ifndef ISNAN
+#define ISNAN(x) (x != x)
+#endif /* !defined(ISNAN) */
+#ifndef ISINF
+#define ISINF(x) (x != 0.0 && x + x == x)
+#endif /* !defined(ISINF) */
+
+#ifdef OUTCHAR
+#undef OUTCHAR
+#endif /* defined(OUTCHAR) */
+#define OUTCHAR(str, len, size, ch)                                          \
+do {                                                                         \
+       if (len + 1 < size)                                                  \
+               str[len] = ch;                                               \
+       (len)++;                                                             \
+} while (/* CONSTCOND */ 0)
+
+static void fmtstr(char *, size_t *, size_t, const char *, int, int, int);
+static void fmtint(char *, size_t *, size_t, INTMAX_T, int, int, int, int);
+static void fmtflt(char *, size_t *, size_t, LDOUBLE, int, int, int, int *);
+static void printsep(char *, size_t *, size_t);
+static int getnumsep(int);
+static int getexponent(LDOUBLE);
+static int convert(UINTMAX_T, char *, size_t, int, int);
+static UINTMAX_T cast(LDOUBLE);
+static UINTMAX_T myround(LDOUBLE);
+static LDOUBLE mypow10(int);
+
+extern int errno;
+
+int
+rpl_vsnprintf(char *str, size_t size, const char *format, va_list args)
+{
+       LDOUBLE fvalue;
+       INTMAX_T value;
+       unsigned char cvalue;
+       const char *strvalue;
+       INTMAX_T *intmaxptr;
+       PTRDIFF_T *ptrdiffptr;
+       SSIZE_T *sizeptr;
+       LLONG *llongptr;
+       long int *longptr;
+       int *intptr;
+       short int *shortptr;
+       signed char *charptr;
+       size_t len = 0;
+       int overflow = 0;
+       int base = 0;
+       int cflags = 0;
+       int flags = 0;
+       int width = 0;
+       int precision = -1;
+       int state = PRINT_S_DEFAULT;
+       char ch = *format++;
+
+       /*
+        * C99 says: "If `n' is zero, nothing is written, and `s' may be a null
+        * pointer." (7.19.6.5, 2)  We're forgiving and allow a NULL pointer
+        * even if a size larger than zero was specified.  At least NetBSD's
+        * snprintf(3) does the same, as well as other versions of this file.
+        * (Though some of these versions will write to a non-NULL buffer even
+        * if a size of zero was specified, which violates the standard.)
+        */
+       if (str == NULL && size != 0)
+               size = 0;
+
+       while (ch != '\0')
+               switch (state) {
+               case PRINT_S_DEFAULT:
+                       if (ch == '%')
+                               state = PRINT_S_FLAGS;
+                       else
+                               OUTCHAR(str, len, size, ch);
+                       ch = *format++;
+                       break;
+               case PRINT_S_FLAGS:
+                       switch (ch) {
+                       case '-':
+                               flags |= PRINT_F_MINUS;
+                               ch = *format++;
+                               break;
+                       case '+':
+                               flags |= PRINT_F_PLUS;
+                               ch = *format++;
+                               break;
+                       case ' ':
+                               flags |= PRINT_F_SPACE;
+                               ch = *format++;
+                               break;
+                       case '#':
+                               flags |= PRINT_F_NUM;
+                               ch = *format++;
+                               break;
+                       case '0':
+                               flags |= PRINT_F_ZERO;
+                               ch = *format++;
+                               break;
+                       case '\'':      /* SUSv2 flag (not in C99). */
+                               flags |= PRINT_F_QUOTE;
+                               ch = *format++;
+                               break;
+                       default:
+                               state = PRINT_S_WIDTH;
+                               break;
+                       }
+                       break;
+               case PRINT_S_WIDTH:
+                       if (ISDIGIT(ch)) {
+                               ch = CHARTOINT(ch);
+                               if (width > (INT_MAX - ch) / 10) {
+                                       overflow = 1;
+                                       goto out;
+                               }
+                               width = 10 * width + ch;
+                               ch = *format++;
+                       } else if (ch == '*') {
+                               /*
+                                * C99 says: "A negative field width argument is
+                                * taken as a `-' flag followed by a positive
+                                * field width." (7.19.6.1, 5)
+                                */
+                               if ((width = va_arg(args, int)) < 0) {
+                                       flags |= PRINT_F_MINUS;
+                                       width = -width;
+                               }
+                               ch = *format++;
+                               state = PRINT_S_DOT;
+                       } else
+                               state = PRINT_S_DOT;
+                       break;
+               case PRINT_S_DOT:
+                       if (ch == '.') {
+                               state = PRINT_S_PRECISION;
+                               ch = *format++;
+                       } else
+                               state = PRINT_S_MOD;
+                       break;
+               case PRINT_S_PRECISION:
+                       if (precision == -1)
+                               precision = 0;
+                       if (ISDIGIT(ch)) {
+                               ch = CHARTOINT(ch);
+                               if (precision > (INT_MAX - ch) / 10) {
+                                       overflow = 1;
+                                       goto out;
+                               }
+                               precision = 10 * precision + ch;
+                               ch = *format++;
+                       } else if (ch == '*') {
+                               /*
+                                * C99 says: "A negative precision argument is
+                                * taken as if the precision were omitted."
+                                * (7.19.6.1, 5)
+                                */
+                               if ((precision = va_arg(args, int)) < 0)
+                                       precision = -1;
+                               ch = *format++;
+                               state = PRINT_S_MOD;
+                       } else
+                               state = PRINT_S_MOD;
+                       break;
+               case PRINT_S_MOD:
+                       switch (ch) {
+                       case 'h':
+                               ch = *format++;
+                               if (ch == 'h') {        /* It's a char. */
+                                       ch = *format++;
+                                       cflags = PRINT_C_CHAR;
+                               } else
+                                       cflags = PRINT_C_SHORT;
+                               break;
+                       case 'l':
+                               ch = *format++;
+                               if (ch == 'l') {        /* It's a long long. */
+                                       ch = *format++;
+                                       cflags = PRINT_C_LLONG;
+                               } else
+                                       cflags = PRINT_C_LONG;
+                               break;
+                       case 'L':
+                               cflags = PRINT_C_LDOUBLE;
+                               ch = *format++;
+                               break;
+                       case 'j':
+                               cflags = PRINT_C_INTMAX;
+                               ch = *format++;
+                               break;
+                       case 't':
+                               cflags = PRINT_C_PTRDIFF;
+                               ch = *format++;
+                               break;
+                       case 'z':
+                               cflags = PRINT_C_SIZE;
+                               ch = *format++;
+                               break;
+                       }
+                       state = PRINT_S_CONV;
+                       break;
+               case PRINT_S_CONV:
+                       switch (ch) {
+                       case 'd':
+                               /* FALLTHROUGH */
+                       case 'i':
+                               switch (cflags) {
+                               case PRINT_C_CHAR:
+                                       value = (signed char)va_arg(args, int);
+                                       break;
+                               case PRINT_C_SHORT:
+                                       value = (short int)va_arg(args, int);
+                                       break;
+                               case PRINT_C_LONG:
+                                       value = va_arg(args, long int);
+                                       break;
+                               case PRINT_C_LLONG:
+                                       value = va_arg(args, LLONG);
+                                       break;
+                               case PRINT_C_SIZE:
+                                       value = va_arg(args, SSIZE_T);
+                                       break;
+                               case PRINT_C_INTMAX:
+                                       value = va_arg(args, INTMAX_T);
+                                       break;
+                               case PRINT_C_PTRDIFF:
+                                       value = va_arg(args, PTRDIFF_T);
+                                       break;
+                               default:
+                                       value = va_arg(args, int);
+                                       break;
+                               }
+                               fmtint(str, &len, size, value, 10, width,
+                                   precision, flags);
+                               break;
+                       case 'X':
+                               flags |= PRINT_F_UP;
+                               /* FALLTHROUGH */
+                       case 'x':
+                               base = 16;
+                               /* FALLTHROUGH */
+                       case 'o':
+                               if (base == 0)
+                                       base = 8;
+                               /* FALLTHROUGH */
+                       case 'u':
+                               if (base == 0)
+                                       base = 10;
+                               flags |= PRINT_F_UNSIGNED;
+                               switch (cflags) {
+                               case PRINT_C_CHAR:
+                                       value = (unsigned char)va_arg(args,
+                                           unsigned int);
+                                       break;
+                               case PRINT_C_SHORT:
+                                       value = (unsigned short int)va_arg(args,
+                                           unsigned int);
+                                       break;
+                               case PRINT_C_LONG:
+                                       value = va_arg(args, unsigned long int);
+                                       break;
+                               case PRINT_C_LLONG:
+                                       value = va_arg(args, ULLONG);
+                                       break;
+                               case PRINT_C_SIZE:
+                                       value = va_arg(args, size_t);
+                                       break;
+                               case PRINT_C_INTMAX:
+                                       value = va_arg(args, UINTMAX_T);
+                                       break;
+                               case PRINT_C_PTRDIFF:
+                                       value = va_arg(args, UPTRDIFF_T);
+                                       break;
+                               default:
+                                       value = va_arg(args, unsigned int);
+                                       break;
+                               }
+                               fmtint(str, &len, size, value, base, width,
+                                   precision, flags);
+                               break;
+                       case 'A':
+                               /* Not yet supported, we'll use "%F". */
+                               /* FALLTHROUGH */
+                       case 'F':
+                               flags |= PRINT_F_UP;
+                       case 'a':
+                               /* Not yet supported, we'll use "%f". */
+                               /* FALLTHROUGH */
+                       case 'f':
+                               if (cflags == PRINT_C_LDOUBLE)
+                                       fvalue = va_arg(args, LDOUBLE);
+                               else
+                                       fvalue = va_arg(args, double);
+                               fmtflt(str, &len, size, fvalue, width,
+                                   precision, flags, &overflow);
+                               if (overflow)
+                                       goto out;
+                               break;
+                       case 'E':
+                               flags |= PRINT_F_UP;
+                               /* FALLTHROUGH */
+                       case 'e':
+                               flags |= PRINT_F_TYPE_E;
+                               if (cflags == PRINT_C_LDOUBLE)
+                                       fvalue = va_arg(args, LDOUBLE);
+                               else
+                                       fvalue = va_arg(args, double);
+                               fmtflt(str, &len, size, fvalue, width,
+                                   precision, flags, &overflow);
+                               if (overflow)
+                                       goto out;
+                               break;
+                       case 'G':
+                               flags |= PRINT_F_UP;
+                               /* FALLTHROUGH */
+                       case 'g':
+                               flags |= PRINT_F_TYPE_G;
+                               if (cflags == PRINT_C_LDOUBLE)
+                                       fvalue = va_arg(args, LDOUBLE);
+                               else
+                                       fvalue = va_arg(args, double);
+                               /*
+                                * If the precision is zero, it is treated as
+                                * one (cf. C99: 7.19.6.1, 8).
+                                */
+                               if (precision == 0)
+                                       precision = 1;
+                               fmtflt(str, &len, size, fvalue, width,
+                                   precision, flags, &overflow);
+                               if (overflow)
+                                       goto out;
+                               break;
+                       case 'c':
+                               cvalue = va_arg(args, int);
+                               OUTCHAR(str, len, size, cvalue);
+                               break;
+                       case 's':
+                               strvalue = va_arg(args, char *);
+                               fmtstr(str, &len, size, strvalue, width,
+                                   precision, flags);
+                               break;
+                       case 'p':
+                               /*
+                                * C99 says: "The value of the pointer is
+                                * converted to a sequence of printing
+                                * characters, in an implementation-defined
+                                * manner." (C99: 7.19.6.1, 8)
+                                */
+                               if ((strvalue = va_arg(args, void *)) == NULL)
+                                       /*
+                                        * We use the glibc format.  BSD prints
+                                        * "0x0", SysV "0".
+                                        */
+                                       fmtstr(str, &len, size, "(nil)", width,
+                                           -1, flags);
+                               else {
+                                       /*
+                                        * We use the BSD/glibc format.  SysV
+                                        * omits the "0x" prefix (which we emit
+                                        * using the PRINT_F_NUM flag).
+                                        */
+                                       flags |= PRINT_F_NUM;
+                                       flags |= PRINT_F_UNSIGNED;
+                                       fmtint(str, &len, size,
+                                           (UINTPTR_T)strvalue, 16, width,
+                                           precision, flags);
+                               }
+                               break;
+                       case 'n':
+                               switch (cflags) {
+                               case PRINT_C_CHAR:
+                                       charptr = va_arg(args, signed char *);
+                                       *charptr = len;
+                                       break;
+                               case PRINT_C_SHORT:
+                                       shortptr = va_arg(args, short int *);
+                                       *shortptr = len;
+                                       break;
+                               case PRINT_C_LONG:
+                                       longptr = va_arg(args, long int *);
+                                       *longptr = len;
+                                       break;
+                               case PRINT_C_LLONG:
+                                       llongptr = va_arg(args, LLONG *);
+                                       *llongptr = len;
+                                       break;
+                               case PRINT_C_SIZE:
+                                       /*
+                                        * C99 says that with the "z" length
+                                        * modifier, "a following `n' conversion
+                                        * specifier applies to a pointer to a
+                                        * signed integer type corresponding to
+                                        * size_t argument." (7.19.6.1, 7)
+                                        */
+                                       sizeptr = va_arg(args, SSIZE_T *);
+                                       *sizeptr = len;
+                                       break;
+                               case PRINT_C_INTMAX:
+                                       intmaxptr = va_arg(args, INTMAX_T *);
+                                       *intmaxptr = len;
+                                       break;
+                               case PRINT_C_PTRDIFF:
+                                       ptrdiffptr = va_arg(args, PTRDIFF_T *);
+                                       *ptrdiffptr = len;
+                                       break;
+                               default:
+                                       intptr = va_arg(args, int *);
+                                       *intptr = len;
+                                       break;
+                               }
+                               break;
+                       case '%':       /* Print a "%" character verbatim. */
+                               OUTCHAR(str, len, size, ch);
+                               break;
+                       default:        /* Skip other characters. */
+                               break;
+                       }
+                       ch = *format++;
+                       state = PRINT_S_DEFAULT;
+                       base = cflags = flags = width = 0;
+                       precision = -1;
+                       break;
+               }
+out:
+       if (len < size)
+               str[len] = '\0';
+       else if (size > 0)
+               str[size - 1] = '\0';
+
+       if (overflow || len >= INT_MAX) {
+               errno = overflow ? EOVERFLOW : ERANGE;
+               return -1;
+       }
+       return (int)len;
+}
+
+static void
+fmtstr(char *str, size_t *len, size_t size, const char *value, int width,
+       int precision, int flags)
+{
+       int padlen, strln;      /* Amount to pad. */
+       int noprecision = (precision == -1);
+
+       if (value == NULL)      /* We're forgiving. */
+               value = "(null)";
+
+       /* If a precision was specified, don't read the string past it. */
+       for (strln = 0; value[strln] != '\0' &&
+           (noprecision || strln < precision); strln++)
+               continue;
+
+       if ((padlen = width - strln) < 0)
+               padlen = 0;
+       if (flags & PRINT_F_MINUS)      /* Left justify. */
+               padlen = -padlen;
+
+       while (padlen > 0) {    /* Leading spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               padlen--;
+       }
+       while (*value != '\0' && (noprecision || precision-- > 0)) {
+               OUTCHAR(str, *len, size, *value);
+               value++;
+       }
+       while (padlen < 0) {    /* Trailing spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               padlen++;
+       }
+}
+
+static void
+fmtint(char *str, size_t *len, size_t size, INTMAX_T value, int base, int width,
+       int precision, int flags)
+{
+       UINTMAX_T uvalue;
+       char iconvert[MAX_CONVERT_LENGTH];
+       char sign = 0;
+       char hexprefix = 0;
+       int spadlen = 0;        /* Amount to space pad. */
+       int zpadlen = 0;        /* Amount to zero pad. */
+       int pos;
+       int separators = (flags & PRINT_F_QUOTE);
+       int noprecision = (precision == -1);
+
+       if (flags & PRINT_F_UNSIGNED)
+               uvalue = value;
+       else {
+               uvalue = (value >= 0) ? value : -value;
+               if (value < 0)
+                       sign = '-';
+               else if (flags & PRINT_F_PLUS)  /* Do a sign. */
+                       sign = '+';
+               else if (flags & PRINT_F_SPACE)
+                       sign = ' ';
+       }
+
+       pos = convert(uvalue, iconvert, sizeof(iconvert), base,
+           flags & PRINT_F_UP);
+
+       if (flags & PRINT_F_NUM && uvalue != 0) {
+               /*
+                * C99 says: "The result is converted to an `alternative form'.
+                * For `o' conversion, it increases the precision, if and only
+                * if necessary, to force the first digit of the result to be a
+                * zero (if the value and precision are both 0, a single 0 is
+                * printed).  For `x' (or `X') conversion, a nonzero result has
+                * `0x' (or `0X') prefixed to it." (7.19.6.1, 6)
+                */
+               switch (base) {
+               case 8:
+                       if (precision <= pos)
+                               precision = pos + 1;
+                       break;
+               case 16:
+                       hexprefix = (flags & PRINT_F_UP) ? 'X' : 'x';
+                       break;
+               }
+       }
+
+       if (separators) /* Get the number of group separators we'll print. */
+               separators = getnumsep(pos);
+
+       zpadlen = precision - pos - separators;
+       spadlen = width                         /* Minimum field width. */
+           - separators                        /* Number of separators. */
+           - MAX(precision, pos)               /* Number of integer digits. */
+           - ((sign != 0) ? 1 : 0)             /* Will we print a sign? */
+           - ((hexprefix != 0) ? 2 : 0);       /* Will we print a prefix? */
+
+       if (zpadlen < 0)
+               zpadlen = 0;
+       if (spadlen < 0)
+               spadlen = 0;
+
+       /*
+        * C99 says: "If the `0' and `-' flags both appear, the `0' flag is
+        * ignored.  For `d', `i', `o', `u', `x', and `X' conversions, if a
+        * precision is specified, the `0' flag is ignored." (7.19.6.1, 6)
+        */
+       if (flags & PRINT_F_MINUS)      /* Left justify. */
+               spadlen = -spadlen;
+       else if (flags & PRINT_F_ZERO && noprecision) {
+               zpadlen += spadlen;
+               spadlen = 0;
+       }
+       while (spadlen > 0) {   /* Leading spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               spadlen--;
+       }
+       if (sign != 0)  /* Sign. */
+               OUTCHAR(str, *len, size, sign);
+       if (hexprefix != 0) {   /* A "0x" or "0X" prefix. */
+               OUTCHAR(str, *len, size, '0');
+               OUTCHAR(str, *len, size, hexprefix);
+       }
+       while (zpadlen > 0) {   /* Leading zeros. */
+               OUTCHAR(str, *len, size, '0');
+               zpadlen--;
+       }
+       while (pos > 0) {       /* The actual digits. */
+               pos--;
+               OUTCHAR(str, *len, size, iconvert[pos]);
+               if (separators > 0 && pos > 0 && pos % 3 == 0)
+                       printsep(str, len, size);
+       }
+       while (spadlen < 0) {   /* Trailing spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               spadlen++;
+       }
+}
+
+static void
+fmtflt(char *str, size_t *len, size_t size, LDOUBLE fvalue, int width,
+       int precision, int flags, int *overflow)
+{
+       LDOUBLE ufvalue;
+       UINTMAX_T intpart;
+       UINTMAX_T fracpart;
+       UINTMAX_T mask;
+       const char *infnan = NULL;
+       char iconvert[MAX_CONVERT_LENGTH];
+       char fconvert[MAX_CONVERT_LENGTH];
+       char econvert[4];       /* "e-12" (without nul-termination). */
+       char esign = 0;
+       char sign = 0;
+       int leadfraczeros = 0;
+       int exponent = 0;
+       int emitpoint = 0;
+       int omitzeros = 0;
+       int omitcount = 0;
+       int padlen = 0;
+       int epos = 0;
+       int fpos = 0;
+       int ipos = 0;
+       int separators = (flags & PRINT_F_QUOTE);
+       int estyle = (flags & PRINT_F_TYPE_E);
+#if HAVE_LOCALECONV && HAVE_LCONV_DECIMAL_POINT
+       struct lconv *lc = localeconv();
+#endif /* HAVE_LOCALECONV && HAVE_LCONV_DECIMAL_POINT */
+
+       /*
+        * AIX' man page says the default is 0, but C99 and at least Solaris'
+        * and NetBSD's man pages say the default is 6, and sprintf(3) on AIX
+        * defaults to 6.
+        */
+       if (precision == -1)
+               precision = 6;
+
+       if (fvalue < 0.0)
+               sign = '-';
+       else if (flags & PRINT_F_PLUS)  /* Do a sign. */
+               sign = '+';
+       else if (flags & PRINT_F_SPACE)
+               sign = ' ';
+
+       if (ISNAN(fvalue))
+               infnan = (flags & PRINT_F_UP) ? "NAN" : "nan";
+       else if (ISINF(fvalue))
+               infnan = (flags & PRINT_F_UP) ? "INF" : "inf";
+
+       if (infnan != NULL) {
+               if (sign != 0)
+                       iconvert[ipos++] = sign;
+               while (*infnan != '\0')
+                       iconvert[ipos++] = *infnan++;
+               fmtstr(str, len, size, iconvert, width, ipos, flags);
+               return;
+       }
+
+       /* "%e" (or "%E") or "%g" (or "%G") conversion. */
+       if (flags & PRINT_F_TYPE_E || flags & PRINT_F_TYPE_G) {
+               if (flags & PRINT_F_TYPE_G) {
+                       /*
+                        * For "%g" (and "%G") conversions, the precision
+                        * specifies the number of significant digits, which
+                        * includes the digits in the integer part.  The
+                        * conversion will or will not be using "e-style" (like
+                        * "%e" or "%E" conversions) depending on the precision
+                        * and on the exponent.  However, the exponent can be
+                        * affected by rounding the converted value, so we'll
+                        * leave this decision for later.  Until then, we'll
+                        * assume that we're going to do an "e-style" conversion
+                        * (in order to get the exponent calculated).  For
+                        * "e-style", the precision must be decremented by one.
+                        */
+                       precision--;
+                       /*
+                        * For "%g" (and "%G") conversions, trailing zeros are
+                        * removed from the fractional portion of the result
+                        * unless the "#" flag was specified.
+                        */
+                       if (!(flags & PRINT_F_NUM))
+                               omitzeros = 1;
+               }
+               exponent = getexponent(fvalue);
+               estyle = 1;
+       }
+
+again:
+       /*
+        * Sorry, we only support 9, 19, or 38 digits (that is, the number of
+        * digits of the 32-bit, the 64-bit, or the 128-bit UINTMAX_MAX value
+        * minus one) past the decimal point due to our conversion method.
+        */
+       switch (sizeof(UINTMAX_T)) {
+       case 16:
+               if (precision > 38)
+                       precision = 38;
+               break;
+       case 8:
+               if (precision > 19)
+                       precision = 19;
+               break;
+       default:
+               if (precision > 9)
+                       precision = 9;
+               break;
+       }
+
+       ufvalue = (fvalue >= 0.0) ? fvalue : -fvalue;
+       if (estyle)     /* We want exactly one integer digit. */
+               ufvalue /= mypow10(exponent);
+
+       if ((intpart = cast(ufvalue)) == UINTMAX_MAX) {
+               *overflow = 1;
+               return;
+       }
+
+       /*
+        * Factor of ten with the number of digits needed for the fractional
+        * part.  For example, if the precision is 3, the mask will be 1000.
+        */
+       mask = mypow10(precision);
+       /*
+        * We "cheat" by converting the fractional part to integer by
+        * multiplying by a factor of ten.
+        */
+       if ((fracpart = myround(mask * (ufvalue - intpart))) >= mask) {
+               /*
+                * For example, ufvalue = 2.99962, intpart = 2, and mask = 1000
+                * (because precision = 3).  Now, myround(1000 * 0.99962) will
+                * return 1000.  So, the integer part must be incremented by one
+                * and the fractional part must be set to zero.
+                */
+               intpart++;
+               fracpart = 0;
+               if (estyle && intpart == 10) {
+                       /*
+                        * The value was rounded up to ten, but we only want one
+                        * integer digit if using "e-style".  So, the integer
+                        * part must be set to one and the exponent must be
+                        * incremented by one.
+                        */
+                       intpart = 1;
+                       exponent++;
+               }
+       }
+
+       /*
+        * Now that we know the real exponent, we can check whether or not to
+        * use "e-style" for "%g" (and "%G") conversions.  If we don't need
+        * "e-style", the precision must be adjusted and the integer and
+        * fractional parts must be recalculated from the original value.
+        *
+        * C99 says: "Let P equal the precision if nonzero, 6 if the precision
+        * is omitted, or 1 if the precision is zero.  Then, if a conversion
+        * with style `E' would have an exponent of X:
+        *
+        * - if P > X >= -4, the conversion is with style `f' (or `F') and
+        *   precision P - (X + 1).
+        *
+        * - otherwise, the conversion is with style `e' (or `E') and precision
+        *   P - 1." (7.19.6.1, 8)
+        *
+        * Note that we had decremented the precision by one.
+        */
+       if (flags & PRINT_F_TYPE_G && estyle &&
+           precision + 1 > exponent && exponent >= -4) {
+               precision -= exponent;
+               estyle = 0;
+               goto again;
+       }
+
+       if (estyle) {
+               if (exponent < 0) {
+                       exponent = -exponent;
+                       esign = '-';
+               } else
+                       esign = '+';
+
+               /*
+                * Convert the exponent.  The sizeof(econvert) is 4.  So, the
+                * econvert buffer can hold e.g. "e+99" and "e-99".  We don't
+                * support an exponent which contains more than two digits.
+                * Therefore, the following stores are safe.
+                */
+               epos = convert(exponent, econvert, 2, 10, 0);
+               /*
+                * C99 says: "The exponent always contains at least two digits,
+                * and only as many more digits as necessary to represent the
+                * exponent." (7.19.6.1, 8)
+                */
+               if (epos == 1)
+                       econvert[epos++] = '0';
+               econvert[epos++] = esign;
+               econvert[epos++] = (flags & PRINT_F_UP) ? 'E' : 'e';
+       }
+
+       /* Convert the integer part and the fractional part. */
+       ipos = convert(intpart, iconvert, sizeof(iconvert), 10, 0);
+       if (fracpart != 0)      /* convert() would return 1 if fracpart == 0. */
+               fpos = convert(fracpart, fconvert, sizeof(fconvert), 10, 0);
+
+       leadfraczeros = precision - fpos;
+
+       if (omitzeros) {
+               if (fpos > 0)   /* Omit trailing fractional part zeros. */
+                       while (omitcount < fpos && fconvert[omitcount] == '0')
+                               omitcount++;
+               else {  /* The fractional part is zero, omit it completely. */
+                       omitcount = precision;
+                       leadfraczeros = 0;
+               }
+               precision -= omitcount;
+       }
+
+       /*
+        * Print a decimal point if either the fractional part is non-zero
+        * and/or the "#" flag was specified.
+        */
+       if (precision > 0 || flags & PRINT_F_NUM)
+               emitpoint = 1;
+       if (separators) /* Get the number of group separators we'll print. */
+               separators = getnumsep(ipos);
+
+       padlen = width                  /* Minimum field width. */
+           - ipos                      /* Number of integer digits. */
+           - epos                      /* Number of exponent characters. */
+           - precision                 /* Number of fractional digits. */
+           - separators                /* Number of group separators. */
+           - (emitpoint ? 1 : 0)       /* Will we print a decimal point? */
+           - ((sign != 0) ? 1 : 0);    /* Will we print a sign character? */
+
+       if (padlen < 0)
+               padlen = 0;
+
+       /*
+        * C99 says: "If the `0' and `-' flags both appear, the `0' flag is
+        * ignored." (7.19.6.1, 6)
+        */
+       if (flags & PRINT_F_MINUS)      /* Left justifty. */
+               padlen = -padlen;
+       else if (flags & PRINT_F_ZERO && padlen > 0) {
+               if (sign != 0) {        /* Sign. */
+                       OUTCHAR(str, *len, size, sign);
+                       sign = 0;
+               }
+               while (padlen > 0) {    /* Leading zeros. */
+                       OUTCHAR(str, *len, size, '0');
+                       padlen--;
+               }
+       }
+       while (padlen > 0) {    /* Leading spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               padlen--;
+       }
+       if (sign != 0)  /* Sign. */
+               OUTCHAR(str, *len, size, sign);
+       while (ipos > 0) {      /* Integer part. */
+               ipos--;
+               OUTCHAR(str, *len, size, iconvert[ipos]);
+               if (separators > 0 && ipos > 0 && ipos % 3 == 0)
+                       printsep(str, len, size);
+       }
+       if (emitpoint) {        /* Decimal point. */
+#if HAVE_LOCALECONV && HAVE_LCONV_DECIMAL_POINT
+               if (lc->decimal_point != NULL && *lc->decimal_point != '\0')
+                       OUTCHAR(str, *len, size, *lc->decimal_point);
+               else    /* We'll always print some decimal point character. */
+#endif /* HAVE_LOCALECONV && HAVE_LCONV_DECIMAL_POINT */
+                       OUTCHAR(str, *len, size, '.');
+       }
+       while (leadfraczeros > 0) {     /* Leading fractional part zeros. */
+               OUTCHAR(str, *len, size, '0');
+               leadfraczeros--;
+       }
+       while (fpos > omitcount) {      /* The remaining fractional part. */
+               fpos--;
+               OUTCHAR(str, *len, size, fconvert[fpos]);
+       }
+       while (epos > 0) {      /* Exponent. */
+               epos--;
+               OUTCHAR(str, *len, size, econvert[epos]);
+       }
+       while (padlen < 0) {    /* Trailing spaces. */
+               OUTCHAR(str, *len, size, ' ');
+               padlen++;
+       }
+}
+
+static void
+printsep(char *str, size_t *len, size_t size)
+{
+#if HAVE_LOCALECONV && HAVE_LCONV_THOUSANDS_SEP
+       struct lconv *lc = localeconv();
+       int i;
+
+       if (lc->thousands_sep != NULL)
+               for (i = 0; lc->thousands_sep[i] != '\0'; i++)
+                       OUTCHAR(str, *len, size, lc->thousands_sep[i]);
+       else
+#endif /* HAVE_LOCALECONV && HAVE_LCONV_THOUSANDS_SEP */
+               OUTCHAR(str, *len, size, ',');
+}
+
+static int
+getnumsep(int digits)
+{
+       int separators = (digits - ((digits % 3 == 0) ? 1 : 0)) / 3;
+#if HAVE_LOCALECONV && HAVE_LCONV_THOUSANDS_SEP
+       int strln;
+       struct lconv *lc = localeconv();
+
+       /* We support an arbitrary separator length (including zero). */
+       if (lc->thousands_sep != NULL) {
+               for (strln = 0; lc->thousands_sep[strln] != '\0'; strln++)
+                       continue;
+               separators *= strln;
+       }
+#endif /* HAVE_LOCALECONV && HAVE_LCONV_THOUSANDS_SEP */
+       return separators;
+}
+
+static int
+getexponent(LDOUBLE value)
+{
+       LDOUBLE tmp = (value >= 0.0) ? value : -value;
+       int exponent = 0;
+
+       /*
+        * We check for 99 > exponent > -99 in order to work around possible
+        * endless loops which could happen (at least) in the second loop (at
+        * least) if we're called with an infinite value.  However, we checked
+        * for infinity before calling this function using our ISINF() macro, so
+        * this might be somewhat paranoid.
+        */
+       while (tmp < 1.0 && tmp > 0.0 && --exponent > -99)
+               tmp *= 10;
+       while (tmp >= 10.0 && ++exponent < 99)
+               tmp /= 10;
+
+       return exponent;
+}
+
+static int
+convert(UINTMAX_T value, char *buf, size_t size, int base, int caps)
+{
+       const char *digits = caps ? "0123456789ABCDEF" : "0123456789abcdef";
+       size_t pos = 0;
+
+       /* We return an unterminated buffer with the digits in reverse order. */
+       do {
+               buf[pos++] = digits[value % base];
+               value /= base;
+       } while (value != 0 && pos < size);
+
+       return (int)pos;
+}
+
+static UINTMAX_T
+cast(LDOUBLE value)
+{
+       UINTMAX_T result;
+
+       /*
+        * We check for ">=" and not for ">" because if UINTMAX_MAX cannot be
+        * represented exactly as an LDOUBLE value (but is less than LDBL_MAX),
+        * it may be increased to the nearest higher representable value for the
+        * comparison (cf. C99: 6.3.1.4, 2).  It might then equal the LDOUBLE
+        * value although converting the latter to UINTMAX_T would overflow.
+        */
+       if (value >= UINTMAX_MAX)
+               return UINTMAX_MAX;
+
+       result = value;
+       /*
+        * At least on NetBSD/sparc64 3.0.2 and 4.99.30, casting long double to
+        * an integer type converts e.g. 1.9 to 2 instead of 1 (which violates
+        * the standard).  Sigh.
+        */
+       return (result <= value) ? result : result - 1;
+}
+
+static UINTMAX_T
+myround(LDOUBLE value)
+{
+       UINTMAX_T intpart = cast(value);
+
+       return ((value -= intpart) < 0.5) ? intpart : intpart + 1;
+}
+
+static LDOUBLE
+mypow10(int exponent)
+{
+       LDOUBLE result = 1;
+
+       while (exponent > 0) {
+               result *= 10;
+               exponent--;
+       }
+       while (exponent < 0) {
+               result /= 10;
+               exponent++;
+       }
+       return result;
+}
+#endif /* !HAVE_VSNPRINTF */
+
+#if !HAVE_VASPRINTF
+#if NEED_MYMEMCPY
+void *
+mymemcpy(void *dst, void *src, size_t len)
+{
+       const char *from = src;
+       char *to = dst;
+
+       /* No need for optimization, we use this only to replace va_copy(3). */
+       while (len-- > 0)
+               *to++ = *from++;
+       return dst;
+}
+#endif /* NEED_MYMEMCPY */
+
+int
+rpl_vasprintf(char **ret, const char *format, va_list ap)
+{
+       size_t size;
+       int len;
+       va_list aq;
+
+       VA_COPY(aq, ap);
+       len = vsnprintf(NULL, 0, format, aq);
+       VA_END_COPY(aq);
+       if (len < 0 || (*ret = malloc(size = len + 1)) == NULL)
+               return -1;
+       return vsnprintf(*ret, size, format, ap);
+}
+#endif /* !HAVE_VASPRINTF */
+
+#if !HAVE_SNPRINTF
+#if HAVE_STDARG_H
+int
+rpl_snprintf(char *str, size_t size, const char *format, ...)
+#else
+int
+rpl_snprintf(va_alist) va_dcl
+#endif /* HAVE_STDARG_H */
+{
+#if !HAVE_STDARG_H
+       char *str;
+       size_t size;
+       char *format;
+#endif /* HAVE_STDARG_H */
+       va_list ap;
+       int len;
+
+       VA_START(ap, format);
+       VA_SHIFT(ap, str, char *);
+       VA_SHIFT(ap, size, size_t);
+       VA_SHIFT(ap, format, const char *);
+       len = vsnprintf(str, size, format, ap);
+       va_end(ap);
+       return len;
+}
+#endif /* !HAVE_SNPRINTF */
+
+#if !HAVE_ASPRINTF
+#if HAVE_STDARG_H
+int
+rpl_asprintf(char **ret, const char *format, ...)
+#else
+int
+rpl_asprintf(va_alist) va_dcl
+#endif /* HAVE_STDARG_H */
+{
+#if !HAVE_STDARG_H
+       char **ret;
+       char *format;
+#endif /* HAVE_STDARG_H */
+       va_list ap;
+       int len;
+
+       VA_START(ap, format);
+       VA_SHIFT(ap, ret, char **);
+       VA_SHIFT(ap, format, const char *);
+       len = vasprintf(ret, format, ap);
+       va_end(ap);
+       return len;
+}
+#endif /* !HAVE_ASPRINTF */
+#else  /* Dummy declaration to avoid empty translation unit warnings. */
+int main(void);
+#endif /* !HAVE_SNPRINTF || !HAVE_VSNPRINTF || !HAVE_ASPRINTF || [...] */
+
+#if TEST_SNPRINTF
+int
+main(void)
+{
+       const char *float_fmt[] = {
+               /* "%E" and "%e" formats. */
+#if HAVE_LONG_LONG_INT && !OS_BSD && !OS_IRIX
+               "%.16e",
+               "%22.16e",
+               "%022.16e",
+               "%-22.16e",
+               "%#+'022.16e",
+#endif /* HAVE_LONG_LONG_INT && !OS_BSD && !OS_IRIX */
+               "foo|%#+0123.9E|bar",
+               "%-123.9e",
+               "%123.9e",
+               "%+23.9e",
+               "%+05.8e",
+               "%-05.8e",
+               "%05.8e",
+               "%+5.8e",
+               "%-5.8e",
+               "% 5.8e",
+               "%5.8e",
+               "%+4.9e",
+#if !OS_LINUX  /* glibc sometimes gets these wrong. */
+               "%+#010.0e",
+               "%#10.1e",
+               "%10.5e",
+               "% 10.5e",
+               "%5.0e",
+               "%5.e",
+               "%#5.0e",
+               "%#5.e",
+               "%3.2e",
+               "%3.1e",
+               "%-1.5e",
+               "%1.5e",
+               "%01.3e",
+               "%1.e",
+               "%.1e",
+               "%#.0e",
+               "%+.0e",
+               "% .0e",
+               "%.0e",
+               "%#.e",
+               "%+.e",
+               "% .e",
+               "%.e",
+               "%4e",
+               "%e",
+               "%E",
+#endif /* !OS_LINUX */
+               /* "%F" and "%f" formats. */
+#if !OS_BSD && !OS_IRIX
+               "% '022f",
+               "%+'022f",
+               "%-'22f",
+               "%'22f",
+#if HAVE_LONG_LONG_INT
+               "%.16f",
+               "%22.16f",
+               "%022.16f",
+               "%-22.16f",
+               "%#+'022.16f",
+#endif /* HAVE_LONG_LONG_INT */
+#endif /* !OS_BSD && !OS_IRIX */
+               "foo|%#+0123.9F|bar",
+               "%-123.9f",
+               "%123.9f",
+               "%+23.9f",
+               "%+#010.0f",
+               "%#10.1f",
+               "%10.5f",
+               "% 10.5f",
+               "%+05.8f",
+               "%-05.8f",
+               "%05.8f",
+               "%+5.8f",
+               "%-5.8f",
+               "% 5.8f",
+               "%5.8f",
+               "%5.0f",
+               "%5.f",
+               "%#5.0f",
+               "%#5.f",
+               "%+4.9f",
+               "%3.2f",
+               "%3.1f",
+               "%-1.5f",
+               "%1.5f",
+               "%01.3f",
+               "%1.f",
+               "%.1f",
+               "%#.0f",
+               "%+.0f",
+               "% .0f",
+               "%.0f",
+               "%#.f",
+               "%+.f",
+               "% .f",
+               "%.f",
+               "%4f",
+               "%f",
+               "%F",
+               /* "%G" and "%g" formats. */
+#if !OS_BSD && !OS_IRIX && !OS_LINUX
+               "% '022g",
+               "%+'022g",
+               "%-'22g",
+               "%'22g",
+#if HAVE_LONG_LONG_INT
+               "%.16g",
+               "%22.16g",
+               "%022.16g",
+               "%-22.16g",
+               "%#+'022.16g",
+#endif /* HAVE_LONG_LONG_INT */
+#endif /* !OS_BSD && !OS_IRIX && !OS_LINUX */
+               "foo|%#+0123.9G|bar",
+               "%-123.9g",
+               "%123.9g",
+               "%+23.9g",
+               "%+05.8g",
+               "%-05.8g",
+               "%05.8g",
+               "%+5.8g",
+               "%-5.8g",
+               "% 5.8g",
+               "%5.8g",
+               "%+4.9g",
+#if !OS_LINUX  /* glibc sometimes gets these wrong. */
+               "%+#010.0g",
+               "%#10.1g",
+               "%10.5g",
+               "% 10.5g",
+               "%5.0g",
+               "%5.g",
+               "%#5.0g",
+               "%#5.g",
+               "%3.2g",
+               "%3.1g",
+               "%-1.5g",
+               "%1.5g",
+               "%01.3g",
+               "%1.g",
+               "%.1g",
+               "%#.0g",
+               "%+.0g",
+               "% .0g",
+               "%.0g",
+               "%#.g",
+               "%+.g",
+               "% .g",
+               "%.g",
+               "%4g",
+               "%g",
+               "%G",
+#endif /* !OS_LINUX */
+               NULL
+       };
+       double float_val[] = {
+               -4.136,
+               -134.52,
+               -5.04030201,
+               -3410.01234,
+               -999999.999999,
+               -913450.29876,
+               -913450.2,
+               -91345.2,
+               -9134.2,
+               -913.2,
+               -91.2,
+               -9.2,
+               -9.9,
+               4.136,
+               134.52,
+               5.04030201,
+               3410.01234,
+               999999.999999,
+               913450.29876,
+               913450.2,
+               91345.2,
+               9134.2,
+               913.2,
+               91.2,
+               9.2,
+               9.9,
+               9.96,
+               9.996,
+               9.9996,
+               9.99996,
+               9.999996,
+               9.9999996,
+               9.99999996,
+               0.99999996,
+               0.99999999,
+               0.09999999,
+               0.00999999,
+               0.00099999,
+               0.00009999,
+               0.00000999,
+               0.00000099,
+               0.00000009,
+               0.00000001,
+               0.0000001,
+               0.000001,
+               0.00001,
+               0.0001,
+               0.001,
+               0.01,
+               0.1,
+               1.0,
+               1.5,
+               -1.5,
+               -1.0,
+               -0.1,
+#if !OS_BSD    /* BSD sometimes gets these wrong. */
+#ifdef INFINITY
+               INFINITY,
+               -INFINITY,
+#endif /* defined(INFINITY) */
+#ifdef NAN
+               NAN,
+#endif /* defined(NAN) */
+#endif /* !OS_BSD */
+               0
+       };
+       const char *long_fmt[] = {
+               "foo|%0123ld|bar",
+#if !OS_IRIX
+               "% '0123ld",
+               "%+'0123ld",
+               "%-'123ld",
+               "%'123ld",
+#endif /* !OS_IRiX */
+               "%123.9ld",
+               "% 123.9ld",
+               "%+123.9ld",
+               "%-123.9ld",
+               "%0123ld",
+               "% 0123ld",
+               "%+0123ld",
+               "%-0123ld",
+               "%10.5ld",
+               "% 10.5ld",
+               "%+10.5ld",
+               "%-10.5ld",
+               "%010ld",
+               "% 010ld",
+               "%+010ld",
+               "%-010ld",
+               "%4.2ld",
+               "% 4.2ld",
+               "%+4.2ld",
+               "%-4.2ld",
+               "%04ld",
+               "% 04ld",
+               "%+04ld",
+               "%-04ld",
+               "%5.5ld",
+               "%+22.33ld",
+               "%01.3ld",
+               "%1.5ld",
+               "%-1.5ld",
+               "%44ld",
+               "%4ld",
+               "%4.0ld",
+               "%4.ld",
+               "%.44ld",
+               "%.4ld",
+               "%.0ld",
+               "%.ld",
+               "%ld",
+               NULL
+       };
+       long int long_val[] = {
+#ifdef LONG_MAX
+               LONG_MAX,
+#endif /* LONG_MAX */
+#ifdef LONG_MIN
+               LONG_MIN,
+#endif /* LONG_MIN */
+               -91340,
+               91340,
+               341,
+               134,
+               0203,
+               -1,
+               1,
+               0
+       };
+       const char *ulong_fmt[] = {
+               /* "%u" formats. */
+               "foo|%0123lu|bar",
+#if !OS_IRIX
+               "% '0123lu",
+               "%+'0123lu",
+               "%-'123lu",
+               "%'123lu",
+#endif /* !OS_IRiX */
+               "%123.9lu",
+               "% 123.9lu",
+               "%+123.9lu",
+               "%-123.9lu",
+               "%0123lu",
+               "% 0123lu",
+               "%+0123lu",
+               "%-0123lu",
+               "%5.5lu",
+               "%+22.33lu",
+               "%01.3lu",
+               "%1.5lu",
+               "%-1.5lu",
+               "%44lu",
+               "%lu",
+               /* "%o" formats. */
+               "foo|%#0123lo|bar",
+               "%#123.9lo",
+               "%# 123.9lo",
+               "%#+123.9lo",
+               "%#-123.9lo",
+               "%#0123lo",
+               "%# 0123lo",
+               "%#+0123lo",
+               "%#-0123lo",
+               "%#5.5lo",
+               "%#+22.33lo",
+               "%#01.3lo",
+               "%#1.5lo",
+               "%#-1.5lo",
+               "%#44lo",
+               "%#lo",
+               "%123.9lo",
+               "% 123.9lo",
+               "%+123.9lo",
+               "%-123.9lo",
+               "%0123lo",
+               "% 0123lo",
+               "%+0123lo",
+               "%-0123lo",
+               "%5.5lo",
+               "%+22.33lo",
+               "%01.3lo",
+               "%1.5lo",
+               "%-1.5lo",
+               "%44lo",
+               "%lo",
+               /* "%X" and "%x" formats. */
+               "foo|%#0123lX|bar",
+               "%#123.9lx",
+               "%# 123.9lx",
+               "%#+123.9lx",
+               "%#-123.9lx",
+               "%#0123lx",
+               "%# 0123lx",
+               "%#+0123lx",
+               "%#-0123lx",
+               "%#5.5lx",
+               "%#+22.33lx",
+               "%#01.3lx",
+               "%#1.5lx",
+               "%#-1.5lx",
+               "%#44lx",
+               "%#lx",
+               "%#lX",
+               "%123.9lx",
+               "% 123.9lx",
+               "%+123.9lx",
+               "%-123.9lx",
+               "%0123lx",
+               "% 0123lx",
+               "%+0123lx",
+               "%-0123lx",
+               "%5.5lx",
+               "%+22.33lx",
+               "%01.3lx",
+               "%1.5lx",
+               "%-1.5lx",
+               "%44lx",
+               "%lx",
+               "%lX",
+               NULL
+       };
+       unsigned long int ulong_val[] = {
+#ifdef ULONG_MAX
+               ULONG_MAX,
+#endif /* ULONG_MAX */
+               91340,
+               341,
+               134,
+               0203,
+               1,
+               0
+       };
+       const char *llong_fmt[] = {
+               "foo|%0123lld|bar",
+               "%123.9lld",
+               "% 123.9lld",
+               "%+123.9lld",
+               "%-123.9lld",
+               "%0123lld",
+               "% 0123lld",
+               "%+0123lld",
+               "%-0123lld",
+               "%5.5lld",
+               "%+22.33lld",
+               "%01.3lld",
+               "%1.5lld",
+               "%-1.5lld",
+               "%44lld",
+               "%lld",
+               NULL
+       };
+       LLONG llong_val[] = {
+#ifdef LLONG_MAX
+               LLONG_MAX,
+#endif /* LLONG_MAX */
+#ifdef LLONG_MIN
+               LLONG_MIN,
+#endif /* LLONG_MIN */
+               -91340,
+               91340,
+               341,
+               134,
+               0203,
+               -1,
+               1,
+               0
+       };
+       const char *string_fmt[] = {
+               "foo|%10.10s|bar",
+               "%-10.10s",
+               "%10.10s",
+               "%10.5s",
+               "%5.10s",
+               "%10.1s",
+               "%1.10s",
+               "%10.0s",
+               "%0.10s",
+               "%-42.5s",
+               "%2.s",
+               "%.10s",
+               "%.1s",
+               "%.0s",
+               "%.s",
+               "%4s",
+               "%s",
+               NULL
+       };
+       const char *string_val[] = {
+               "Hello",
+               "Hello, world!",
+               "Sound check: One, two, three.",
+               "This string is a little longer than the other strings.",
+               "1",
+               "",
+               NULL
+       };
+#if !OS_SYSV   /* SysV uses a different format than we do. */
+       const char *pointer_fmt[] = {
+               "foo|%p|bar",
+               "%42p",
+               "%p",
+               NULL
+       };
+       const char *pointer_val[] = {
+               *pointer_fmt,
+               *string_fmt,
+               *string_val,
+               NULL
+       };
+#endif /* !OS_SYSV */
+       char buf1[1024], buf2[1024];
+       double value, digits = 9.123456789012345678901234567890123456789;
+       int i, j, r1, r2, failed = 0, num = 0;
+
+/*
+ * Use -DTEST_NILS in order to also test the conversion of nil values.  Might
+ * segfault on systems which don't support converting a NULL pointer with "%s"
+ * and lets some test cases fail against BSD and glibc due to bugs in their
+ * implementations.
+ */
+#ifndef TEST_NILS
+#define TEST_NILS 0
+#elif TEST_NILS
+#undef TEST_NILS
+#define TEST_NILS 1
+#endif /* !defined(TEST_NILS) */
+#ifdef TEST
+#undef TEST
+#endif /* defined(TEST) */
+#define TEST(fmt, val)                                                         \
+do {                                                                           \
+       for (i = 0; fmt[i] != NULL; i++)                                       \
+               for (j = 0; j == 0 || val[j - TEST_NILS] != 0; j++) {          \
+                       r1 = sprintf(buf1, fmt[i], val[j]);                    \
+                       r2 = snprintf(buf2, sizeof(buf2), fmt[i], val[j]);     \
+                       if (strcmp(buf1, buf2) != 0 || r1 != r2) {             \
+                               (void)printf("Results don't match, "           \
+                                   "format string: %s\n"                      \
+                                   "\t sprintf(3): [%s] (%d)\n"               \
+                                   "\tsnprintf(3): [%s] (%d)\n",              \
+                                   fmt[i], buf1, r1, buf2, r2);               \
+                               failed++;                                      \
+                       }                                                      \
+                       num++;                                                 \
+               }                                                              \
+} while (/* CONSTCOND */ 0)
+
+#if HAVE_LOCALE_H
+       (void)setlocale(LC_ALL, "");
+#endif /* HAVE_LOCALE_H */
+
+       (void)puts("Testing our snprintf(3) against your system's sprintf(3).");
+       TEST(float_fmt, float_val);
+       TEST(long_fmt, long_val);
+       TEST(ulong_fmt, ulong_val);
+       TEST(llong_fmt, llong_val);
+       TEST(string_fmt, string_val);
+#if !OS_SYSV   /* SysV uses a different format than we do. */
+       TEST(pointer_fmt, pointer_val);
+#endif /* !OS_SYSV */
+       (void)printf("Result: %d out of %d tests failed.\n", failed, num);
+
+       (void)fputs("Checking how many digits we support: ", stdout);
+       for (i = 0; i < 100; i++) {
+               value = pow(10, i) * digits;
+               (void)sprintf(buf1, "%.1f", value);
+               (void)snprintf(buf2, sizeof(buf2), "%.1f", value);
+               if (strcmp(buf1, buf2) != 0) {
+                       (void)printf("apparently %d.\n", i);
+                       break;
+               }
+       }
+       return (failed == 0) ? 0 : 1;
+}
+#endif /* TEST_SNPRINTF */
+
+/* vim: set joinspaces textwidth=80: */
diff --git a/src/version.h b/src/version.h
new file mode 100644 (file)
index 0000000..c543366
--- /dev/null
@@ -0,0 +1,47 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: version.h,v 1.10 2012/08/02 21:47:12 broeker Exp $ */
+
+/*     cscope - interactive C symbol cross-reference
+ *
+ *     Changing the cross-reference file part of the program version
+ *     forces rebuilding of the cross-reference.
+ */
+
+#ifndef CSCOPE_VERSION_H
+#define CSCOPE_VERSION_H
+
+#define        FILEVERSION     15      /* Initial Open Source and Linux Port */
+#define        FIXVERSION      ".8a"   /* feature and bug fix version */
+
+#endif /* CSCOPE_VERSION_H */
diff --git a/src/vp.h b/src/vp.h
new file mode 100644 (file)
index 0000000..0642191
--- /dev/null
+++ b/src/vp.h
@@ -0,0 +1,72 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: vp.h,v 1.7 2004/04/30 15:31:43 broeker Exp $ */
+
+/*
+ *     VPATH assumptions:
+ *             VPATH is the environment variable containing the view path 
+ *             where each path name is followed by ':', '\n', or '\0'.
+ *             Embedded blanks are considered part of the path.
+ */
+
+#ifndef CSCOPE_VP_H
+#define CSCOPE_VP_H
+
+#define MAXPATH        200             /* max length for entire name */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# define HAVE_FCNTL_H 1                /* in case of doubt, assume it's there */
+#endif
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>            /* needed for O_... open flags */
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if !NOMALLOC
+extern char    **vpdirs;       /* directories (including current) in view path */
+#else
+#define        MAXDIR  25              /* same as libVP */
+#define        DIRLEN  80              /* same as libVP */
+extern char    vpdirs[MAXDIR][DIRLEN + 1];
+#endif
+extern int     vpndirs;        /* number of directories in view path */
+
+void   vpinit(char *current_dir);
+int    vpopen(char *path, int oflag);
+int    vpaccess(char *path, mode_t amode);
+
+#endif /* CSCOPE_VP_H */
diff --git a/src/vpaccess.c b/src/vpaccess.c
new file mode 100644 (file)
index 0000000..607cee1
--- /dev/null
@@ -0,0 +1,59 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* $Id: vpaccess.c,v 1.3 2009/04/10 13:39:23 broeker Exp $ */
+
+/* vpaccess - view path version of the access system call */
+
+#include <stdio.h>
+#include <unistd.h>
+#include "vp.h"
+#include <sys/types.h>
+int
+vpaccess(char *path, mode_t amode)
+{
+       char    buf[MAXPATH + 1];
+       int     returncode;
+       int     i;
+
+       if ((returncode = access(path, amode)) == -1 && path[0] != '/') {
+               vpinit(NULL);
+               for (i = 1; i < vpndirs; i++) {
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], path);
+                       if ((returncode = access(buf, amode)) != -1) {
+                               break;
+                       }
+               }
+       }
+       return(returncode);
+}
diff --git a/src/vpfopen.c b/src/vpfopen.c
new file mode 100644 (file)
index 0000000..005a9b0
--- /dev/null
@@ -0,0 +1,64 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* vpfopen - view path version of the fopen library function */
+
+#include <stdio.h>
+#include <string.h>
+#include "vp.h"
+#include "global.h"
+
+static char const rcsid[] = "$Id: vpfopen.c,v 1.4 2009/04/10 13:39:23 broeker Exp $";
+
+FILE *
+vpfopen(char *filename, char *type)
+{
+       char    buf[MAXPATH + 1];
+       FILE    *returncode;
+       int     i;
+
+       if ((returncode = myfopen(filename, type)) == NULL 
+               && filename[0] != '/' 
+               /* && strcmp(type, "r") == 0 */ /* HBB: this breaks if type=="rb" */
+               && type[0] == 'r'
+               ) {
+               vpinit(NULL);
+               for (i = 1; i < vpndirs; i++) {
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], filename);
+                       if ((returncode = myfopen(buf, type)) != NULL) {
+                               break;
+                       }
+
+               }
+       }
+       return(returncode);
+}
diff --git a/src/vpinit.c b/src/vpinit.c
new file mode 100644 (file)
index 0000000..15f90a0
--- /dev/null
@@ -0,0 +1,171 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+/* vpinit - initialize vpdirs or update vpdirs based on currentdir */
+
+#include <stdio.h>     /* stderr */
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "vp.h"
+#include "alloc.h"
+#include "library.h"
+#include "global.h"
+#include "constants.h"
+
+static char const rcsid[] = "$Id: vpinit.c,v 1.8 2006/07/23 20:59:20 broeker Exp $";
+
+#if !NOMALLOC
+char   **vpdirs;       /* directories (including current) in view path */
+#else
+char   vpdirs[MAXDIR][DIRLEN + 1];
+#define        MAXVPATH (MAXDIR * (DIRLEN + 1))
+#endif
+int    vpndirs;        /* number of directories in view path */
+
+void
+vpinit(char *current_dir)
+{
+       char    *suffix;        /* path from view path node */
+       char    *vpath;         /* VPATH environment variable value */
+       char    buf[MAXPATH + 1];
+       int     i;
+       char    *s;
+#if NOMALLOC
+       char    *node;          /* view path node */
+       char    vpathbuf[MAXVPATH + 1];
+#endif
+       
+       /* if an existing directory list is to be updated, free it */
+       if (current_dir != NULL && vpndirs > 0) {
+#if !NOMALLOC
+               for (i = 0; i < vpndirs; ++i) {
+                       free(vpdirs[i]);
+               }
+               free(vpdirs);
+#endif
+               vpndirs = 0;
+       }
+       /* return if the directory list has been computed */
+       /* or there isn't a view path environment variable */
+       if (vpndirs > 0 || (vpath = getenv("VPATH")) == NULL ||
+           *vpath == '\0') {
+               return;
+       }
+       /* if not given, get the current directory name */
+       if (current_dir == NULL && (current_dir = getcwd(buf, MAXPATH)) == NULL) {
+               (void) fprintf(stderr, "%s: cannot get current directory name\n", argv0);
+               return;
+       }
+       /* see if this directory is in the first view path node */
+       for (i = 0; vpath[i] == current_dir[i] && vpath[i] != '\0'; ++i) {
+               ;
+       }
+       if ((vpath[i] != ':' && vpath[i] != '\0') ||
+           (current_dir[i] != '/' && current_dir[i] != '\0')) {
+               return;
+       }
+       suffix = &current_dir[i];
+#if !NOMALLOC
+
+       /* count the nodes in the view path */
+       vpndirs = 1;
+       for (i = 0; vpath[i] != '\0'; ++i) {
+               if (vpath[i] == ':' && vpath[i + 1]) {
+                       ++vpndirs;
+               }
+       }
+       /* create the source directory list */
+       vpdirs = mymalloc(vpndirs * sizeof(char *));
+
+       /* don't change VPATH in the environment */
+       vpath = my_strdup(vpath);
+       
+       /* split the view path into nodes */
+       for (i = 0, s = vpath; *s != '\0'; ++i) {
+               vpdirs[i] = s;
+               while (*s != '\0' && *++s != ':') {
+                       if (*s == '\n') {
+                               *s = '\0';
+                       }
+               }
+               if (*s != '\0') {
+                       *s++ = '\0';
+               }
+       }
+       /* convert the view path nodes to directories */
+       for (i = 0; i < vpndirs; ++i) {
+               s = mymalloc((strlen(vpdirs[i]) + strlen(suffix) + 1));
+               (void) strcpy(s, vpdirs[i]);
+               (void) strcat(s, suffix);
+               vpdirs[i] = s;
+       }
+       free(vpath);
+#else
+       /* don't change VPATH in the environment */
+       if (strlen(vpath) > MAXVPATH) {
+               (void) fprintf(stderr, "%s: VPATH is longer than %d characters: %s\n", argv0, MAXVPATH, vpath);
+               return;
+       }
+       (void) strcpy(vpathbuf, vpath);
+       s = vpathbuf;
+       
+       /* convert the view path nodes to directories */
+       while (*s != '\0') {
+               
+               /* get the next node */
+               node = s;
+               while (*s != '\0' && *++s != ':') {
+                       if (*s == '\n') {
+                               *s = '\0';
+                       }
+               }
+               if (*s != '\0') {
+                       *s++ = '\0';
+               }
+               /* ignore a directory that is too long */
+               if (strlen(node) + strlen(suffix) > DIRLEN) {
+                       (void) fprintf(stderr, "%s: VPATH directory is longer than %d characters: %s%s\n", argv0, DIRLEN, node, suffix);
+               }
+               else if (vpndirs >= MAXDIR) {
+                       (void) fprintf(stderr, "%s: VPATH has more than %d nodes\n", argv0, vpndirs);
+                       return;
+               }
+               else {
+                       /* create the view path directory */
+                       (void) strcpy(vpdirs[vpndirs], node);
+                       (void) strcat(vpdirs[vpndirs], suffix);
+                       ++vpndirs;
+               }
+       }
+#endif
+}
diff --git a/src/vpopen.c b/src/vpopen.c
new file mode 100644 (file)
index 0000000..8812dba
--- /dev/null
@@ -0,0 +1,62 @@
+/*===========================================================================
+ Copyright (c) 1998-2000, The Santa Cruz Operation 
+ All rights reserved.
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ *Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ *Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ *Neither name of The Santa Cruz Operation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission. 
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE. 
+ =========================================================================*/
+
+
+/* vpopen - view path version of the open system call */
+
+#include <stdio.h>
+#include "global.h"
+#include "vp.h"
+
+#define OPENFLAG_READ  0
+
+static char const rcsid[] = "$Id: vpopen.c,v 1.5 2009/04/10 13:39:23 broeker Exp $";
+
+int
+vpopen(char *path, int oflag)
+{
+       char    buf[MAXPATH + 1];
+       int     returncode;
+       int     i;
+
+       if ((returncode = myopen(path, oflag, 0666)) == -1 && path[0] != '/' &&
+           oflag == OPENFLAG_READ) {
+               vpinit(NULL);
+               for (i = 1; i < vpndirs; i++) {
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], path);
+                       if ((returncode = myopen(buf, oflag, 0666)) != -1) {
+                               break;
+                       }
+               }
+       }
+       return(returncode);
+}
diff --git a/ylwrap b/ylwrap
new file mode 100755 (executable)
index 0000000..9253635
--- /dev/null
+++ b/ylwrap
@@ -0,0 +1,226 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2011-08-25.18; # UTC
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case "$1" in
+  '')
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+    ;;
+  --basedir)
+    basedir=$2
+    shift 2
+    ;;
+  -h|--h*)
+    cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+  INPUT is the input file
+  OUTPUT is one file PROG generates
+  DESIRED is the file we actually want instead of OUTPUT
+  PROGRAM is program to run
+  ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v|--v*)
+    echo "ylwrap $scriptversion"
+    exit $?
+    ;;
+esac
+
+
+# The input.
+input="$1"
+shift
+case "$input" in
+  [\\/]* | ?:[\\/]*)
+    # Absolute path; do nothing.
+    ;;
+  *)
+    # Relative path.  Make it absolute.
+    input="`pwd`/$input"
+    ;;
+esac
+
+pairlist=
+while test "$#" -ne 0; do
+  if test "$1" = "--"; then
+    shift
+    break
+  fi
+  pairlist="$pairlist $1"
+  shift
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+  [\\/]* | ?:[\\/]*) ;;
+  *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines.  But that might take us over the 14-char limit.
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+  set X $pairlist
+  shift
+  first=yes
+  # Since DOS filename conventions don't allow two dots,
+  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
+  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
+  y_tab_nodot="no"
+  if test -f y_tab.c || test -f y_tab.h; then
+    y_tab_nodot="yes"
+  fi
+
+  # The directory holding the input.
+  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
+  # Quote $INPUT_DIR so we can use it in a regexp.
+  # FIXME: really we should care about more than `.' and `\'.
+  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
+
+  while test "$#" -ne 0; do
+    from="$1"
+    # Handle y_tab.c and y_tab.h output by DOS
+    if test $y_tab_nodot = "yes"; then
+      if test $from = "y.tab.c"; then
+        from="y_tab.c"
+      else
+        if test $from = "y.tab.h"; then
+          from="y_tab.h"
+        fi
+      fi
+    fi
+    if test -f "$from"; then
+      # If $2 is an absolute path name, then just use that,
+      # otherwise prepend `../'.
+      case "$2" in
+        [\\/]* | ?:[\\/]*) target="$2";;
+        *) target="../$2";;
+      esac
+
+      # We do not want to overwrite a header file if it hasn't
+      # changed.  This avoid useless recompilations.  However the
+      # parser itself (the first file) should always be updated,
+      # because it is the destination of the .y.c rule in the
+      # Makefile.  Divert the output of all other files to a temporary
+      # file so we can compare them to existing versions.
+      if test $first = no; then
+        realtarget="$target"
+        target="tmp-`echo $target | sed s/.*[\\/]//g`"
+      fi
+      # Edit out `#line' or `#' directives.
+      #
+      # We don't want the resulting debug information to point at
+      # an absolute srcdir; it is better for it to just mention the
+      # .y file with no path.
+      #
+      # We want to use the real output file name, not yy.lex.c for
+      # instance.
+      #
+      # We want the include guards to be adjusted too.
+      FROM=`echo "$from" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+      TARGET=`echo "$2" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+
+      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
+          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+
+      # Check whether header files must be updated.
+      if test $first = no; then
+        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+          echo "$2" is unchanged
+          rm -f "$target"
+        else
+          echo updating "$2"
+          mv -f "$target" "$realtarget"
+        fi
+      fi
+    else
+      # A missing file is only an error for the first file.  This
+      # is a blatant hack to let us support using "yacc -d".  If -d
+      # is not specified, we don't want an error when the header
+      # file is "missing".
+      if test $first = yes; then
+        ret=1
+      fi
+    fi
+    shift
+    shift
+    first=no
+  done
+else
+  ret=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End: