diff options
104 files changed, 83739 insertions, 0 deletions
@@ -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 @@ -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 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. + + @@ -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 index 0000000..a1e89e1 --- /dev/null +++ b/INSTALL.gnu @@ -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 index 0000000..ae0fc53 --- /dev/null +++ b/Makefile.am @@ -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 index 0000000..2146e01 --- /dev/null +++ b/Makefile.in @@ -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: @@ -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 @@ -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 + @@ -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 index 0000000..cd69d7b --- /dev/null +++ b/acinclude.m4 @@ -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 index 0000000..c4bc224 --- /dev/null +++ b/aclocal.m4 @@ -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]) @@ -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 index 0000000..49ba16f --- /dev/null +++ b/config.guess @@ -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 index 0000000..2219be7 --- /dev/null +++ b/config.h.in @@ -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 index 0000000..d6b6b3c --- /dev/null +++ b/config.sub @@ -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 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 = "" + +} +{ + 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 = "" +} +/^[\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 index 0000000..9f05fad --- /dev/null +++ b/configure.in @@ -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 index 0000000..769b4f5 --- /dev/null +++ b/contrib/Makefile.am @@ -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 index 0000000..6a92346 --- /dev/null +++ b/contrib/Makefile.in @@ -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 index 0000000..c6fd4c6 --- /dev/null +++ b/contrib/README @@ -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 index 0000000..555559d --- /dev/null +++ b/contrib/cctree.txt @@ -0,0 +1,537 @@ +*CCTree.txt* Plugin for C Call-Tree Explorer *CCTree*
+
+Author: Hari Rangarajan (First.Last AT gmail DOT com)
+Last Change: 20 May 2011
+
+CCTree version 1.51
+
+For Vim version 7.0 and above
+
+==============================================================================
+
+1. Overview |CCTree-overview|
+2. Downloads |CCTree-download|
+3. Installation |CCTree-installation|
+4. Configuration |CCTree-configuration|
+5. Features |CCTree-features|
+6. Limitations |CCTree-limitations|
+7. FAQ & TIPS |CCTree-faq|
+8. History |CCTree-history|
+9. Thanks |CCTree-thanks|
+
+==============================================================================
+1. Overview~
+ *CCTree-overview*
+
+Plugin generates dependency-trees for symbols using a cscope database in Vim.
+Basic cross-referencing includes functions and macros. Enhanced symbol
+processing covers macros, typedefs, enums, and global variables.
+
+Requires Cscope and works best with C code.
+
+==============================================================================
+2. Downloads~
+ *CCTree-download*
+
+You can download the latest release of the script from this url :
+ http://www.vim.org/scripts/script.php?script_id=2368
+
+
+Cscope packages can be found here:
+ http://cscope.sourceforge.net/
+ http://code.google.com/p/cscope-win32/
+
+
+==============================================================================
+3. Installation~
+ *CCTree-installation*
+
+Copy this file to ~/.vim/plugins/ or to /vimfiles/plugins/ (on Win32
+platforms)
+
+It should also be possible to load it as a filetype plugin ~/.vim/ftplugin/c/
+Need to set :filetype plugin on
+
+
+==============================================================================
+CONFIGURATION *CCTree-configuration*
+4. Options~
+
+You can customize behavior by changing the following variable settings
+
+4.1.1 Cscope Symbol Database~
+ *CCTreeCscopeDb*
+
+Cscope database file, g:CCTreeCscopeDb = "cscope.out"
+
+4.1.2 Call-tree Depth~
+ *CCTreeRecursiveDepth*
+Maximum call levels, g:CCTreeRecursiveDepth = 3
+
+4.1.3 Call-tree Minimum Visible Depth~
+ *CCTreeMinVisibleDepth*
+Maximum visible(unfolded) level, g:CCTreeMinVisibleDepth = 3
+
+4.1.4 Call-tree window display~
+
+4.4.1 Orientation~
+ *CCTreeOrientation*
+Orientation of window, g:CCTreeOrientation = "leftabove"
+ (standard vim options for split: [right|left][above|below])
+
+4.5 Direction~
+ *CCTreeWindowVertical*
+Use Vertical window, g:CCTreeWindowVertical = 1
+
+4.5.1 Dimensions~
+
+These settings determine the layout of the CCTree preview window.
+
+4.5.2 Horizontal Window Settings~
+ *CCTreeWindowHeight*
+ Horizontal window, g:CCTreeWindowHeight, default is -1.
+
+4.5.2 Vertical Window Settings~
+ *CCTreeWindowMinWidth*
+ *CCTreeWindowWidth*
+ Minimum width for window, g:CCTreeWindowMinWidth = 40.
+ g:CCTreeWindowWidth = -1, auto-select best width to fit.
+
+
+4.6 Call-tree display format~
+ *CCTreeDisplayMode*
+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.
+
+4.7. Dynamic Call-tree highlighting~
+ *CCTreeHilightCallTree*
+
+Enable/disable dynamic call-tree highlighting, default: 1
+
+
+4.7.1 Syntax items~
+ *CCTreeSymbol* *CCTreeHiSymbol*
+CCTreeSymbol is the symbol name.
+CCTreeHiSymbol is the highlighted call tree functions.
+
+ *CCTreeMarkers* *CCTreeHiMarkers*
+CCTreeMarkers include "|","+--->".
+CCTreeHiMarkers is the same as CCTreeMarkers except these denote the
+highlighted call-tree.
+
+
+
+==============================================================================
+COMMAND LIST *CCTree-commands-list*
+
+Database Management~
+ CCTreeLoadDB <dbname>
+ CCTreeAppendDB <dbname>
+ CCTreeUnLoadDB
+ CCTreeShowLoadedDBs
+ Refer to |CCTree-usage|
+
+Native Xref Database~
+ CCTreeLoadXRefDB <dbname>
+ CCTreeSaveXRefDB <dbname>
+
+ Refer to |CCTree-fast-loading|
+
+Symbol tracing~
+ CCTreeTraceForward <symbolname>
+ CCTreeTraceReverse <symbolname>
+ CCTreeRecurseDepthPlus
+ CCTreeRecurseDepthMinus
+ Refer to |CCTree-explore-source|
+Trace Management~
+ CCTreeWindowSaveCopy
+ CCTreeWindowHiCallTree
+ Refer to |CCTree-preview-window|
+
+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)
+ *CCTree-Enhanced-Symbol-Processing*
+ EnhancedSymbolProcessing: Cross-reference enums, macros,
+ global variables, typedefs (WARNING: Database
+ processing speeds will be slow).
+
+SHORTCUT KEYS *CCTree-Key-Map*
+Default Mappings~
+ *CCTree-Default-Key-Map*
+ 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
+ *CCTree-Custom-Key-Map*
+ Users can custom-map the short-cut keys by
+ overriding the following variables in their
+ Vim start-up configuration
+>
+ let g:CCTreeKeyTraceForwardTree = '<C-\>>'
+ let g:CCTreeKeyTraceReverseTree = '<C-\><'
+ let g:CCTreeKeyHilightTree = '<C-l>' " Static highlighting
+ let g:CCTreeKeySaveWindow = '<C-\>y'
+ let g:CCTreeKeyToggleWindow = '<C-\>w'
+ let g:CCTreeKeyCompressTree = 'zs' " Compress call-tree
+ let g:CCTreeKeyDepthPlus = '<C-\>='
+ let g:CCTreeKeyDepthMinus = '<C-\>-'
+<
+
+==============================================================================
+FEATURES *CCTree-features*
+
+5.1. Symbol database~
+ *CCTree-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~
+>
+ :CCTreeLoadDB
+<
+ (Please note that it might take a while depending on the
+ database size)
+
+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.
+
+Unload database ~
+ >
+ :CCTreeUnLoadDB
+<
+Append database~
+ >
+ :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.
+
+FASTER DATABASE LOADING *CCTree-fast-loading*
+
+Save native Xref Db~
+>
+ :CCTreeSaveXRefDb cctree.out
+<
+This command will save the cross-referenced symbols currently loaded into
+memory into a serialized format for faster loading.
+
+Load native XRef Db~
+>
+ :CCTreeLoadXRefDb cctree.out
+<
+This command will load cross-referenced symbols from the previously saved
+native format database.
+
+ccglue~
+ *CCTree-ccglue*
+
+Check out the ccglue project at http://ccglue.sourceforge.net for an external
+tool that can build cctree-compatible xref databases.
+
+
+5.2. Exploring source-code~
+ *CCTree-explore-source*
+
+Get reverse call tree for symbol <C-\><
+>
+ :CCTreeTraceReverse <symbolname>
+<
+
+Get forward call tree for symbol <C-\>>
+>
+ :CCTreeTraceForward <symbolname>
+<
+Increase depth of tree and update <C-\>=
+>
+ :CCTreeRecurseDepthPlus
+<
+Decrease depth of tree and update <C-\>-
+>
+ :CCTreeRecurseDepthMinus
+<
+5.3. Preview Window~
+ *CCTree-preview-window*
+Open symbol in other window <CR>
+Preview symbol in other window <Ctrl-P>
+
+5.4. Syntax Coloring~
+ *CCTree-Syntax*
+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, *CCTreeHilightCallTree* .
+
+For faster highlighting, the value of 'updatetime' can be changed.
+
+5.5 Support for large database files~
+ *CCTree-LargeDatabase* *CCTree-LargeFile*
+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)
+
+5.5.1 Using GNU Coreutils (split/cat)~
+ *CCTree-Tools-split* *CCTree-Tools-cat*
+ 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~
+>
+ let 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)~
+>
+ let 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
+>
+ let g:CCTreeDbFileSplitLines = -1
+<
+Largest filesize Vimscript can handle; file sizes greater than this will
+be temporarily split
+>
+ let 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
+<
+ *CCTree-Tools-Perl*
+ *CCTree-Tools-Perl-LargeFile*
+Enabling perl interface~
+
+ By default, perl usage is disabled. Set
+>
+ let 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|
+
+5.6. Miscellaneous *CCTree-Miscellaneous*
+
+ UTF-8 usage *CCTree-UTF8-Symbols*
+ 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.
+>
+ let g:CCTreeUseUTF8Symbols = 1
+<
+ The options interface (CCTreeOptsxxx) can be used to
+ modify options on-the-fly.
+
+==============================================================================
+6. Limitations~
+ *CCTree-limitations*
+
+The following are known limitations:
+
+Basic Symbol Processing:
+ (1) 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.
+
+
+==============================================================================
+7. FAQ~
+ *CCTree-faq*
+
++ I see strange characters "!#@" on my screen when dynamic highlighting is
+enabled. Why do I see them?
+
+Check :hi ignore. You will see something like
+hi ignore ctermfg=white guifg=bg
+
+ For console, white must be your background color; for GUI, guifg must be set
+to bg.
+
+==============================================================================
+8. History~
+ *CCTree-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
+
+ersion 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 display-related 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
+ 6. Preview window fix
+
+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
+ (Note: Functions inside macro definitions will be incorrectly
+ attributed to the top level calling function)
+
+
+==============================================================================
+9. Thanks~
+ *CCTree-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.40 -- Testing/bug report/patches)
+ Yegappan Lakshmanan (Ver 0.20 -- Patches)
+
+ The Vim Community, ofcourse :)
+
+
+vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
+
diff --git a/contrib/cctree.vim b/contrib/cctree.vim new file mode 100644 index 0000000..0382220 --- /dev/null +++ b/contrib/cctree.vim @@ -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 index 0000000..736de94 --- /dev/null +++ b/contrib/ocs @@ -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 index 0000000..0ea0d9c --- /dev/null +++ b/contrib/webcscope/INSTALL @@ -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 index 0000000..5b6e7c6 --- /dev/null +++ b/contrib/webcscope/LICENSE @@ -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. + + 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.) + +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. + + 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. + + 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 + + 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 index 0000000..4e61555 --- /dev/null +++ b/contrib/webcscope/TODO @@ -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 index 0000000..97d0caa --- /dev/null +++ b/contrib/webcscope/cgi-lib.pl @@ -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 index 0000000..1ed2e5c --- /dev/null +++ b/contrib/webcscope/cscope @@ -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> $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><"; + $feedback .= "<a href=\"mailto:$comment{email}\">"; + $feedback .= "$comment{email}</a>></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 index 0000000..4f5af07 --- /dev/null +++ b/contrib/webcscope/hilite.c @@ -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,"<"); + break; + case '>': + fprintf(stdout,">"); + break; + case '"': + fprintf(stdout,"""); + break; + case '&': + fprintf(stdout,"&"); + break; + case '|': + fprintf(stdout,"¦"); + 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 Binary files differnew file mode 100644 index 0000000..a694ae1 --- /dev/null +++ b/contrib/webcscope/icons/back.gif diff --git a/contrib/webcscope/icons/bomb.gif b/contrib/webcscope/icons/bomb.gif Binary files differnew file mode 100644 index 0000000..270fdb1 --- /dev/null +++ b/contrib/webcscope/icons/bomb.gif diff --git a/contrib/webcscope/icons/c.gif b/contrib/webcscope/icons/c.gif Binary files differnew file mode 100644 index 0000000..7555b6c --- /dev/null +++ b/contrib/webcscope/icons/c.gif diff --git a/contrib/webcscope/icons/down.gif b/contrib/webcscope/icons/down.gif Binary files differnew file mode 100644 index 0000000..a354c87 --- /dev/null +++ b/contrib/webcscope/icons/down.gif diff --git a/contrib/webcscope/icons/folder.gif b/contrib/webcscope/icons/folder.gif Binary files differnew file mode 100644 index 0000000..4826460 --- /dev/null +++ b/contrib/webcscope/icons/folder.gif diff --git a/contrib/webcscope/icons/folder.open.gif b/contrib/webcscope/icons/folder.open.gif Binary files differnew file mode 100644 index 0000000..30979cb --- /dev/null +++ b/contrib/webcscope/icons/folder.open.gif diff --git a/contrib/webcscope/icons/left.gif b/contrib/webcscope/icons/left.gif Binary files differnew file mode 100644 index 0000000..279e671 --- /dev/null +++ b/contrib/webcscope/icons/left.gif diff --git a/contrib/webcscope/icons/up.gif b/contrib/webcscope/icons/up.gif Binary files differnew file mode 100644 index 0000000..6d6d6d1 --- /dev/null +++ b/contrib/webcscope/icons/up.gif diff --git a/contrib/webcscope/icons/world2.gif b/contrib/webcscope/icons/world2.gif Binary files differnew file mode 100644 index 0000000..e3203f7 --- /dev/null +++ b/contrib/webcscope/icons/world2.gif diff --git a/contrib/xcscope/cscope-indexer b/contrib/xcscope/cscope-indexer new file mode 100644 index 0000000..13c0ae2 --- /dev/null +++ b/contrib/xcscope/cscope-indexer @@ -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 index 0000000..ce382a4 --- /dev/null +++ b/contrib/xcscope/xcscope.el @@ -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) @@ -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 index 0000000..5d45d42 --- /dev/null +++ b/doc/Makefile.am @@ -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 index 0000000..f35b72e --- /dev/null +++ b/doc/Makefile.in @@ -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 index 0000000..6a3a86b --- /dev/null +++ b/doc/cscope.1 @@ -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 index 0000000..fa4199c --- /dev/null +++ b/doc/xcscope.1 @@ -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 index 0000000..a9244eb --- /dev/null +++ b/install-sh @@ -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: @@ -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 index 0000000..4191a45 --- /dev/null +++ b/mkinstalldirs @@ -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 index 0000000..e026e05 --- /dev/null +++ b/packages/MSDOS/README @@ -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 index 0000000..260bb11 --- /dev/null +++ b/packages/MSDOS/djmake.bat @@ -0,0 +1,22 @@ +@echo off
+
+if exist src\fscanner.l goto dir_okay
+echo !!!! Must run this batch file from the main source directory!
+exit
+
+:dir_okay
+
+echo ---- Start by patching the ylwrap script to avoid problems
+echo with "ln -s":
+
+if exist src\ylwrap patch -p0 -i packages/MSDOS/ylwrap.pat
+if exist ylwrap patch -p1 -i packages/MSDOS/ylwrap.pat
+
+echo ---- Now configure and make it.
+echo -- NOTE --: this assumes you have pdcurses installed!
+echo -- NOTE --: Will be using '-f' mode of flex, for faster scanning
+bash configure
+make CURSES_LIBS=-lpdcurses LFLAGS="-f8B"
+
+echo ---- You may now call "make install", if desired.
+echo -- DONE --
diff --git a/packages/MSDOS/ylwrap.pat b/packages/MSDOS/ylwrap.pat new file mode 100644 index 0000000..f60049d --- /dev/null +++ b/packages/MSDOS/ylwrap.pat @@ -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 index 0000000..43ac5fa --- /dev/null +++ b/packages/cscope.spec @@ -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 index 0000000..e301a03 --- /dev/null +++ b/packages/uw7/Prototype @@ -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 index 0000000..6c0c372 --- /dev/null +++ b/packages/uw7/cscope_pkg.sh @@ -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 index 0000000..9e7299e --- /dev/null +++ b/packages/uw7/pkginfo @@ -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 index 0000000..88f55ad --- /dev/null +++ b/src/Makefile.am @@ -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 index 0000000..fbf191c --- /dev/null +++ b/src/Makefile.in @@ -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 index 0000000..add992f --- /dev/null +++ b/src/alloc.c @@ -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 index 0000000..297eb71 --- /dev/null +++ b/src/alloc.h @@ -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 index 0000000..7254ae7 --- /dev/null +++ b/src/basename.c @@ -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 index 0000000..d1a4493 --- /dev/null +++ b/src/build.c @@ -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 index 0000000..085d15b --- /dev/null +++ b/src/build.h @@ -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 index 0000000..fe1e0a3 --- /dev/null +++ b/src/command.c @@ -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 index 0000000..6726ae1 --- /dev/null +++ b/src/compath.c @@ -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 index 0000000..938dc5a --- /dev/null +++ b/src/constants.h @@ -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 index 0000000..f985930 --- /dev/null +++ b/src/crossref.c @@ -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 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 index 0000000..bf5965b --- /dev/null +++ b/src/display.c @@ -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); +} + +/* 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 index 0000000..0f4edec --- /dev/null +++ b/src/edit.c @@ -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 index 0000000..8ccf872 --- /dev/null +++ b/src/egrep.c @@ -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 + + + +#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 */ + + +/*-----------------------------------------------. +| 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 index 0000000..a930803 --- /dev/null +++ b/src/egrep.y @@ -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 index 0000000..9eff1ce --- /dev/null +++ b/src/emacs.e @@ -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 index 0000000..56bd471 --- /dev/null +++ b/src/exec.c @@ -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 index 0000000..d8da542 --- /dev/null +++ b/src/find.c @@ -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); + +/* find the symbol in the cross-reference */ + +char * +findsymbol(char *pattern) +{ + return find_symbol_or_assignment(pattern, NO); +} + +/* find the symbol in the cross-reference, and look for assignments */ +char * +findassign(char *pattern) +{ + return find_symbol_or_assignment(pattern, YES); +} + +/* 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; +} + +/* 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 (®exp, 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 (®exp, 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; +} +/* 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; +} +/* 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; +} + +/* 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 (®exp, 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(®exp); + + 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 (®exp, 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 (®exp, 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 (®exp, lcasify(string), (size_t)0, NULL, 0) ? NO : YES); + } + else { + return (regexec (®exp, 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'; +} + + +/* 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 (®exp, 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 index 0000000..aa091a0 --- /dev/null +++ b/src/fscanner.c @@ -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 index 0000000..2b264d3 --- /dev/null +++ b/src/fscanner.l @@ -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 index 0000000..cda29aa --- /dev/null +++ b/src/global.h @@ -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 index 0000000..514e542 --- /dev/null +++ b/src/gmacs.ml @@ -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 index 0000000..f26f1b1 --- /dev/null +++ b/src/gscope.c @@ -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 index 0000000..26d1db7 --- /dev/null +++ b/src/help.c @@ -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 index 0000000..3733c26 --- /dev/null +++ b/src/history.c @@ -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; +} + +/* 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; +} + +/* 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; +} +/* 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 index 0000000..79d7431 --- /dev/null +++ b/src/input.c @@ -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 index 0000000..872ca38 --- /dev/null +++ b/src/invlib.c @@ -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(¶m, 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 index 0000000..d394835 --- /dev/null +++ b/src/invlib.h @@ -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 index 0000000..af5a5ed --- /dev/null +++ b/src/library.h @@ -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 index 0000000..8ed4b40 --- /dev/null +++ b/src/logdir.c @@ -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 index 0000000..809dff9 --- /dev/null +++ b/src/lookup.c @@ -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 index 0000000..8c7770f --- /dev/null +++ b/src/lookup.h @@ -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 index 0000000..c447c30 --- /dev/null +++ b/src/main.c @@ -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 index 0000000..69b85c0 --- /dev/null +++ b/src/mouse.c @@ -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 index 0000000..24ae35e --- /dev/null +++ b/src/mygetenv.c @@ -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 index 0000000..87db2fa --- /dev/null +++ b/src/mypopen.c @@ -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 index 0000000..c7f6bfd --- /dev/null +++ b/src/scanner.c @@ -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 index 0000000..8f2dd1c --- /dev/null +++ b/src/scanner.h @@ -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 index 0000000..e96b01d --- /dev/null +++ b/src/scanner.l @@ -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 index 0000000..c47bcdd --- /dev/null +++ b/src/snprintf.c @@ -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 index 0000000..c543366 --- /dev/null +++ b/src/version.h @@ -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 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 index 0000000..607cee1 --- /dev/null +++ b/src/vpaccess.c @@ -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 index 0000000..005a9b0 --- /dev/null +++ b/src/vpfopen.c @@ -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 index 0000000..15f90a0 --- /dev/null +++ b/src/vpinit.c @@ -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 = ¤t_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 index 0000000..8812dba --- /dev/null +++ b/src/vpopen.c @@ -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); +} @@ -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: |