Mercurial > hg > xemacs-beta
changeset 44:8d2a9b52c682 r19-15prefinal
Import from CVS: tag r19-15prefinal
line wrap: on
line diff
--- a/BUGS Mon Aug 13 08:54:52 2007 +0200 +++ b/BUGS Mon Aug 13 08:55:10 2007 +0200 @@ -17,3 +17,9 @@ (3) By hand. Do cat info/xemacs* | more "+/^File: xemacs.info, Node: Bugs," + +Part II of the XEmacs FAQ, available in a manner similar to the above, +or via the world wide web, contains extensive information on how to +track down and report bugs. + + http://www.xemacs.org/faq/
--- a/CHANGES-beta Mon Aug 13 08:54:52 2007 +0200 +++ b/CHANGES-beta Mon Aug 13 08:55:10 2007 +0200 @@ -1,4 +1,12 @@ -*- indented-text -*- +to 19.15 +-- W3-3.0.74 +-- Documentation updates +-- miscellaneous bug fixes +-- cc-mode-4.388 +-- Custom-1.67 +-- Gnus-5.4.37 + to 19.15 beta104 -- EFS fixes courtesy of Michael Sperber -- time.el-1.6
--- a/PROBLEMS Mon Aug 13 08:54:52 2007 +0200 +++ b/PROBLEMS Mon Aug 13 08:55:10 2007 +0200 @@ -1,3 +1,4 @@ +-*- mode:outline; minor-mode:outl-mouse -*- This file describes various problems that have been encountered in compiling, installing and running XEmacs. @@ -1718,3 +1719,12 @@ This problem will not happen if the m-...h file for your type of machine defines NO_UNION_TYPE. That is the recommended setting now. + +* On Irix 5.x and 6.x, the dumped XEmacs (xemacs) core dumps when executed + on another machine, or after newer SGI IRIX patches have been installed. + +The xemacs binary must be executed with the same "libc.so" file which was used +when the xemacs binary was dumped. Some SGI IRIX patches updates this file. +Make sure that all machines using the xemacs binary are using the same +set of IRIX patches. If xemacs core dumps after a patch upgrade then you +will have to redump it from temacs.
--- a/README Mon Aug 13 08:54:52 2007 +0200 +++ b/README Mon Aug 13 08:55:10 2007 +0200 @@ -16,7 +16,10 @@ report bugs. (The file `BUGS' in this directory explains how you can find and read that section using the Info files that come with XEmacs.) See `etc/MAILINGLISTS' for more information on mailing lists -relating to XEmacs and other GNU products. +relating to XEmacs and other GNU products. You should also read part +II of the XEmacs FAQ, the latest version of which is available on the +World Wide Web at: + http://www.xemacs.org/faq/ The file `configure' is a shell script to acclimate XEmacs to the oddities of your processor and operating system. It will create a
--- a/configure Mon Aug 13 08:54:52 2007 +0200 +++ b/configure Mon Aug 13 08:55:10 2007 +0200 @@ -100,7 +100,7 @@ native_sound_lib='' # make normal error-checking be the default in alpha and beta versions, so # that bugs get noticed. Change this for released versions. -error_check_default='yes' +error_check_default='no' error_check_extents=$error_check_default error_check_typecheck=$error_check_default error_check_bufpos=$error_check_default @@ -270,7 +270,7 @@ Debugging options: --debug Compile with support for debugging XEmacs. - (Causes code-size increase but no loss of speed.) + (Causes code-size increase and little loss of speed.) --error-checking=TYPE[,TYPE]... Compile with internal error-checking added. Causes noticeable loss of speed. Valid types
--- a/configure.in Mon Aug 13 08:54:52 2007 +0200 +++ b/configure.in Mon Aug 13 08:55:10 2007 +0200 @@ -116,7 +116,7 @@ native_sound_lib='' # make normal error-checking be the default in alpha and beta versions, so # that bugs get noticed. Change this for released versions. -error_check_default='yes' +error_check_default='no' error_check_extents=$error_check_default error_check_typecheck=$error_check_default error_check_bufpos=$error_check_default @@ -286,7 +286,7 @@ Debugging options: --debug Compile with support for debugging XEmacs. - (Causes code-size increase but no loss of speed.) + (Causes code-size increase and little loss of speed.) --error-checking=TYPE[,TYPE]... Compile with internal error-checking added. Causes noticeable loss of speed. Valid types
--- a/etc/BETA Mon Aug 13 08:54:52 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ - -*- mode:outline; minor-mode:outl-mouse -*- - -* Introduction -============== - -You are running an experimental version of XEmacs. Please do not -report problems with Beta XEmacs to comp.emacs.xemacs. Report them to -xemacs-beta@xemacs.org. - -** XEmacs Beta Mailing List -=========================== - -*** Subscribing ---------------- - -If you are not subscribed to the XEmacs beta list you should be. Send -an email message with a subject of `subscribe' (without the quotes) to -xemacs-beta-request@xemacs.org and follow the directions. You do not -have to fill out the survey if you don't want to. - -*** Unsubscribing ------------------ - -To unsubscribe from the list send an email message with a subject of -`unsubscribe' (without the quotes) to xemacs-beta-request@xemacs.org. - -*** Administrivia ------------------ - -The XEmacs beta list is managed by the SmartList mailing list package, -and the usual SmartList commands work. Do not send mailing list -requests to the main address (xemacs-beta@xemacs.org), always send -them to xemacs-beta-request@xemacs.org. If you have problems with the -list itself, they should be brought to the attention of the Mailing -List manager Chuck Thompson <cthomp@xemacs.org>. - - -** Beta Release Schedule -======================== - -The URL ftp://ftp.xemacs.org/pub/beta/README always contains the best -estimate of when the next beta XEmacs will be released. For weekend -betas the release time is generally in the vicinity of 2PM to 5PM US -Pacific Time (Universal Time minus 8 hours). For weekday betas, the -release time is generally in the vicinity of 8PM to Midnight US -Pacific Time on the listed day. - -While 19.15 and 20.x are in parallel development, a simultaneous -release day implies a release of 20.x first, followed a few hours -later by 19.15. - -Betas are nominally a week apart, scheduled on every Saturday. -Midweek releases are made when a serious enough problem warrants it. - - -** Reporting Problems -===================== - -The best way to get problems fixed in XEmacs is to submit good problem -reports. Since this is beta software problems are certain to exist. -Please read through all of part II of the XEmacs FAQ for an overview -of problem reporting. Other items which are most important are: - -1. Do not submit C stack backtraces without line numbers. Since it - is possible to compile optimized with debug information with GCC - it is never a good idea to compile XEmacs without the -g flag. - XEmacs runs on a variety of platforms, and often it is not - possible to recreate problems which afflict a specific platform. - The line numbers in the C stack backtrace help isolate where the - problem is actually occurring. - -2. Attempt to recreate the problem starting with an invocation of - XEmacs with `xemacs -q -no-site-file'. Quite often problems are - due to package interdependencies, and the like. An actual bug in - XEmacs should be reproducible in a default configuration without - loading any special packages (or the one or two specific packages - that cause the bug to appear). - -3. A picture can be worth a thousand words. When reporting an - unusual display, it is generally best to capture the problem in a - screen dump and include that with the problem report. The easiest - way to get a screen dump is to use the xv program and its grab - function. Save the image as a GIF to keep bandwidth requirements - down without loss of information. MIME is the preferred method - for making the image attachments. - -* Compiling Beta XEmacs -======================= - -** Building an XEmacs from patches -================================== - -All beta releases of XEmacs are included with patches from the -previous version in an attempt to keep bandwidth requirements down. -Patches should be applied with the GNU patch program in something like -the following. Let's say you're upgrading XEmacs 20.4-beta10 to -XEmacs 20.4-beta11 and you have a full unmodified XEmacs 20.4-beta10 -source tree to work with. Cd to the top level directory and issue the -shell command: - -$ gunzip -c /tmp/xemacs-20.4-b10-20.4-b11.patch.gz | patch -p1 - -After patching check to see that no patches were missed by doing -$ find . -name \*.rej -print - -Any rejections should be treated as serious problems to be resolved -before starting compilation. - -After seeing that there were no rejections, issue the command - -$ make all-elc - -and go play minesweep for awhile on an older XEmacs while the binary -is rebuilt. - -** Building an XEmacs from a full distribution -============================================== - -Locate a convenient place where you have at least 100MB of free space -and issue the command - -$ gunzip -c /tmp/xemacs-20.4-b11.tar.gz | tar xvf - - -(or the simpler `tar zxvf /tmp/xemacs-20.4-b11.tar.gz' if you use GNU -tar). - -cd to the top level directory and issue an appropriate configure -command. The maintainer uses the following at the time of this -writing: - -./configure --with-offix --with-mule=yes --with-dialogs=athena3d \ - --cflags="-m486 -g -O4 -fno-strength-reduce -malign-loops=2 \ - -malign-jumps=2 -malign-functions=2" --with-sound=no \ - --with-xface=yes --error-checking=all --debug=yes \ - --with-scrollbars=athena3d \ - --with-canna=yes --with-wnn=yes --wnn-includes=/usr/X11R6/include/wnn - -Save the output from configure that looks something like: -Configured for `i586-unknown-linux2.0.28'. - - Where should the build process find the source code? /usr/src/xemacs-20.0 - What installation prefix should install use? /usr/local - What operating system and machine description files should XEmacs use? - `s/linux.h' and `m/intel386.h' - What compiler should XEmacs be built with? gcc -m486 -g -O4 -fno-strength-reduce -malign-loops=2 -malign-jumps=2 -malign-functions=2 - Should XEmacs use the GNU version of malloc? yes - Should XEmacs use the relocating allocator for buffers? yes - What window system should XEmacs use? x11 - Where do we find X Windows header files? /usr/X11R6/include - Where do we find X Windows libraries? /usr/X11R6/lib - Compiling in support for XAUTH. - Compiling in support for XPM. - Compiling in support for X-Face headers. - Compiling in support for GIF image conversion. - Compiling in support for JPEG image conversion. - Compiling in support for PNG image conversion. - Compiling in support for Berkeley DB. - Compiling in support for GNU DBM. - Compiling in Mule (multi-lingual) support. - Compiling in support for OffiX. - Using the Lucid menubar. - Using the Athena-3d scrollbar. - Using the Athena-3d dialog boxes. - -Then type make and you should have a working XEmacs. - -After you have verified that you have a functional editor, fire up -your favorite mail program and send a build report to -xemacs-beta@xemacs.org. The build report should include - -1. Your hardware configuration (OS version, etc.) - -2. Version numbers of software in use (X11 version, system library - versions if appropriate, graphics library versions if appropriate). - If you're on a system like Linux, include all the version numbers - you can because chances are it makes a difference. - -3. The options given to configure - -4. The configuration report illustrated above - -5. Any other unusual items you feel should be brought to the attention - of the developers.
--- a/etc/FTP Mon Aug 13 08:54:52 2007 +0200 +++ b/etc/FTP Mon Aug 13 08:55:10 2007 +0200 @@ -1,6 +1,6 @@ -*- text -*- - XEmacs availability information. Last Modified: 10-feb-96. + XEmacs availability information. Last Modified: 25-Mar-1997. XEmacs is available via anonymous FTP from ftp.xemacs.org (128.174.252.16) in the directory /pub/xemacs/. @@ -8,18 +8,22 @@ ftp.xemacs.org is the primary distribution point, but you may find copies of it at other sites as well. Some sites to try include: - ftp.ai.mit.edu:/pub/xemacs/ - ftp.uu.net:/systems/gnu/xemacs/ - ftp.sunet.se:/pub/gnu/xemacs/ - ftp.cenatls.cena.dgac.fr:/pub/Emacs/xemacs/ - liasun3.epfl.ch:/pub/gnu/xemacs/ - ftp.th-darmstadt.de:/pub/editors/xemacs/ - audrey.levels.unisa.edu.au:/xemacs/ - sunsite.auc.dk:/pub/emacs/xemacs/ - sunsite.doc.ic.ac.uk:/gnu/xemacs/ - uiarchive.cso.uiuc.edu:/pub/packages/xemacs/ - ftp.technion.ac.il:/pub/unsupported/gnu/xemacs/ - thphys.irb.hr:/pub/xemacs/ + ftp://ftp.ai.mit.edu:/pub/xemacs/ + ftp://ftp-digital.cern.ch:/pub/beta/xemacs-20.0/ + ftp://ftp.uu.net:/systems/gnu/xemacs/ + ftp://ftp.sunet.se:/pub/gnu/xemacs/ + ftp://tp.cenatls.cena.dgac.fr:/pub/Emacs/xemacs/ + ftp://ftp.th-darmstadt.de:/pub/editors/xemacs/ + ftp://sunsite.doc.ic.ac.uk:/gnu/xemacs/ + ftp://ftp.ibp.fr:/pub/emacs/xemacs/ + ftp://uiarchive.cso.uiuc.edu:/pub/packages/xemacs/ + ftp://ftp.technion.ac.il:/pub/unsupported/gnu/xemacs/ + ftp://thphys.irb.hr:/pub/xemacs/ + ftp://sunsite.cnlab-switch.ch/mirror/xemacs/ + ftp://ftp.unicamp.br:/pub/xemacs/r20.0/ + ftp://ftp.usyd.edu.au:/pub/Xemacs/ + ftp://ftp.lab.kdd.co.jp/xemacs/ + ftp://SunSITE.sut.ac.jp/pub/archives/xemacs/ The most up-to-date list of distribution sites can always be found on the XEmacs WWW page, http://www.xemacs.org/. Try to pick a site
--- a/etc/w3/stylesheet Mon Aug 13 08:54:52 2007 +0200 +++ b/etc/w3/stylesheet Mon Aug 13 08:55:10 2007 +0200 @@ -83,7 +83,7 @@ p { display: block } pre,xmp { display: block; white-space: pre; } -blockquote{ display: block; margin-left: 5; margin-right: 5; } +blockquote{ display: block; margin-left: 5em; margin-right: 5em; } /* ** How to draw form elements. @@ -114,8 +114,8 @@ dir { display: block; } menu { display: block; } dt { font-weight: bold; display: list-item } - dd { display: list-item; margin-left: 5; } - li { display: list-item; margin-left: 5; } + dd { display: list-item; margin-left: 5em; } + li { display: list-item; margin-left: 5em; } ul li { list-style: circle; } ol li { list-style: decimal; }
--- a/etc/xemacs-white.xpm Mon Aug 13 08:54:52 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* XPM */ -static char *noname[] = { -/* width height ncolors chars_per_pixel */ -"388 145 25 1", -/* colors */ -"` c #787879", -"a c #686869", -"b c #A6AAF5", -"c c #585859", -"d c #484849", -"e c #09090B", -"f c #5256D7", -"g c #989CEA", -"h c #363ACC", -"i c #C7C8CF", -"j c #282829", -"k c #FFFFFF", -"l c #13154C", -"m c #7074DF", -"n c #D9D9DB", -"o c #232788", -"p c #383838", -"q c #4249D0", -"r c #B6BAF9", -"s c #868AEB", -"t c #A8A8A9", -"u c #989899", -"v c #6266DB", -"w c #888889", -"x c #B9B9B9", -/* pixels */ -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkknkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknikkkknninkkkkkkkkkkknninnnkkkkkkkkkinkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkknknkkkkkkkkkknkkkkkkkknkkkkkknkkkkknkknkkkkkkkkkkkxkkkkkkknkkkkkkknkkkknknkkkkkkknkkkkknknnkkkkkkkkknkkknkkkkknkkkkkkkkkkkkknkkkkkkkkkkkkknkkkkkkkknkkkkkknkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkknnkknnnnikkkkkkkkkknnnnkkknnnnnkkkinnikkkkkinnkkkkkkkkkkikkkkkkknkkkkkkknnkkkkkkkkkkkinnnnkkknnnkkkkkkkkkknnninnkknnnnnkkknnninkkinnnnkkkkkkkkkkinnnkkknnnnnkknnnnnkkknkxnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkknkkknkkniiiinkknkkknkknkkknkknkkkknkknxkkkkkkkkkkkkkkkkkkkkknkkkkkkiinnkkkknkkkknnnnnxkkkkxkkkkniiiinknnknknkknkkkkkknkkkknknnnnnikkiiiiikkknkknkknkkkknkknkkkknkknikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkknkkkkkkkkkknkkknkknkkkknknkkkknkknnikkkkkkkkkkkkkkkkkkkknkknkkikkknkkkknkkkknnnknnkkkxkikkkkkkkkkknnknknkknkkkknknkkkknkinnnnnkkkkkkkkkknkknkknkkkknkknkkkknkkinnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkknnkknkkkxkkkkkkkkkknkkknkkinkkikknnkknnkknkkikkkkkkkkkkkkkkkkkkknkknkkikknnkkkknkkkkkxkkkkkkikkkikkkkkkkkknnknknkknnknxkknnkkinkkxkkkkkkkkkkkkkknkknkkkikknikkinkkikkknknnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkknkknkkninnikkkkkkkknxkkixkkkixxnkkknxxnkkiikkxxkkkkkkkkkkkkkkkknxxxxxkknxxkxnkkixxnkkkkxxikknxiknxnkkkkkkknxikxknnkkixikkkknxikxnkkixikkkkkkkkkkixkkxxkkkixnkkkkixxkkkxnknxikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkknkkkkkkkkknknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkknkkkkkknkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkknkknkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkknkknkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknknkkkkkkkkkkkknkkkkkkkkkknkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkknkknkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkknkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkknkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknknknkkkkknkknkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknknkkkkkknkknkkkkkkkkkkkkkknknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknknkkknkkkkkkknknknkkkkknkknkknkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkkkkknkkknkknkkkkkkkknknknkkkkkkkknkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkknkknknknkknkkkkkkkkkkkkkkkkkkkkkknkkkknkkkknkknuunnkknkkkknkkknkkkkntkkkkkkkkkkiikkkkkkknkkkkkknkkkknnkkkknnkkknkkkkkkkkkkkkkkkknkknkknkkknknkkkknkkkkkkkkkkkkkkknkknkknkkkkkkknkknkknknkknknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkknknkkkknkkkkkknkkkkkkkkkkkkkkknkknkknkkkkkkknkknkknknkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkknkkkknkkkkkkkkkkkknkkkkkkkkkknktnkkkkiknkkkknkkkkkkkkkkkkikkkkkkkkkkkinkkknkkkkknkkkknknkkukkkktkknkknkkkkkkknknkknkkkknknknknkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkknkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkknkkknknkkknknknkkkkkknknknkknkkkknkknknkknkkkkkkkkkkkkkkkkknkkkkkkkkkknkknkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkknknkkkkkknknkkkkkkkknkknkkknkkkkkknkkkkkkkkktkkkknikkknnkixnknininnnkkxkninkkkkiikikknniikkkkknkkkkkkkxnknkkiikkknknkkkkkkknkkkknkknkkkkkknknknkkkkknkknkkknkkkkkknkkkkkkkkkkkkkkkknkknkknkkknkkknkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkknkkkkknkkkkknkkkkkkkknkkknkknknkkkkknkknkkkkkknkknkkknkkkkkknkkkkkkkkkkkkkkkknkknkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkknkknnknkkknnkkkkkkknkkkkkkkkknkkknkkkkkkknnknkkkxnkkkknixtkkxuxuxxikitxiukkktiiuxkknixxikkkkknkkknkktkkkkkktkkkkkkkkkkknkkknknkkkknknknkkknkkkkkkkknkkkkkkkkknkkknkkkkkkkkkknknknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkknkkkkkknkkkkknkknkknknnkkknkkkkkkkknkkkkkkkkknkkknkkkkkkkkkknknknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkknknkknkkknkkknknkknknkkkxkkkkkkxknknkiuuukknukxkkxkxnkkktkikkkkxkkktutikknkkknknkkkxknknkkxnknkknknkkkkknkkkknknkkkkknkkkkkkkkkknknkknkkknkkknknkknknkkkkkkkkkkknnkkknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkknkknkknkkknknknknkkkkkkknkkkkkknnkkkkkkkknkkknkkkkkkkkknknkknkkknkkknknkknknkkkkkkkkkkknnkkknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkkknkkkkkkkkknknkkkkkxkkkknkxknkkntnktnkkwkxkkxkxkkkkxkxkkkkxkkxnknxkkkkkkkkknkkxnkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkkkknkkkkkkkknkkkkkknkkkkknkkknknkkknkkknkkkkkkknkkkkkkkkkkkkkkkknkkkkkkkkkkknkkknkkkkknkknkkkknkkkkkkkkkknkkkkkkkkkkkkknknkkkkkkkkknkkkkkkkknkkkkkknkkkkknkkknknkkknkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknnknnkxknkknxkknkxkkkwknkwkxkkxkxunkxnkntkkttkktkkixkkkknkkkknkktkknknnxkknkknknknkkkkkknkkkknknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkknknkknkknkkknkkkkkkkkkknkkkknknkkkknkkkkkkkkkkkkkkkkkkkknkknkknknkkknkkkkkkkkknkknkkkkkkknkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknknkknkknkkknkkkkkkkkkknkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkunkkxwwwwikkuwunwkwwktikwnwnwwnkkknwwittkiwwnwnnkkkknkkkkkntkkkktnnkknkkkknknknnnnnnnnnnnnnkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnkkkkkknkknnkknkkknkknknkkkknkkkkkkkkkkknknkkkkkknkkkkkkkkkkkknkknknnnknknkkknknknknnkkknknknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnkkkkkknkknnkknkkknkknknkkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkrrrrrrrrrbrrrrrrbrrrrrrrrrrrrrikinnkkknirrrrrrrrbrbrbrrbrrriknkkkkkkrrrrrrrrrrrrrrbrrrbrbrrrrbrrrrrrrrrrrrrrrrrrssssssgsggbkkkkkkknkkkkkkkkkknknkknkkkkkknkkkkkkknkkkkknknkkkkkkkkknknkkknknknkkkkkkkkknkkknkknknknknknkkknknkkkknknkknkknknkknkknknkkkkkkkkkkkkkknkkkkkkkkkknknkknkkkkkknkkkkkkknkkkkknknkkkkkkkkknknkkknknknkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkrhhhqhhhhhhhhhhhhhhhhhhhhhhhhhhmkkknkkkivhhhhhhhhhhhhhhhhhhhmknknkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhtnknkkkknnkkkkkkkkkkkkknkkkkkkknkkknkkknknkkkkknknkkkkkkknnnkknkkkknknkkkknkknkkkkkkkkkkkkkknkkknknnkknknkkknkknknkkkkkkkkkkknknnkknkkkknnkkkkkkkkkkkkknkkkkkkknkkknkkknknkkkkknknkkkkkkknnnkkknkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknknknkkihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhodknkkkknvhhhhhhhhhhhhhhhhhhhockkkkkkihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoenkkknnkkkkknkknknkknkknknnknkkkkkkkkkknkknkknkkkkknknkkkkkknkknknkkkkkkkkkkkkknnkknknknnkknknknkkkknkknknkkkkknkknnnkknnkkknkknknkkknnkkkkknkknkkknknkknnnkkkkkkkkkkkknkknkknkkkkknknkkkkkknkkkknkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkmohhhhhhhhhhhhhhhhhhhhhhhhhoooldkknknkkbhohhhhhhhhhhhhhhhholdnknnkkkmohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhlcnknknkkkkknkkkkkkknknknknkkkkkkknkknnkkkknkkkknnkkkkkkknknkknkkkkknknnkkkkknkkknnkkkkkknknkknknknknknknknknknkknkkknkkkknnkknknknknknkkkkknkkkkknknkknkkknknkkkknkknnkkkknkkkknnkkkkkkknknknnknkkknknnkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkdpllhhhhhhhhhhhhhhhhhhholeepddwnkknknkkwdddqhhhhhhhhhhooeepwknkkknkkddjeoqhhhhhhhhhhhhhhhhhhleeeeeeelloohhhhhhhhhhhhhhhhl`nnnnknknknknnknknkknkkkkkknkknkkkkkkknknkkkkkkknnnknknkkknnkkknnnkkkkkkknkkkknkkknkkkkkkkknknkkknkkkknkkknkkknknkknnknkkkkkkkknknknkkknknknknknkkkknkkkkkkkkknkkkkkkknknkkkkkkknnnknknkkknkkkknknkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkx`fhhhhhhhhhhhhhhhhledtnnknnnnnnnnnkkkknshhhhhhhhhlej`nnnnniknknkkkkknghhhhhhhhhhhhhhhhoel`xnninitwudplohhhhhhhhhhhhheunnnnnnnknknkknkknnnkkknknkkkkkkkkkknkknkknnnkkkkkkkkkkkkkkkknkkkknnknkkkkkkkkkkkkknkkknkkkkkknnkkkknkkknknnnkkkkkkkkknkkknknkkkkkkknkkknknknknknnnnknknnknkkkkkkkkknkknkknnnkkkkkkkkkkkkknknkkknknnknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnmhhhhhhhhhhhhhhhlcxxiixixxxxiinnnkkkighhhhhhhheeaxxxxxxxiiinnknkknnivhhhhhhhhhhhhhhhejxxixxxxxxxxxii`dohhhhhhhhhhoetxtxxinnnnknknknknknnnknkknknkkkknkkkknknnkkkkkkkknkkknkknknknknknkknknknnkkkkknkkkknkkknnknknkkknkkkknknkkknknknknkkkknkkkkkknknkkkkkkkkknknknkknknnknkkknknkkknkkkkknknnkkkkkkkknkkknkknkknknkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkknirfhhhhhhhhhhhhhhecuuwwuuuuuuutxnnnkkrvhhhhhhoeewuwwwuuuuutxxnnknkknrvhhhhhhhhhhhhhhoewwuwuuuwuuwuwuuuuwdqhhhhhhhhoew`wwwuxnnnkknkkknknknknknkkkkknnkknkkkknknnknnknkkkkknkkkkkkkknknkkkkkkkkknknkkkknkkkkkkknkknkknkkknknkkknnknnnkknkkkknknkkknkkkkknkkkkknkkkknkkknkknnknnkkkkknkknknkkknknnknnknkkkkknkkkkkkkkknnnkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkknknitshhhhhhhhhhhhhhlcccccaaaa``wuxinnkrbhhhhhhoejdccaacacaaa`utxnnkknnrvhhhhhhhhhhhhhhllccaccaaaaaaaaaaaaaaaqhhhhhhhljcdcca`txnkkkkkkknknkkkkkknnnknkknnnknkkkkkkkknkkknnkkknkknknkkkkkknkknnkkkknkknkkkkkkkkkkknkknknnknkknknkknkknknknknkknknkkkknknkkkkkkkkkkkkkkknknnkkkkkknnnknkknnnkkkkkkkkkknkkknnkkknkknknknkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkniughhhhhhhhhhhhhhljjpjpppdcaa`utxnnirfhhhhhoeejjpjpjpppddcaaccxnkkinrhhhhhhhhhhhhhhhejjpjppppjpccaccccccddvqhhhhhheejjjjpawxinkkkknkkknknnnnnkknknknkknknnkknkknknknnkknkkkkknkknknkkkkkkuukknkkkkknkkkkkkkknkkknnkkkknkkknknknknkknknknkkkkknkkkkkknknnkkkkknkkkknkkkknknnnkknknknnknknnnkknkknknknnkknkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnituvhhhhhhhhhhhhhoeeejejpdca`wuxinnrmhhhhhoelpjejejejjjdda`ctnkkkkxnrhhhhhhhhhhhhhhoeeeeejejpdpcaaa`aaaccddmhhhhhheeeeejpc`cdannknknkknknxa`cackknknnnnkccnkcaknkkknknkkkknkkknknkkkkkkkkktkkkkkkkkknkkkkkkkkkknkkkknkknkkkkkknknknknkkkknknknkknkkkkkkkkkkkkkknknknknknknknkkkknknknnknknnkkkknkkknknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkniitshhhhhhhhhhhhhheeeejjpc`wutxinnrshhhhhoejcdpeeeeeejpc`aaautnnkttishhhhhhhhhhhhhhleeeeeeljpccwaa`uwwacaacsqhhhhoeeeeeejcwxunknkkkittkkktkntktnknxtinknndknwnkkkknknktitniikkkntxkkkkkxxkxkkkitxkkkknknkknxxxkxnnnkitxknntkttnknknknknnkkknkknkkknknkkkkkkknknkkkkknkkknknknnkknknnknknnknknnkkknkknnkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknnirhhhhhhhhhhhhhheeeeepc`utxxinnighhhhhoepcapjeeeeejjp`wwwatxkknt`rmhhhhhhhhhhhhhhleeeeeejpc`ata`uxxca`ccwwmhhhhleeeeejpawxunkknkktttwnnkkktkkkn`uuu`nknn`cknnnkkkkkkt`xaxuikn`xx`nkk`ttaukk`uxw`nkkkkkkknwuu`xwknntxuiki``ut`xkknkknknnnknkkkkknkkkkkkkknkkkknnkknkknnkkkkkknknnknnnnknknnknnkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknknnknivhhhhhhhhhhhhhleeejpauxinnnnrbqhhhhoedwiwapjeeejjdjtxinunnnkkktrfhhhhhhhhhhhhhheeeeeeeejwuwctnnni`uuwcutshhhheeeeeejpauxuknnknkua`uknnkktnknn`ttuaxknn`wknkxaaacakkckxkkxkxkkkktktnkkkwki`ttxaxnwaaa`tkttntktkkn`autkktnknkwkknknkkkkkkknknkknkkkkkkkknnnknkknkknknknnkknkknkknknknnnnknknnkkknnkkknkkkkkkkkkkkkkknkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknknknkknknknshhhhhhhhhhhhhoeeejd`uinnkkrrqhhhhhednuxucpejejpda`xinntnkknnkxrhhhhhhhhhhhhhhoeeeeeejpaux`x`nnnx`ttuuiighhhheleeeejp`tiunkntktxnnwkknkntknkx`ttttnnkwxttkkkkkkkkknaktkktktkkkktktknnktkx`ttttnkknkkkkkxxkuntnkunkntkkunknkwnkkknkknknnknknknknkknnknkkknknnnknknnkknknknknknnnknkkkknkkkkkknkkkkknkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkknknknknkbhhhhhhhhhhhhhheeejd`tinknrbqhhhhoejnnu`wdjejjjauxxnnnkuknkknnbshhhhhhhhhhhhhhleeeeeejc`titni`knkcxkniknrhhhoepjeeejd`titnknukwkkn`nknkktkknncxkknkktxnkcnknkkknkkkaktkktkitkkuxkn`knw`nkaxnnnnkkkkkkkktxntntnnukktxkkx`nkuinnnknknknkkkknnkkkknnkkknnknknkknkkkkkknknkkkkknknkkkkkkkknnknkkkkkkkkkkkkkkkkkkkknkknkkknnkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknknknnknknkkknnnfhhhhhhhhhhhhhleejd`tnkkibqhhhhheeinnxajjjepdadd`xknwcccwkntarmhhhhhhhhhhhhhheeeeeeepcwx`unkcanknwcwxknrhhhoecpeeepcwwccccaxkicctuwkntcccnnknwa`xkkaakkackkknkknnaakuikakkiacxknknacxwwnnua`xnknkkkkkiawkanxwkuccicxktn`ciknkknknknknknkkkkknkknnnknnknnnnnkknnnkknknknknnnknnknknkkkkkkkkknknknnkkkkkkkkkkkkkkkkknknknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkknnknkknmhhhhhhhhhhhhhoeejpauxnirfhhhhoeltxnit`cpjpd`utnnkknnnknknkknrqhhhhhhhhhhhhhoeeeeeejpauxknkknnknknknnkkrhhhld`djjjpcwxnnknknnknknknkknkkknkknnnnnkknknkkkknkknkkknkkkkkkkkkkkkkkkkknnnkkknkknkkkkkkkkkkkkkknnnkkkknnktkkknkknnnknnkknkknkknkknkkknkknnkkkknnnnknnnknknkknknknnnknkkkknkkkknkkkkkknkkkkkkkkkkkknkkkkknkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkknkkkkkkknknknnknkknknknbhhhhhhhhhhhhhheeepcuxirvhhhhheliknxtwcpppcawxinknknknnknknknbhhhhhhhhhhhhhhoeeeeeejp`unkkkkkknknknknknghhhe`wcpjjpattnnnnnkknknknknnknkknnkknkkknkkkkkkkknknkknkkknkkkkkkkinknknkknknnnknkknknkkkkkkkkkkknkknknnkknxpctkkkkkkknkknnknnkknnkknknknnnknnnnnkkkkknknkknknkknnkknknknnkkkkkkknknnknkknkkkkkkkknnknkknknknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkknkkkknnkkkkkkkknknknnkkkkkiqhhhhhhhhhhhhhleejcwrrvhhhhheennnitwadppc`utxnnnkkknknnknnkrshhhhhhhhhhhhhhleeeeeejdwuxinkknnnnknnknnnnmohetuapjjd`xxnnknnknkknknknknnnkknknknknknnkknknnkknnknknkkkkknkkkknnnknkknnknnknnknkknkkknnknkkkkknnnknknknknnnkkkkkkknnnknnnnnknnnkknkknkknnnnnnnnnkknknnnknnkknknkknkknnkkknnnknknkknkkkkkkkkkkkknknkkkknknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkknkkkkkkkkknkknkkkknknkkknnnknmhhhhhhhhhhhhhoeejdtrvhhhhhelnnnitwadppd`uxnnnknnnnknnnknkkrvhhhhhhhhhhhhhheeeeeeepcwxinnknrgvbrknnnnknncjlit`dppcwxnnnnknknnnknkknkknknknknnnnkkkknnnnkknnkkknkkknkkknkkkknnnnnnknknnnnknkkkkknknkkkkkkkkkkkknnkknnnnnnnknkkkkkknnnknnkkknknnknnkkkknknkkkknnknkkkknkknnnnninnkkkkknkkkknknknkknkknkknkkkknnnnknkkkknnkknnnkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkknghhhhhhhhhhhhhheeesrvhhhhoeeinnxtwadppcawtikkkkkkknkknnknknrhhhhhhhhhhhhhhoeeeeeejp`uxnnnnnrqhhwxknnknnkkkkixwapdauinnknknkkknknnniirnikkknkknnniirrggsgikknnnknnkknkkknirrrgsggnnknkknknkkkkkknkkkknkkkkkkknknknirrbsssbnnnnkkkknnnnniiiikkkkkkkkkkknnknnnkknknnnnnnirrrsssggrnnnkkknkkknknnknknnkknkknrrrbsgsgrnnnkkkknrsgrkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnkkknnknnhhhhhhhhhhhhhhlewrvhhhhhelinnitwadppdawtinkkkknkkknkknknknghhhhhhhhhhhhhhoeeeeeejd`tiinknrshhhetkkkkkkkkknnxwcdd`uiknknnnnniiirrrssvqsikkkkknkrrgvhhhhhhminknknknknnknrbmqhhhhhhmiknknknknnnknkkknnknkkkkkkkkirrsvhhhhhhqgkknnrrrgssgssvmsnknkkknkkkknnnkkkknknknirbsmqhhhhhhhfsrkkkknkkknknnnkknknnnrbmfhhhhhhhfsrnnknrghhhtkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkknnfhhhhhhhhhhhhhoprvhhhhheennnxtwaddpdawxiinkkkkkknknknkknnrmhhhhhhhhhhhhhheeeeeeejcwxinnkirqhhoekkkkkkkkkkknxuaccwxrrrrrrssssvvfhhhhhhlankkkkirgqhhhhhhhhhqxnnknknkknrbmhhhhhhhhhhhgknkknnkkknknnkkkknkkkkkknrrsqhhhhhhhhhhfnkrshhhhhhhhhhdakknkkknkkkknnnknkkknrrgvhhhhhhhhhhhhhhmnknknnknknknnnkknrbmhhhhhhhhhhhhqvsbrgqhhoekkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnknknghhhhhhhhhhhhhhrshhhhhelinnitwacppdawxinnnnkkkkkkkkkkknkkrfhhhhhhhhhhhhhheeeeeejpcuxinnirmhhhopkkkkkkkkkkknit`aaugvfhhhhhqhhhhhhhhhhhetnnknrrvhhhhhhhhhhhhhinnnknnnrsqhhhhhhhhhhhhhwknkknknknkknknknkknkkkirsqhhhhhhhhhhhhhdnrfhhhhhhhhhhlakkkknkkknkkkknnnnnirgfhhhhhhhhhhhhhhhhhfnnkkknknnknknknrsqhhhhhhhhhhhhhhhhhhhhhhodkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkrhhhhhhhhhhhhhhshhhhheeinnituadppdawtinkknwctkkkkkkxkkkknrhhhhhhhhhhhhhhoeeeeeejp`uinnnrghhhhlankni`dxkknknixw`wxshhhhhhhhhhhhhhhhhhljnnnnibqhhhhhhhhhhhhhqonntnnirshhhhhhhhhhhhhhhhwcxnknknknknkkkknkknkrbvhhhhhhhhhhhhhhqhurhhhhhhhhhhhexkknxcwkkkkkkkkkknrbmhhhhhhholeedqhhhhhhhqnnnnknknnnnnnrshhhhhhhholeeelhhhhhhhhhhlckkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnknnvhhhhhhhhhhhhhhhhhhlexnnixwacdpda`uxnnkkkukknkkkkiwknkkrghhhhhhhhhhhhhhleeeeeejdwxinnrrqhhhhexkniiiiwnkkknnxtutxghhhhhhhhhhhhhhhhhheanknrrqhhhhhhhhhhhhhhho`i`iirvhhhhhhhhhhhhhhhhhlpnknnwdpaknnknkknknrbqhhhhhhhhhoeeehhhhvshhhhhhhhhhoennknnkukkkkkkkknnrsqhhhhhhhlepuxnshhhhhhhhonknnknnknknrgqhhhhhhhledunkiwfhhhhhhhhlwnknnknkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknnmhhhhhhhhhhhhhhhhhlecxiitu`ddpdawtxnnkkkkunkknkkk`kkkkkrvhhhhhhhhhhhhhheeeeeeejpwtnxrbqhhhhoeuinxttt`nnnkknnxxixrcllhhhhhhhhhhhhhhhetiurbqhhhhhhhhhhhhhhhhhjtxwrshhhhhhhhhhhhhhhhhhoaxinnnkuknknknxtxnrshhhhhhhhhheecxxumhhvvhhhhhhhhhhljtxiiinwknknnkttirshhhhhhhhledtnirmhhhhhhhhhpxnnitiutnnrqhhhhhhhoewnniituxvhhhhhhheuniixxinknknkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkkkkkkkkknkkrhhhhhhhhhhhhhhhhlepwtttu`cpddawuxiinnkkktknkknnkwkkkk`rqhhhhhhhhhhhhhheeeeeeejduxrrsqhhhhhlpudtuw`wainnknknnninxwccashhhhhhhhhhhhoextrbqhhhhhhhhhhhhhhhhhhewurshhhhhhhhhhhhhhhhhhhodttxnnnunknknnuturshhhhhhhhhheedwxtuwfhqhhhhhhhhhhhedacxtttwinnkndubrvhhhhhhhhledw`crbqhhhhhhhhhld`xxaauuwrshhhhhhhhepuiitu`c``qhhhhhhexix`wuuinnininnkkknkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnkknkkkkkkniqhhhhhhhhhhhhhhlejd`wuwacdpdawtxinnnnknktknnkknkunnnxibhhhhhhhhhhhhhhoeeeepdcwtrrgfhhhhhhhl`iiaw`awainnnkkkknknknwnnrhhhhhhhhhhhhljubbqhhhoelvhhhhhhhhhhhhecrghhhhoeeqhhhhhhhhhhhhojawutxnuknknkna`rghhhhhhhhhoee``ju```shhhhhhhhhhhhoew`awwwuainnnunirvhhhhhhhhoedwwwprmhhhhhhhhhhopjtxwnnntrqhhhhhhhhetwuww`adccshhhhhoeutu``wttnkikkkkkknkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkknkknknknkkkkknshhhhhhhhhhhhhoeeedc``adppda`txinnnkkkkntkknnknnunknuishhhhhhhhhhhhhhsrbrrrsssmvhhhhhhhhhhetitaacc``innknknkkknnnukkrhhhhhhhhhhhhedgrfhhhlectbhhhhhhhhhhhoegbqhhheecitmhhhhhhhhhhhoepcautiwnkunkwirshhhhhhhhhhleaaadacpdshhhhhhhhhhhhlecddccawaxnnntirvhhhhhhhhhedc`aa`rhhhhhhhhhhhoep`u`xnntghhhhhhhhhex``ccdppddwfhhhhoea``ccawunniknkkkknknkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkknkknkkghhhhhhhhhhhhhheeejpccddddawuxinnnnnnkkkukkknnknwnnnnrfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoeitcccda``inknknknkkkkkunirhhhhhhhhhhhoecrvhhoeecxirhhhhhhhhhhhocrfhhheexnnbshhhhhhhhhhhlejjdauxwnkuknwrshhhhhhhhhhoejw`adpjlashhhhhhhhhhhhejjjejjd`axnnnrrvhhhhhhhhheexp`wa`shhhhhhhhhhhoepdaaxnnbshhhhhhhhhewdcpjjjjdcamhhhhoedddpdcwunkxkkkkkknkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkknknnkkkknkrqhhhhhhhhhhhhhleejjppppdcwtxnknkknkkkkkukkknknnwiknkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhlpdjacdpjjpd`kknnnkkkkwcddgshhhhhhhhhhhlershhheedpxtbhhhhhhhhhhhorshhheeuinnrmhhhhhhhhhhhleeejdppddddnkrbqhhhhhhhhhhed`pjejjeewshhhhhhhhhhhheeeeejjejppdnnrvhhhhhhhhhoeutwpjlcshhhhhhhhhhhoejjpjdxtgvhhhhhhhhhljjejljjjpp`ghhhhlepjjejcawnxxknkknkkknkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknknkknnnkkknnmhhhhhhhhhhhhhoeeeejjjdc`txnnnnnnnnnkkkwunkkkknk`nnrghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhewuwcdpdauxnnnnkknknnkkkkkimhhhhhhhhhhhegbhhheedwtirshhhhhhhhhhhsghhoeeauxxwrfhhhhhhhhhhheeeejpcwxnnnnirqhhhhhhhhhhlewadjjjeljsvhhhhhhhhhhhleeeeeejdatikkrshhhhhhhhhhepu`adpjpshhhhhhhhhhheeejpc`tirvhhhhhhhhhhjjjeejdawttrfhhhljjjejpdwxnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkknkkknkkkkghhhhhhhhhhhhhheeeejjpcwuxinknkknknkkkkxuinkknknnnkrmhhhhhhhhhhhhhhlelllloohhhhhhhhhhhhoewwcpjjdatxnkkkkknkkknknkkrvhhhhhhhhhhodrfhheejcwtxrmhhhhhhhhhhhrqhhlejawxtubhhhhhhhhhhhheeeeejd`tnkknrvhhhhhhhhhhoeccdjeeejjpbvhhhhhhhhhhhleeeeeejc`tinrbhhhhhhhhhhoeu`cpjjljahhhhhhhhhhoeeeeepawxivhhhhhhhhhhoeeejpawtxiimhhhejjeeepcwxnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknknkknkkkrqhhhhhhhhhhhhhleeejjc`uxnnnknnnnkkkknnnknnkkkknknnrfhhhhhhhhhhhhhheeeeeeeelllhhhhhhhhhol`cpjjjd`tiknnnkkknknknkknrhhhhhhhhhhhorshhlelpauxxrfhhhhhhhhhhmmhhleepcwtxrmhhhhhhhhhhhoeeeeejd`txnnrshhhhhhhhhhhejcpjjeeejpcrqhhhhhhhhhhheeeeeejjcwxnirqhhhhhhhhhhep`cpjeejpdvhhhhhhhhheeeeejjcwtrvhhhhhhhhhhqeeejd`tinnnshhheadjejpcuxnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkknkknkkkkkrvhhhhhhhhhhhhhoeeejpauxinnnnkkkknkkkknnnnknkknnnknrhhhhhhhhhhhhhhoeeeeeeepc`uaqhhhhhhhljdpjljjcwxnnkknknkkkkkknnnshhhhhhhhhhhbghhoeejd`uxtbhhhhhhhhhhhshhoeeepcwutrfhhhhhhhhhhhleeeeejpatxnnbqhhhhhhhhhhoedpjeeeejpcurhhhhhhhhhhhoeeeeeeedauinrmhhhhhhhhhhoecdpjejejd`ufhhhhhhhleeeeeejd`tifhhhhhhhhhhhheejcwtinkkkhhoe`cjjepauinkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknnknknibqhhhhhhhhhhhhhheeejc`tinkkkkkkkkkkknnknknnnnkkknnishhhhhhhhhhhhhhleeeeeeejdawwuvhhhhhhejpeeelpcwxnnknkkknknknknkrmhhhhhhhhhhqrhhheeepcwutrshhhhhhhhhhfqhheeejpawugbhhhhhhhhhhhheeeeeejd`uinrmhhhhhhhhhhhlepjeeeejjd`bshhhhhhhhhhhleeeeeejdwtirbhhhhhhhhhhhlecjjeeejpawxicooooleeeeeeeejd`tishhhhhhhhhhhhpejdwxnnnnkneejwapjjd`tinkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkknknnknkkkkknkkirvhhhhhhhhhhhhhhhleejdwxnnkknkknnkknnnnkknnknknkkkkrvhhhhhhhhhhhhhheeeeeeeejpdaaashhhhhoeeeeeejpauinknknkkknkkkkknrfhhhhhhhhhhmmhhleejdauturvhhhhhhhhhhqhhoeeeepd``tshhhhhhhhhhhheeeeeejp`tirghhhhhhhhhhhoejjeeeeejdauxmhhhhhhhhhhheeeeeeepcwxnrfhhhhhhhhhhhepjleeejpcwxnkkncppleeeeeeeejdwtibhhhhhhhhhhhhhjjd`xnkkkkknnit`dpjd`tnnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkrrvhhhhhhhhhhhhhhhhleejd`tnnkkknnknnkkknnkknnnnnnkkkkrqhhhhhhhhhhhhhoeeeeeeejjpdddc`vhhhhleeeeeejd`tnnnkkkknkknknkknrhhhhhhhhhhhshhoeeejdawwwrhhhhhhhhhhhhhoeeeejpda`rfhhhhhhhhhhhleeeeeejdwtirfhhhhhhhhhhhlejeeeeejpawxrvhhhhhhhhhhoeeeeeeepauxrghhhhhhhhhhhlejjeeeejd`uxinnnntwcpeeeeeeejdwxnrhhhhhhhhhhhhhhjp`unnknkknknxucppcwtnnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkknknkkkkirvhhhhhhhhhhhhhhhhhheejp`uinknkknnknnnkknkkknknknnnknbhhhhhhhhhhhhhhoeeeeeeejpdcccc`mhhhhleeeeeepcwtiknknknnkkknkknnshhhhhhhhhhffhheeeepdaw`gghhhhhhhhhhhhhleeeejjdcwbhhhhhhhhhhhhleeeeeepcwxrghhhhhhhhhhhoeleeeeeepc`xxrhhhhhhhhhhhleeeeeejd`tirfhhhhhhhhhhhlejeeeeepcwtinnkinxwcpjeeeeejpawxnnmhhhhhhhhhhhhhhjcwxnkknkknniu`ddcuxnkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkknknkknkkknrvhhhhhhhhhhhhhhhhhhheeepcuinnnkkntknnnknnkkknnknnkknimhhhhhhhhhhhhhhleeeeeeeejcwwwaushhhoeeeeeejepwxnnnknknknnknkkkrvhhhhhhhhhhqhhleeeepca``bmhhhhhhhhhhhhoeeeeejppdbmhhhhhhhhhhhoeeeeeeejawxrfhhhhhhhhhhhleeeeeeejpauxrghhhhhhhhhhheeeeeeejdwtrghhhhhhhhhhhhejeeeeejdauinnknnixuadjeeeejjd`uinkrhhhhhhhhhhhhhhqd`uinkkkkkkitwac`uinnkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknnknnrshhhhhdfhhhhhhhhhhhhhoeejc`xnnknkainnnnnkkikkkknkknkurvhhhhhhhhhhhhhheeeeeeejdawuttwbshhhoeejeeejdcuxnkknknknkkkknknrqhhhhhhhhhhhhheeeejpcaawrqhhhhhhhhhhhhleeeeeljjarqhhhhhhhhhhhoeeeeeejpaurghhhhhhhhhhhheeeeeeeepcwxirmhhhhhhhhhhheeeeeeepcuxrmhhhhhhhhhhhleeeeeeepdwxinnnkknitwcdjjjjpd`uxinnnmhhhhhhhhhhhhhhqcwxnnnnknnnxu``wtikkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkknrshhhhhljmhhhhhhhhhhhhhoeejdatinknkanknnnuunkkxxknuini`rhhhhhhhhhhhhhhoeeeeeejed`tiiwwishhhljjjeeejdcxinnnkkkkkiuxukuighhhhhhhhhhhhhoeeeeejcaagghhhhhhhhhhhhoeeeeeejjjwghhhhhhhhhhhheeeeeeejd`trfhhhhhhhhhhhoeeeeeeejpauxnrqhhhhhhhhhhleeeeeejd`uirhhhhhhhhhhhhleeeeeejpawxnkknkknnxuwccdddcautinkkkrqhhhhhhhhhhhhhhpauxnknkkknixuutxnnkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknknknknrshhhhhletrhhhhhhhhhhhhhheeepcuxnkkxxknnkwutwkntwnnutnnsghhhhhhhhhhhhhhoeeeeeeejd`xinuanshhhedppjejpccxnnnnnnnknna`waubmhhhhhhhhhhhhheeeeejepcabmhhhhhhhhhhhhleeeeeejjdbmhhhhhhhhhhhheeeeeeejcwrbhhhhhhhhhhhheeeeeeeejcwtinghhhhhhhhhhhleeeeeejdwtrshhhhhhhhhhhheeeeeeejcatinnkknknnnitu``a`wuxinkkkknghhhhhhhhhhhhhhqp`tinknkkknnxxinnkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkknknknkkkkkknkkkkkknkkrshhhhhleukrqhhhhhhhhhhhhhleejc`tnnkukkknn`da`kknunknuknrmhhhhhhhhhhhhhhleeeeeejpwxinnntishhheuccjjjpacinknwdddd`ktukukrvhhhhhhhhhhhhleeeeeejec`rqhhhhhhhhhhhoeeeeeeelparqhhhhhhhhhhhleeeeeejpawrmhhhhhhhhhhhheeeeeeejpauiirmhhhhhhhhhhheeeeeeejcwxrvhhhhhhhhhhhoeeeeeejpautinknknkknnnnxtttutxinnkkkkkkfhhhhhhhhhhhhhhhd`tnnnknknnnnnnkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknrbqhhhhleuknnmhhhhhhhhhhhhhheejpauinkuknkkutnnwnknunkkunkrfhhhhhhhhhhhhhheeeeeejjpwxnnnkunmhhlexcapjjd``inkknnnknknutkunrhhhhhhhhhhhhhleeeeejjjcughhhhhhhhhhhhleeeeeeejpgghhhhhhhhhhhhleeeeeejd`trqhhhhhhhhhhhleeeeeeejc`tinrqhhhhhhhhhhoeeeeeejpauirhhhhhhhhhhhhoeeeeeejp`tninnkknknkknnnnxiiinnnnknnknknqhhhhhhhhhhhhhhjawtnknkkkknknkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkknknknkkkkkkknkkkkibqhhhhoe`knnxghhhhhhhhhhhhhheeepcwxiniuknk`kkiaknn`nnuuknrhhhhhhhhhhhhhhoeeeeeejdduinnknukgqhlan``dppcw`irikknnnnnnuuktnshhhhhhhhhhhhoeeeeeejjdabshhhhhhhhhhhheeeeeeeejdbmhhhhhhhhhhhoeeeeeeejc`bghhhhhhhhhhhheeeeeeejpcuxnighhhhhhhhhhhleeeeeejd`uighhhhhhhhhhhhleeeeeejc`tnkknknkknkknkkknnnnnnnnnknknkkrqhhhhhhhhhhhhhhjautnknkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknrbqhhhhoedniniusfhhhhhhhhhhhhhleepc`tinnakkkidcuwwnnicdxdtishhhhhhhhhhhhhhleeeeeeejjpankucddcadejppjjddjpdbsqmnkkknnxd`kdrmhhhhhhhhhhhhleeeeeeeec`rfhhhhhhhhhhhlleeeeeejd`rqhhhhhhhhhhhoeeeeeeepaurshhhhhhhhhhhheeeeeeejd`tinrmhhhhhhhhhhheeeeeeejc`trshhhhhhhhhhhheeeeeeepcuinnkknkknknnnkkknnknknknnknkkkknshhhhhhhhhhhhhhod`uxnnkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkknkibqhhhhoednnixu`amhhhhhhhhhhhhhoeejd`uinnxxnkknknkkkknknknkrvhhhhhhhhhhhhhheeeeeeejcwxnnkkkkkknkknntwcdc`tibqhhcnkkkkknnnkrqhhhhhhhhhhhheeeeeeejpctbhhhhhhhhhhhheeeeeeeepdgghhhhhhhhhhhheeeeeeejdaurfhhhhhhhhhhhoeeeeeeepawxnnbhhhhhhhhhhhoeeeeeejpauirvhhhhhhhhhhhheeeeeejdatinnikknkkkkknknkkkkkknknnkknknknnmhhhhhhhhhhhhhhlc`tinknkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkirvhhhhhedkniiuwcdshhhhhhhhhhhhhheeepauxinnknkkkkknnkknknknnrqhhhhhhhhhhhhhheeeeeejpauxnnnknknkkknnnxwcdawxrvhhoeikkknknknnbhhhhhhhhhhhhleeeeeeejdabshhhhhhhhhhhoeeeeeeejparmhhhhhhhhhhhheeeeeeejcwxrhhhhhhhhhhhhleeeeeejp`uinrshhhhhhhhhhhleeeeeejd`uirvhhhhhhhhhhhheeeeeejdwtiknnnkkkknnknknkkkkkkkkknnnnkkkknnvhhhhhhhhhhhhhljcwtinkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkirvhhhhoejknnxuwcdp`fhhhhhhhhhhhhhleepcwtinnnnnknnkkkkkkknkknghhhhhhhhhhhhhhoeeeeeejd`tinknkkkkkkkknitwacaurshhhlpnknnnknknimhhhhhhhhhhhheeeeeeeepcwrfhhhhhhhhhhhleeeeeejjdwrfhhhhhhhhhhhleeeeeejpaurghhhhhhhhhhhheeeeeeejcwxinrqhhhhhhhhhhheeeeeeejdwtnrhhhhhhhhhhhhoeeeeeejcwxnknkknkkkknnnkkkkkkkknkknknnnnkknnifhhhhhhhhhhhhhedauinnkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknkkknknkkkrrvhhhhheliknit`adpdcshhhhhhhhhhhhhoeejdwtinnknknknknknknknnnishhhhhhhhhhhhhhleeeeeejdwtnnkkknnkkknknnxw`a`rbqhhhlwnnknnknnnrvhhhhhhhhhhhheeeeeeejdatbhhhhhhhhhhhoeeeeeeljpatbhhhhhhhhhhhheeeeeeeedatishhhhhhhhhhhoeeeeeejpawiirmhhhhhhhhhhhheeeeeeepcwxnrhhhhhhhhhhhhoeeeeejpawxnknnnknkkkkkkkkkknkkkrsrkknknnknknnbqhhhhhhhhhhhhejd`tinkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknnrvhhhhheennnixuadpdcabhhhhhhhhhhhhhheejdatinnnnknkknknknnnkknrfhhhhhhhhhhhhhheeeeeeepawinnkknknkknnnnnxtw`brfhhhoexknnninnnnrhhhhhhhhhhhhleeeeeeejcwrshhhhhhhhhhhoeeeeeelpcwbshhhhhhhhhhhheeeeedejdwtrmhhhhhhhhhhhoeeeeeejd`uiirqhhhhhhhhhhhoeeeeeejp`txnrhhhhhhhhhhhhoeeeeejd`tnikknkknnrnkkkknknkkknbhhmnkknnknkknishhhhhhhhhhhhljjcwxnnkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknrmhhhhhllnnnituacpdc`urhhhhhhhhhhhhhhleepcwxnkknnnnkknknkknnnnrhhhhhhhhhhhhhhoeeeeeejpatinkknnkkknkkknnnxtxrvhhhholnknnixxinishhhhhhhhhhhheeeeeeejpaurvhhhhhhhhhhheeeeeeljpaurvhhhhhhhhhhhleeeejrsaawxrvhhhhhhhhhhhleeeeeejc`tnrshhhhhhhhhhhhleeeeedddwtnnrhhhhhhhhhhhhoeeeeejdwxxnnkknnnrghgkkkkknnkkkshhhcnkknnnnknnimhhhhhhhhhhhoejpawinkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnrshhhhhleunnixwacppc`uxrmhhhhhhhhhhhhhleejd`tinkknknknnnnknknnishhhhhhhhhhhhhhoeeeeeejd`xinkkkknkknnknnnnnrrvhhhhheannnxxtxinrmhhhhhhhhhhhoeeeeeeejc`xrhhhhhhhhhhhheeeeeeljc`trqhhhhhhhhhhheeeeebghhctirvhhhhhhhhhhhleeeeeepauxibqhhhhhhhhhhhheeeeelrsswinkrhhhhhhhhhhhhoeeeeejcwxnnkkknkrbqhhfkkknkkkknshhhenkkkknkkknirqhhhhhhhhhhoeejd`tnnkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkrshhhhhleunnituacpdd`wxnnshhhhhhhhhhhhhheejpauxnnnkkknknnnnkknkimhhhhhhhhhhhhhhleeeeeejcwxnnkknnnkknnknknnirvhhhhhhexnnxuwwuxirfhhhhhhhhhhhleeeeeejjawrshhhhhhhhhhhleeeeeelpawrbhhhhhhhhhhhheeeearqhhl`iivhhhhhhhhhhhleeeeejp`wrrmhhfhhhhhhhhhheeeeegbhhfikkiqhhhhhhhhhhhheeeeejcuxnknkkkirfhhhldkknkkkkimhhhlnnnnkknnnknishhhhhhhhhhoeejpauxnkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknrshhhhhletnnixwaddpc`wxiknrhhhhhhhhhhhhhheeejcwxnnknknknnnnnnknnrfhhhhhhhhhhhhhheeeeeejpaunnnnnnknkkkknkkkrrvhhhhhhoennxtwaawxibhhhhhhhhhhhheeeeeeejdaurvhhhhhhhhhhheeeeeeejpaurshhhhhhhhhhhoeeejrmhhoeunivhhhhhhhhhhhleeeeejd`trshhmhhhhhhhhhhoeeee`rqhhlcnnnvhhhhhhhhhhhheeeeepawxknnkkirvhhhoe`kkknkkkrvhhhounknnnkknnnnrqhhhhhhhhhoeeejdwxnkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknrshhhhhoeannixw`cppdauxinkkifhhhhhhhhhhhhhoeejd`txnnnnkknknknknknbhhhhhhhhhhhhhhoeeeeeeedaunnnkknkkkwcxnnirbqhhhhhhhldnitwacawtrghhhhhhhhhhhheeeeeeejcwxrhhhhhhhhhhhheeeeeeejcwtrmhhhhhhhhhhhleeegghhhedinivhhhhhhhhhhhleeeeejcwrbqhhshhhhhhhhhhleeecrvhhoe`kknmhhhhhhhhhhhhoeeejpauinkkknrshhhhepnnkknnnkrfhhhhdniiiinnnknnnshhhhhhhhhleeejpatikkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkknkkkkkkkkkkkkkkkkkkinrshhhhhhejknixu`cpdcawtinknknfhhhhhhhhhhhhhheejpauxnnkknnknknnnknimhhhhhhhhhhhhhhleeeeeejd`tinknnknknkntnrrshhhhhhhhheuitucpdauxrfhhhhhhhhhhhleeeeeejpaurghhhhhhhhhhhoeeeeeelpcwxrvhhhhhhhhhhheeebbqhhleunnnmhhhhhhhhhhhheeeeeparbqhhvmhhhhhhhhhhleepbshhhepnnkkghhhhhhhhhhhhheeeepauxnkkirshhhhlenknnnknnnrhhhhhjixttxinknknnghhhhhhhhheeeeepawxnkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkknkkkkknnnkknrrghhhhhhoeitxxu`ddpdawwuxkkktrshhhhhhhhhhhhhhoeepcwxinkkntxuntinknrfhhhhhhhhhhhhhhleeeeeepcwxnnittnknnnnrrgfhhhhhhhhhoewwuapjjdairhhhhhhhhhhhhleeeeeejd`trmhhhhhhhhhhhleeeeeejdauxrfhhhhhhhhhhheebbqhhoeaxnnkshhhhhhhhhhhhqeeej`rbqhhorvhhhhhhhhhhleprshhhletnknkiqhhhhhhhhhhhhqeejp`tinnirvhhhhleukkniniiinrhhhhhhutuuuxinnnknrhhhhhhhhheeeeejcwxnkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkknnnxkkktnixikirvhhhhhhhopawtu`cppdcwuwuwxnktxshhhhhhhhhhhhhhhjejd`tinnkn`uw`t`nkrghhhhhhhhhhhhhhhleeeeejpcuxikutuwnknirgfhhhhhhhhhhhlj`p`djjpcwrghhhhhhhhhhhheeeeeeejcwxrqhhhhhhhhhhheeeeeeejdwtirhhhhhhhhhhhhvrbqhhoejtnnnirhhhhhhhhhhhhhvmwrrmqhhoerhhhhhhhhhhhfsrshhhleannnnnimhhhhhhhhhhhhhfcppatiirbfhhhhoewnnnixtutxighhhhhhjw`awtnnnnnnrhhhhhhhhleeeeejd`tikkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkknnkkkkininitrbvhhhhhhhhhdxwuwcppdcwtx`cutnnnrshhhhhhhhhhhhhhhqplddpcccwkxtkuntnirfhhhhhhhhhhhhhhhleeeeeejjdtnkwawtirrsfhhhhhhhhhhhhhed`adpjjcwxrmhhhhhhhhhhhoeeeeeejpauighhhhhhhhhhhoeeeeeejpcuxirhhhhhhhhhhhhhvhhhhleaxiknxtvhhhhhhhhhhhhhhvvhhhhheprhhhhhhhhhhhhvfhhhoepxiknnxxxqhhhhhhhhhhhhhqsgrrbsfhhhhhoednnkixww`uxrshhhhhhqaacauinnknighhhhhhhoeeeeeejd`xinkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkknnkkxnnirrgqhhhhhhhhhhmt``cdppc`uxwikntknirfhhhhhhhhhhhhhhhhqscawxnkkkxtktnxrrvhhhhhhhhhhhhhhhhqcpeeejc`xiitrrrbsvhhhhhhhhhhhhhhhoewcjjjjjawxrfhhhhhhhhhhhleeeeeejc`trmhhhhhhhhhhhleeeeeejdatinrhhhhhhhhhhhhhhhhhledwxinxtwshhhhhhhhhhhhhhhhhhhhelirhhhhhhhhhhhhhhhhoejuxinixtuushhhhhhhhhhhhhhhhhhhhhhhhhoecnknitu`aawtrshhhhhhhqddcwxnknnrfhhhhhhhleeeeeejd`tnnkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkknkkxrrgvhhhhhhhhhhhhhfgbuppc`uxiunirrrbsfhhhhhhhhhhhhhhhhhhhfsbrinknxxirrbsqhhhhhhhhhhhhhhhhhhqmsrrrrrrgsgmvqhhhhhhhhhhhhhhhhhhoe`djejejatxbhhhhhhhhhhhheeeeeeejcwtrfhhhhhhhhhhheeeeeeejcwxnnifhhhhhhhhhhhhhhhlejauxiiuw`wqhhhhhhhhhhhhhhhhhhlexkifhhhhhhhhhhhhhhheeauxxixww`wumhhhhhhhhhhhhhhhhhhhhhhhoedkkiixu`cca`trvhhhhhhhhmcd`tnnnrshhhhhhhleeeeeeejd`xnkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkknkkkkniinkkkngqhhhhhhhhhhhhhhhhhhqhpauxnktarvqhhhhhhhhhhhhhhhhhhhhhhhhhhhfskiaurvhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhejejeejjdddgshhhhhhhhhhhoeeeeeejpaurbhhhhhhhhhhhoeeeeeeepcuinknmhhhhhhhhhhhhhhleed`uxitu`awgqhhhhhhhhhhhhhhhhlewnnkmhhhhhhhhhhhhhheep`txxxuwa`wtimhhhhhhhhhhhhhhhhhhhhhlednnkxxu`cccauxrvhhhhhhhhhfgubrrbmhhhhhhhlejjeeeeejdwtnkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkknghhhhhhhhhhhhhhhhhhhhhj`tinkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhowkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhejjeeejjcuxrvhhhhhhhhhhhleeeeeejd`tishhhhhhhhhhhleeeeeejd`uxnnknhhhhhhhhhhhhhleejd`uttw`aawxshhhhhhhhhhhhhhheeaxnniiqhhhhhhhhhhhoeeedautttwaawuxinahhhhhhhhhhhhhhhhhhoeeunnnixuwaccawtirqhhhhhhhhhhhhvvfhhhhhhhhlepdjeeeeepcuxnnkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkrhhhhhhhhhhhhhhhhhhhhhewxnkkkkkhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhodnkkkhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoejjeeejpauxnhhhhhhhhhhhheeeeeeejcwxivhhhhhhhhhhheeeeeeejd`tnnknkrhhhhhhhhhhleeeejdawuw`aawuxiwhhhhhhhhhhhhoeecwttxtuwhhhhhhhhhhleeejpawuw`aa`wtnnnn`ohhhhhhhhhhhhhholejxnnnxtu`cddawuxnrhhhhlllohhhhhhhhhhhhhhlee`wcjeeeejdauinkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkteeeeeeeeeeeeeeeeeeeeewxnnkkknkeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepnnnkkeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejd`tinneeeeeeeeeeeeeeeeeepauxnkdeeeeeeeeeeeeeeeeepcuxnnknknnoohhhooleeeeeeepcaaaaa`uxnnnxoohhhhhholeeejda`www`adohhhhhhoeeeeeepdaa`acawtxnnnnitplohhhhhhhhoolee`tttttu``ccdc`txinihhhel``dllohhhhhhhholeeaixwdjeeeejcwxikkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknnnixuwadpeeeeejdwtinnnkkkkkknknnniixwapeeeeeeeeeeeeepc`txinnnnknknnkniiuwcpleeeeeeeeeeelpawxinnnnnnnnixxxxuuw`adpjjeeeeeeepcwtnknknnnniuadleeeeeeejp`tinkkknknixwdjeeeeeeejd`uinnkkknkn`peeeeeeeeeeeejpddccawtiiknniclllleeeeeeeejpccccccccpllleeeeeeeeejpdccca`uiiknknnxwajeelllleeeeepc`wwww`acddda`utnnnnglejxnxwdjeeelllleeed`knit`djeejjdauxnnkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknknnixuwadjjeeeeejdawtxinnnkknkknnnixtu`cpleeeeeeeeeeeejpc`uuxiinnnknnnixuwapjeeeeeeeeeeeeejc`utxiniixxxxtuuw`acdppjeeeeeeeejpatxikknkkkniuapjeeeeeeejdwtnnkkkkknit`djeeeeeeejd`tnnknnknknniuapeeeeeeeeejjjdcawtinnknnixwcleeeeeeeeeejjpppdcawuucpjeeeeeeeeejjpdc`uxinkkkknitwcpjeeeeeeeeejppdcccddppdc`uxinkkkiuuxnit`djeeljjdc`iinnnnxwcpjeejpawxnnkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknitw`cpjjeeeeeejjda`wtxnnkkknknixtuw`cpjeeeeeeeeeeeeeejpca`wutinnknnitw`cdjjeeeeeeeeeeeeejpcawwuuuuuwww``acddpjjjeeeeeeeeejd`tinnknkknnxucpeeeeeeejpcwinnkkknkiiuadjeeeeeejjawxnnkkknknknitadjeeeeeeeeejpdcwtinnknkkniu`djeeeeeeeeeeljjpdawttxuadjeeeeeeeejjpc`utinnknkkknitwcpjeeeeeeeeeejjjjjpjpdc`tixnknnnknkkkxtadjjeejpd`wuxxxxxw`djjjjpcwtinkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkknkixuacdjjjejeejejjddaawtinnkkknnxtw`acdpjejeeeeeeeejejjjjpdaa`utinnnitwacdpjjeeeeeeeeeejejjjddcaa`a`aaacccddppjjejejeeeeejjpcwxnknkknnknxwcpjeeeejejd`tinkkkkknnxuapjjeeeejjdauinknkknkkknixwcpeeeeeeeejjpa`txnknknknnnxwadjleeeeeeeejjpdawtiiitwcpeeeeeeeejpcauxinknknknknnxtwcdjjeeeeeeeeejjjjjpcawuxikikknknknnnitapjjjjjppcawuuuuwacpjjjda`txnnknkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknntw`cdpppjjpjpjppddca`uxnnkkknixu`acddpppjppjpppjpjjjpppddcaawtxnnnxu`acdpppppppppjppjjpjppddccaccacccccddddppppppjppppjpdc`txnkkknkknnxwacpppppppdcwxinkkkknknxuacpppppppdawxinknnkknkknnxuacpjejejjjpcautinknkkknknnxxwadpjeeeejejjpd`wxinnniu`cpjeeeejjpc`utnnknkkkkkknnnxtwacppejeejejeejjpdcawuinnkkknknknkknxu`dppppddddcca```ccdpppcawxxnkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkknnxu`aaaccacccacacaaa`wtinkknkknitw`aaaacaacccccacccaccacaca``wtinnnitw`aaaaacacacaccccccacaaaa````a`aaaaaaaacccacaccdcacaawuxnnkknkknknxuwaaccccaa`wuinknkkkknnitwaaccccacawtinknknknnkknnnxu`cdpppddcawuxinnkkkkkkknnnitw`ddppjjppdda`uxikkknnxu`ddppppdcawuxnnknknnkknkknnnitu`acdppjjjjpppdc`wuxinnknkknkkkkknnit`cccaaaaaccccccacdcccawuxinkkkkkknkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknixtuuuuuwuuuwuuuuuuttxixkkkknnixttuuuuuwuuuuwuwuuuwuwuwuuuuttxnnnnxattuuuwuuuuudauuutuuwu`uuuuuuwuuuac`cuwuawuuuwuwawwuutxxnnnkkkkknnnnxcwuuuuuuuttinnkkkkkkknnactuuuuu`ctxxii`iwikknkkknnixuw`aaa``wutxinkkkkkkkutkkknixuwaaccccaawutxnw`ikkkixu`acdccawuxinnnkkkkknknki`kknnxxuwaadccccca``wuxinnnkkkkkkknnknkkitu``wuuuuww```aaaaaa`wutxiknkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkknnixxxxxxxxiiiiiiixinnwnkkkkknnnniiiiiixixixxixixiixxxxxxxxiinnknnntiiixxxixxxxpxxixxiii`txxxxiuwixiucupixiiwixixixwiixxiinkkkkkkkkkknnniuxxiiiiuiinnkkkkkknkknntiixiiuxiatnnkdndxkknknkknnnxxtuuuuxxxinnnkknkkkkkxknkkknuxuuwwwwuuxxinnknxkkknnixuuwwuutxnnkkkkkknknkkkkxnknknnittuwawwwuuutxinnnkkkkkkkkkkkkkknnixuttxiixxttuuwwwuuuttxinnkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknnknnnnnkninnnknnnnnkwkknknxinkntnxxinnxxnxtknnnnttnnnxxxtiknkkixnxnnnnnnnnnnuunnnnknnnwnnnnnnunnnnt`icnnnnunnknknitnnnknkknkkkiinxxknnnxxtnnniwxxxnkxixninnkkkxnnknkxnnnnknkck`nknkkknkknknnniiiiinnnkknkkknkkkkinxnkniwtuwtxututitnnkkkxnkkkknnixiutuxixknkkixnkkknxxnxkknnxxnniix`xxxxiinnnnkkkkkkkkkkkknkkkkkniininnnnnniixxxxxxiinnknkknkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkknkknknkknkknknkkkkkkkkiikkkkxxxtkkxwuxttknu`xx`kkxuxxwnkiwtxtiknxtxuwkkkkknkkknunkkkknkkiiknnnnntknkknukukkkkktkkkkkntkkkkkkkkkkkiuwxxwkkk`xxukknuxxnkkxwxwxtiknkxkkkkkiwinkkkk`kukknkkkkkkkknknnnnnknknkkkkkkkknkkutxtnknutttnntwtwxxtkkkkikkkkkknnnnx`xwxxxkkutxuxnkitxuwkkxuxiwnnnnxxnnnnnnnkkkkkkkkkkkkkkknkknknnnnknkkknknnnnnnnnnnnknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkxkkkkktwutkkktkkktkktkkknxnuixxtukkikkkxkkxkkktnnknkkknkkkkknkknkkxkkkkkkkxkkkkkkkknknkktnkkkkkntkkkkkkkkkkktkkknxnkxkkxkkkxkkkkkkukxkkxkkkxkkkkkkkktikkkknkkkkknknkkkkknkkkkknkknknknknkkkkkikkkxkkxkknnnk`ktkkxkknkxkknkwuwwwikwkxkkiknnkkkxkktkkktkkuiixtukkkkxkkkkkkkkkkkkkkkknkknkkkknkkkknknkkkkknknkkknknknkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkxkkkkxnkkxkkktkkkxnktkkknikwiixiinkxkkkxkkxkkkikkkkknkkkkkkkkkkkknikkknknkxknkkknkknkknknukkkkkkwkkkkkkkknkktkkknikkxkkxkkkxknkkkkwkikkxkkkxkkkkkikknxkkkkkkkknkkknknkkkkkkkkkkkkkkkkkkkkkkkkxkknxkkxknkkknwkxkkxnkknxkkkkkkkkknkwkikkikxkkkkxkkxkkkxknuxiixnkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkknikkkxkknukkkwnknxkkutknukkttkkknkkxnnkxkktnkiwkknkkkkkkkkkkkkkkkknxkkknkntkkkkkknkkkknkktkkkkkknnkkkkiukkkkttkntkkkxkkikkktkkknkkukxkkxkkkxkkkkkttxxkkkknknkkknkkkkknknkkkkkkknwiknkknkkkkkkxkkkxkkinknnkkwkikkinkkkxnknkkkkkkkkukikkikktnknxkktnkiwkktxkkknknktkkkkkkknknkkkkkkkkkkkkkknknkkkkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkktkkknuuixtkkituxkkkinutnkkkiuwiknxuikxukkktuxnwkkknknknkkkknkkkkkkukknkkktnkkkkkknkkkkkkntkkkkkkukkkkiukkkkinutnkkuuknuukkkuwuikuukxnkukxuuwuikkkkiknkkknkkkkkknkknkkkkkkkkkkknunkknkkkkkknxunkuuikkxwuxktuinxkxinwuuutkkkkkkkktuinxkxnkkuuxkkkkuuxnukknuuiknkkukkkkkkkkkkkkkkkkkkkknkkknkkkkknknkkkkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkknkkkkknnkkkkkkkkkkikkkkkkikkkkknkkkknkkkkkknkkkkkkkknkkkkkkkkkkkkknkkkkkniknknkkxkkkkkkkknknkkknnkkkkkikkkkkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknknkkknkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkxnkkkkkkkkkkknkkkkkkkkkkkkkknknkknkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkuwtkkkkxwuknkkknkkkkknkkkkkkkkkkkkkkknkkknkknkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkxwunkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknknkknkkkkkkkknkkkkkkkknkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknkkkkkkkkkknknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkknkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknnkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknknknktixikkkxkkkkkkinkkkkkkkkkkkkkkkkkkknxkkkkkkkkkkkkkkkkkkkkknxnkkkkkkikkkkkixnxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkktikkkkkkkkkkkkkkkkkkkkktxkkkkknkkkkkkkkkkkkkkkkkkkkkkkkinkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkxnkkkxixtkkkknkkkkkkikkkkkkkkkkkkkkkkkkkknkkkkkkknkkkkkkkkkkkkkkknkkkkkikkukkkntnukkkkkkkkkkkkkkkkkkkkkkknkkkknkkkknkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkikkkkxnixkkkkikkkkkkiknkkkkkkkkkkkknnnkkknknkkkkninnkkknnnknkkkkknkkkkknkkkkkknxktkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkinikkkninnnkkininnnkkkknkkkkkkkkkkkiniknnkkkknikkkkknnknkkkknkkkkkkikkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknnkkknnnnnkkkkknkkkkkkikkkkkkkkkkknxnninkkninnnkkninnkkkinninikkkknkkkkkninkkkkkikikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxnnikkninnnkknxnxninkkknkkkkkkkkkkknxnxnnnkkxnnxnkkinnxnkkinniikkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkikkkkkkikkkkkkkkkkknnnnnxkknkkknkkknkkkkknnknknkkkknkkkkkkkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkknkkkkkkxknkknkkknkkkkkxxxxxkkxknkknknkkkknknkkkknkkinnnikkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkikkkkkkkkkkinnnnnkkkkkknkkknkkkkknnknknkkkknkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkknkkkkkkiknkknkkknkkkkkkkkkkkkiknkknknkkkknknkkkknkkinnnnkkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkknkkkkkiikkkkikkkkkknkkknkkknkkkkknkkkkkkkkknkkkknninkkkkkkkkkkkkkkkkkkkkkkkkkkkkikkkkkkkkkkkknkknkkknkkkkkkiknkknkkknkkkkkkkkkkkkiknkknknnkknkkknkknnkkxkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkknkkkknnkkkkkiinkkknnknnnkkkinnkkinkikknkninnikkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknikkkkkkkkkkkiikkiikkkninkkiiknnkiknninikkkkkkkkkinknkkikkkiinkkkkinnnnkkniikkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", -"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" -};
--- a/etc/xemacs.xpm Mon Aug 13 08:54:52 2007 +0200 +++ b/etc/xemacs.xpm Mon Aug 13 08:55:10 2007 +0200 @@ -3,175 +3,175 @@ /* width height ncolors chars_per_pixel */ "388 145 25 1", /* colors */ -"` c #686869", -"a c #A6AAF5", -"b c #585859", -"c c #797979", -"d c #09090B", -"e c #989CEA", -"f c #383839", -"g c #363ACC", -"h c #282829", -"i c #88888A", -"j c #13154C", -"k c #7074DF", -"l c #5256D8", -"m c #484949", -"n c #232788", -"o s None c None", -"p c #B8B8B9", +"` c #787879", +"a c #686869", +"b c #A6AAF5", +"c c #585859", +"d c #484849", +"e c #09090B", +"f c #5256D7", +"g c #989CEA", +"h c #363ACC", +"i c #C7C8CF", +"j c #282829", +"k s None c None", +"l c #13154C", +"m c #7074DF", +"n c #D9D9DB", +"o c #232788", +"p c #383838", "q c #4249D0", "r c #B6BAF9", "s c #868AEB", "t c #A8A8A9", -"u c #C8C8CF", -"v c #989899", -"w c #6266DB", -"x s None c None", +"u c #989899", +"v c #6266DB", +"w c #888889", +"x c #B9B9B9", /* pixels */ -"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", -"oxxoxxoxxoxxoxxoxoxoxoxxoxxoxxoxxxxoxxoxxxoxxoxxoxxoxxoxoxxoxxxoxxoxxoxxoxxoxoxxoxxoxxxoxxoxxoxoxoxoxxoxxoxoxoxxoxxoxoxoxoxoxoxxoxxoxxoxxoxxoxxoxoxoxoxxoxxoxxoxxxxoxxoxxxoxxoxxoxxoxxoxoxxoxxxoxxoxxoxxoxxoxoxxoxxoxxxoxxoxxoxoxoxoxxoxxoxoxoxxoxxoxoxoxoxoxoxxoxxoxxoxxoxxoxxoxoxoxoxxoxxoxxoxxxxoxxoxxxoxxoxxoxxoxxoxoxxoxxxoxxoxxoxxoxxoxoxxoxxoxxxoxxoxxoxoxoxoxxoxxoxoxoxoxxoxoxoxoxoxoxoxxoxx", -"xxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxxoxxxxxxxxxxxoxxxxoxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxoxxxxxxxxxxxxxxxoxxxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxxoxxxxxxxxxxxoxxxxoxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxoxxxxxxxxxxxxxxxoxxxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxxoxxxxxxxxxxxoxxxxoxxxxxxoxxxxxoxxxxxxxxoxxxxxxxxxxxoxxxxxxxxxxxxxxoxxxx", -"oxxoxxxxoxoxxxxxoxoxoxxxoxxoxxoxxxoxxoxxxxoxxoxxxxxoxxoxxxxoxxxxxxxxxoxxxxoxxxxxxxoxxxxxoxxxxoxoxoxxxxoxoxxoxxxoxoxxxoxoxoxoxxxxoxxoxxxxoxoxxxxxoxoxoxxxoxxoxxoxxxoxxoxxxxoxxoxxxxxoxxoxxxxoxxxxxxxxxoxxxxoxxxxxxxoxxxxxoxxxxoxoxoxxxxoxoxxoxxxoxoxxxoxoxoxoxxxxoxxoxxxxoxoxxxxxoxoxoxxxoxxoxxoxxxoxxoxxxxoxxoxxxxxoxxoxxxxoxxxxxxxxxoxxxxoxxxxxxxoxxxxxoxxxxoxoxoxxxxxoxoxxoxxxxxxxxoxoxoxoxxxxxoxx", -"xxxxoxxxxxxxxxoxxxxxxxxxxoxxxxxoxxxxxxoxxxxxxxxoxxxxoxxxoxxxoxxoxxxxxxxxxxxxoxxxoxxxxxoxxxoxxxxxxxoxoxxxxoxxxxxxxxxoxxxxxxxxoxxxxxxxoxxxxxxxxxoxxxxxxxxxxoxxxxxoxxxxxxoxxxxxxxxoxxxxoxxxoxxxoxxoxxxxxxxxxxxxoxxxoxxxxxoxxxoxxxxxxxoxoxxxxoxxxxxxxxxoxxxxxxxxoxxxxxxxoxxxxxxxxxoxxxxxxxxxxoxxxxxoxxxxxxoxxxxxxxxoxxxxoxxxoxxxoxxoxxxxxxxxxxxxoxxxoxxxxxoxxxoxxxxxxoxoxxxxxxoxxxoxoxxoxxxxxxxxoxoxxxxx", -"xoxxxoxxxxoxoxxxxxxoxoxoxxxxoxxxoxxoxxxxxoxxoxxxoxxxxxxxxxoxxoxxoxxxxoxxxxxxxoxxxxoxxxxxxxxxxxoxoxxxxxxoxxxoxxoxxoxxxxxxxoxxxxxoxoxxxoxxxxoxoxxxxxxoxoxoxxxxoxxxoxxoxxxxxoxxoxxxoxxxxxxxxxoxxoxxoxxxxoxxxxxxxoxxxxoxxxxxxxxxxxoxoxxxxxxoxxxoxxoxxoxxxxxxxoxxxxxoxoxxxoxxxxoxoxxxxxxoxoxoxxxxoxxxoxxoxxxxxoxxoxxxoxxxxxxxxxoxxoxxoxxxxoxxxxxxxoxxxxoxxxxxxxxxxoxoxxxxxoxoxxxxoxxxxxxxxxxxxoxxxxxxoxox", -"xxoxxxxoxxxxxoxxxoxxxxxxxxoxxxxxxoxxxoxoxxxxxxxxxxoxxoxxxxxoxxxxxoxxxxoxxoxxxxxxxxxxoxxxxxxxoxxxoxoxxoxxxxxxoxxxxxxxxxxoxxxoxxxxxxoxxxxoxxxxxoxxxoxxxxxxxxoxxxxxxoxxxoxoxxxxxxxxxxoxxoxxxxxoxxxxxoxxxxoxxoxxxxxxxxxxoxxxxxxxoxxxoxoxxoxxxxxxoxxxxxxxxxxoxxxoxxxxxxoxxxxoxxxxxoxxxoxxxxxxxxoxxxxxxoxxxoxoxxxxxxxxxxoxxoxxxxxoxxxxxoxxxxoxxoxxxxxxxxxxoxxxxxxxxxxxooxoxxxxoxxxxoxxxoxxxxxoxxxoxxxxxxxx", -"xxxxxoxxxoxxxxoxxxxxoxxoxxxxxxoxxxxoxxxxxxxxoxxxoxxoxxxxoxxxoxxoxxxxxxxoxxxxxoxxxxxxxxxxxoxxxxxoxxxxxxxoxoxxxxoxxoxxoxxxxxxxoxxoxxxxxoxxxoxxxxoxxxxxoxxoxxxxxxoxxxxoxxxxxxxxoxxxoxxoxxxxoxxxoxxoxxxxxxxoxxxxxoxxxxxxxxxxxoxxxxxoxxxxxxxoxoxxxxoxxoxxoxxxxxxxoxxoxxxxxoxxxoxxxxoxxxxxoxxoxxxxxxoxxxxoxxxxxxxxoxxxoxxoxxxxoxxxoxxoxxxxxxxoxxxxxoxxxxxxxxxxxoxxxxoxxxxxoxoxxxoxxxoxxxxxoxxxxxxxoxxxxoxx", -"xoxoxxxxxxxoxxxoxxxxxoxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxoxoxxxxxxoxxoxxoxxxxxxxoxxxxxxxxxxoxxxxxxxxxxoxoxxxxxxoxxxxxxxxxxoxxxxxxxxxxxoxxxxoxxxxoxxxoxxxxxoxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxoxoxxxxxxoxxoxxoxxxxxxxoxxxxxxxxxxoxxxxxxxxxxoxoxxxxxxoxxxxxxxxxxoxxxxxxxxxxxoxxxxoxxxxoxxxoxxxxxoxxoxxxoxxxoxxxxxxxxoxxxxxxxoxxoxoxxxxxxoxxoxxoxxxxxxxoxxxxxxxxxxoxxxxxoxxxoxxxxxxoxxxxoxxxxxxxxoxxxxxxxxxoxxox", -"xxxxxoxoxoxxoxxxoxxxxxxxxoxxxxoxxxxoxxxxxxxxxxxxxxoxxxxxxoxoxxoxxoxxoxxxoxxxxoxoxxxxxxxxxxxxoxxxxxxxoxxoxxxoxxoxxxxxoxxoxxxxxxxxxxxoxxxxxoxxoxxxoxxxxxxxxoxxxxoxxxxoxxxxxxxxxxxxxxoxxxxxxoxoxxoxxoxxoxxxoxxxxoxoxxxxxxxxxxxxoxxxxxxxoxxoxxxoxxoxxxxxoxxoxxxxxxxxxxxoxxxxxoxxoxxxoxxxxxxxxoxxxxoxxxxoxxxxxxxxxxxxxxoxxxxxxoxoxxoxxoxxoxxxoxxxxoxoxxxxxxxxxxxxxxxxxxxoxxxxxxoxxxxoxxxxoxxoxxxxxxxxxxxx", -"xxoxxxxxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxoxxxxxxxxxxxxxxxxoxxxxxxxxoxoxxxxxxxxoxxxoxxoxxxxxxoxxxoxxxoxxxxxxxoxxxxxxxxxxxoxoxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxoxxxxxxxxxxxxxxxxoxxxxxxxxoxoxxxxxxxxoxxxoxxoxxxxxxoxxxoxxxoxxxxxxxoxxxxxxxxxxxoxoxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxoxxxxxxxxxxxxxxxxoxxxxxxxxoxoxxxxxxxxxxxoxxxxxxxoxoxxxoxxxxoxxxxxxxoxxxxxxxoxxx", -"xxxoxxoxuuxoxxxopxxxxxxxxxuuxxxxoxxxoxxxxxxxxxoxuuoxxxoxoxxxoxoxopoxxxxxoxxxooxxxxxxxxxxxxxxoxxxxxxxoxxxxxxxxxoxxxxxoxoxxxxxxxxxxxxxxpoxoxxxoxxxxxxxxxxpoxxxxxxxoxxxoxxxxxxxxpooxxoxxxoxoxxxoxxoxxxxxxxxoxxxooxxxxxxxxxxxxxxoxxxxxxxoxxxxxxxxxoxxxxxoxoxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxoxoxxoxxxoxoxxxoxxoxxxxxxxxoxxxooxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxoxoxxxxxoxoxxxxxxxxxxoxx", -"xxxxxxxxxoxxoxxxuxxxxxxxxxxuxxoxxxxxxxxoxxxxxxxxxuxxoxxoxxxxxxxoupxoxxupppxxxxxxxxxoxpptpuuxxxoxxxxotuxotuxxoxxxoxxxxxxoxxxxxxxxxxoxxxuxoxxxxxxxoxxxxxxxuxxxxoxxxxxxxxxoxxxxxxuxxxxoxxoxxxxxxoxxoxxxoxxxxxoxxxxxxxxoxxxoxxxxxxoxxxxxxxoxxxxoxxxxoxxxxxxoxxxxxxxxxxoxxxoxoxxxxxxxoxxxxxxxxxxxoxoxxxxxxxxoxxxxxxxxoxxxoxxoxxxxxoxxoxxxoxxxxxoxxxxxxxxoxxxoxxxxxxoxxxxxxxxxxxxxxxxxoxxxxxxoxxoxxxxxxxxx", -"xoxxoxooxoxxxouooxxxxxxxxxxooooxooxouoxxoxxuuxoxxuxouuxxoxxxxoxxtuxxxxxxuxxxxxxouoxxxoxoxxoxxxuuooxxopxuoxxxxxxxxooouxuoxoxouoxxxxxooxuxxxuuoxxxxxxxxxxxuouxxxxxuuoooxxouoxoxxuxuuoxoxxoxxxxxxoxxoxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxoxxxoxxoxxxxxxxxxxxxxoxxxxxxxxxxxxxoxxxxxxxooxooxxxoxxxxxoxxoxoxoxxxxxxxxoxxoxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxoxxxxxxxxxxxxxoxxxxxoxoxxxoxx", -"xoxxxuoouuoxuuoppxxxxxxxxxopuuuoxxupuppxxopuupooxuxpuoxxxoxxxxxopxxxxoxxuxoxooxouuoxxxxuxxxxxpuuuuxoxuupxxxxxxxxxopuupupxxupuupxxxpuupoxopuupuxxxxxxxxxxtuupxxxpuopuxoupuupxxxuxtuoxoxxoxoxxoxxoxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxooxxoxxoxxxxxxxxoxoxoxxoxxoxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxoxxxxx", -"xoxxoxoxxuxxuxxxuxxuptptuxxuxxxuxxuxxxooouxxxxuxxutoxoxoxxoxxxxxxxoxxxxxuxxxxooppuoxxxxoxxxxuuouutxxxotoxxxutptpuxuuxuxuxxuxxoxuxuxxxouxuuuuotxxppptpoxxoxxuxxooxxxuxxuxxoxuxxppoxxoxxxxxxoxxxxxooxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxxxxxxoxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxooxoxoxxxxxxoxxxxxooxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxooxxxxxoxxxxxoxx", -"xoxxoxxxxoxxoxxxuxxxxxxxxxxuxxxuxxuxoxouxuxoxxuxxuotxoxxxoxxxxxxoxoxxxoxuxxuxxpoxouxxxxuxxxxpuuouuxxxtxpoxxxxxxxxouuxuxuxxuxxxxuxuxxxxuxpuouuuxxxxxxxxxxuxxuxxuxxxxuxxuoxxxuxxpuuxxxooxoxoxxxxxxxxoxoxoxoxxoxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxooxxoxxoxxxxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxoxxxxxxxxooxooxoxxxxxxxxoxoxoxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxooxxxoxxxxxxoxoxxox", -"xoxxoooxuuxxuoxotxxxxxxxxxxuxxxuxxpuxopxoopxxpoxxuxopxxxoxxxxxxoxxxoxxxouoouxxuoxuuxxxxuxxxxotoxxoxxpoxotxxxxxxxxxuuouxuxxuuxopoxuuxopuxotoxxxxxxxxxxxxxuxxuxxxpoxopoxpoxotxxxuxuuxxxxxxxxxxxxxoxoxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxoxxxoxxxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxoxxxxxoxxxxx", -"xooxxxuuouuxxppuotxxxxxxxxutoxttoxxpttoxxxuttooxppxxttoxxxoxxxxxoxxoxxutttttxxuttotuxxpttuxxxxptpoxotuxotpxxxxxoxutpxtoupxopttoxxxutpotoxoptpxxxxxxxxxxttxottxxoptpxxxoptpooxtuxotpxxoxoxxoxxxxxxxxoxxxoxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxoxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxoxxoxxxxxxxxxoxxxoxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxoxoxxxxoxxx", -"xxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxoxxoxxoxxxxxxoxxoxxxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxxxxoxxoxxoxxxxxxxoxoxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxxxxxoxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxxoxxoxxxoxxoxxoxxxxxxxoxoxxoxxxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxxxxxxxoxoxxoxx", -"xoxxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxooxxxxoxxxxxxxxoxxxxoxxoxxxxoxoxxxxoxxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxoxxxxoxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxoxxxxooxoxxxxoxoxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxxxoxxxxooxoxxxxoxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxoxxox", -"xxxoxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxoxxxxoxoooxxxxxxxxoooxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxoxoxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxooxxxxxxxxxoooxxxxxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxxxxxxxxxxxoxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxoxxxoxxoxoxxxxxxxxoooxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxoxxxxxxxxxxxoxxxxxx", -"xoxxoxxxxxxxoxxxxxxxxxoooxxxxxxxxxxxoxoxxooxoxxxxoxoxxxxxxxxxxxxxxxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxooxxxxxxxxxoxxxxxxxxxoooxxxxxxxxxxxxxooxxoxoxxxoxxxoxxxxoxxxxxxxxxoxoxxoxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxoooxxxxxxxxxxxoxoxxxooxxxxxxxxoxxoxxxxxxxxxxxoxoxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxoxxxxoxxxxoxoxx", -"xxxxxxoxoxxxxxoxxxxxxxxxxoxoxxxxxxxxxxxooxxxxxxxxxxxxxxoxoxxxxxoxoxxxoxoxxoxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxoxxxxooxxxxxxxxoxxxxxxxxxxooxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxxxxxxoxoxxoxoxxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxxxxoxxooxxxxxxxxoxxxxxoxxxxoxoxxxxxxxxxxxxoxxxxxxxoxxxxxoxxxxxxxxoxoxxoxoxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxoxxxoxxx", -"xoxoxxxxxxxoxxxxxxxooxooxoxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxoxoxxxxooxxoxxxxxxxxxxxxxxooxoxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxooxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxoxoxoxxxxxoxxoxxxxxxxxxxxxxxxooxooxxoxoxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxoxooxxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxoxoxxoxxxxox", -"xxxxoxoxxxxxooxooxxxxxxxxoxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxooxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxoxxxxxooxxxxxxxooxooxxxxxxxxoxoxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxoxoxxooxxxxxxxooxooxxxxxxxxoxoxxxxoxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxoxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxoxxx", -"xoxxxxxoxxxxxxxxxxxxxxoooxoooxoxxoxoxxxxxxxxxxxxxxxxxxxxxxxxooxxxxuxxxiixooxxxxxxxxxoxxxxxovxxxxxxxxxxupxxxxxxxxxxxxxxoxxoxxuxxxxuxxxxoxxxxxxxoxxxxxxxoooxxooxoxooxoxxxxoxxxxxxxxxxxxxxxxxxxooxxxxoxxxooxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxoxxxoxxxxxxxoxxxxxxxooxxoooxoxxooxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxooxooxxoxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxoxoxxoxx", -"xxxoxoxxxxxxxxxooxxoxxxxxoxxoxooxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvoxxxxpxxxxoxxoxoxxxxxxxxxuxxxxxxxxxxxuxxxoxxxxoxxxoxxxoxxovoxxxvxoooxoxxxxxxxxooxxxxxxxooxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxoxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxoxxxoxxxoxxxxxxooxoxxxxxxxxooxxxxxxxoxxoxooxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxoxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxoxxxxxxoxxxxxxxox", -"xoxxxxooxxxxxxxxoxxxoxxxxxxxxxxoxoxxxxxxxoxxxxxxxxxxxxxoxxxxxxxxxvxxxxxtooxxoxppoxxpupoouxxpxouxxxxxuuxpxxxupuxxxxoxxxxxxxxpuxxxouuxxxxoxxxxxxxxoxxxooxoxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxoooxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxxxxoxxoxxxoxxxxxxxxoxxxooxooxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxoooxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxoxoxoxxx", -"xxxxoxxxxxxxxxxoxxxoxoxooooxooxxooxxxxxxxxooxxxxxxxxxxxoxxxxxxxxuoxoxxxpxxxxxuppvoxpipiptuxpvtpixxxvupipxxopptuxxxxoxoxxxxxtxxxxxxtxxxxxxxxxxxoxxxxoxxxooxoxooxxooxxxxxxxoooxxxxxxxxxxxoxxxxxxxxxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxoooooxxooxxxxxxxxooxxxxxxxxxxxoxxxxxxxxxxxoxxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxxxx", -"xoxxxxoxoxoxxxxxooxxxxxxxxxxxoxxxxxxxxxxxoxxxxxxxxxxoxoooxxxxxxxpxxxxxxpooxoxuiivxxxixpxxpxpoxxxtxuxxxxtxxxvitpxxxxxxxoooxxpoxoxxopoxoxxxxxxxxxxooxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxoxoooxxxxxxxxxxxxxxxooxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxoxoxxoxxxxoxxxxxxxxxooxxxoxxxxxxxoxxxxxxxxxxoxxxxxxxxxxxoxoooxxxxxxxxxxxxxxxooxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxoxxxoxo", -"xxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxpxxxxxopxoxoovxxtoxoixpxxpxpxxxxpxpxxxxuxxtoxopxxxxxxxxxxxxpoxxxxxpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxxxoxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxoxxxx", -"xoxxxoxxoxoxxoxxxxxxoxxxoxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoxxoxpxxxxotxxxxpoxxixoxcxpxxpxpvoxuuxovxxtvxxtxxppxxxxxxxxxoxxtxxxxxopxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxooxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxoooxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxoxxxxxoxxx", -"xxxoxxoxxxxoxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxvoxopccccuxxviipixcixvuxcuiociuxxxxicuttxpiioiuxxxxxxxxxxxuvxoxovuoxxxxxxxoxxxxooooouoooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoooxxxxxxxxoxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxoxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxox", -"xoxxxxxoxoxxoxxoxxxoxxxxxxxxxxxxxuururuurrrruururrurururrrrrrrruxuuoxxxxurrrrrrrrrrrrrrrrrrruxxxxxxxxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssseaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxoxxxxxooxoxooxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxoxxoxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxxoxxxxox", -"xxoxoxxxxxxxxoxxxxxxxxxxxxxxxxxxxrgqggggqgqgggggqggqggggggggggggkxxxxxxxrwgggggggggggggggggggkxxxxxxxrggggggggggggggggggggggggggggggggggggggggggggggqggggggqtxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxoxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoooxxxoxxxxxxxoxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxxoxxoxoxxx", -"xxxxoxoxxoxoxxoxoxxxoxxxxxxxxxxxxuggggggggggggggggggggggggggggggnmxxxxxxowgggggggggggggggggggnmxxxxxxogggggggggggggggggggggggggggggggggggggggggggggggggggggndxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxoxxxoxxooxxxxxxxxxxooxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxoxxxoxxxooxxxxoxxoxxxxoxx", -"xxoxxxxxxxxxoxxoxxxxxxxxoxoxoxxxxxknggggggggggggggggggggggggggnnjmxxxxxxxegnggggggggggggggggnjmxxxxxxxkngggggggggggggggggggggggggggggggggggggggggggggggggggjmoxxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxoxxooxxxxxxoxxxxoxxxxoooxxxxxxxxxxxxxoooxxxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxooxxxxxxxxoxoxxxxxxoxxox", -"xxxxoxoxoxxxxxxxoxxxxxoxxxxoxoxoxoxbfjjgggggggggggggggggggnjddfmmcxoxoxxxximmmqggggggggggnjddfcxoxxxxxxmmjdnqggggggggggggggggggjdddddddjjnnggggggggggggggggjcoooooxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxoxxxoxxxxxxxxooxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxx", -"xxoxxoxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxopclggggggggggggggggjdmtooooouooooooxxxxosgggggggggjdf`ououoooxxxxxxxxueggggggggggggggggndjcpuuuouviimfjngggggggggggggdiuuuuooxxxxxxxxxxooxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxoxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxx", -"xxxoxxoxxxxxxoxxxxxoxxxxxxxxxxxxxxxxxoxuokgggggggggggggggjmpppupuppptpuuoxxxxusggggggggdd`ppppppppuuuoxxxxxouwgggggggggggggggdhpppuppppppppppcmnggggggggggndtptpppuoooxoxxxxxooxooxxxxxxxxxxxxxxxxxooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxoxoxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxxxxxooxooxxxxxxxxxxxxxxxxxooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxxxoxxox", -"xoxxxxxxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxourlggggggggggggggdbiiiiiivvvvvtpuoxxxrwggggggnddciiiiiivvvttpuoxxxxorwggggggggggggggndciiviiviiviiiviviimqggggggggjhciciivpuooxxxxxxxxoxooxoxxxxxxxxxxxxxxxxooxxxxxxxxxxxxxxxxxxxxoooxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxoxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxooxoxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxoooxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxxx", -"xxoxxoxxoxoxoxxxxxoxxxxxxxxxxxxxxxxxxxxoptkggggggggggggggjbbbbb`b```ccvppuoxuaggggggndhm`bb`b`b`b`citpoxxxxorwggggggggggggggjjbbbbbb``b``````````bqgggggggjhmbmb`cvpuxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxoxoxooxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxoxxoxox", -"xxxoxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxoopvaggggggggggggggjhhfhfffmb``cituoxurlgggggnddjhfhfhfffmmb``mbtxxxpurgggggggggggggggdhhfhffffhfbbbbbbbbbmmwqggggggddhhhhf`ipuxxxxxxxxxxxoxxxxxxxxxxxooxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvtxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxx", -"xoxxxxxoxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxopvvwgggggggggggggndddhdhfmm`civtuoorkgggggndhfhdhdhdhhhfbbcbpuxxxxuurggggggggggggggndddhddhhfmfb``````bbbmmkggggggdddddhhb`bm`oxxxxxxxxxov``b`bxxooxxoxxmbxxbcxxxxxoxxxxxxxxxxxxxxxxxxxxxxpxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoooxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoooxxxxxxooxoooxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxx", -"xxxxoxxxxxoxxxooxxoxxxxxxxxxxxxxxxxxxxxooptsggggggggggggggdddddhfbcivtpuuursgggggndhmmfddddddhfb```bvtxxxttusggggggggggggggjdddddddhfbbi``cvii`bb`bsqggggnddddddfbitvoxxxxxuttxxxtoxvxtxxxpvpoooomxocoxxxxxxxxpopxuoxxxxtuxxxxxppxuxxxotoxxxxxxxxxxpupxtoxxxutuxootxttoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxxxxxxooxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxoxx", -"xxxxxoxoxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoouurggggggggggggggddddhfbcvtppuoouegggggndfbbfhdddddhhfcvii`vpxxxtcrkggggggggggggggjddddddhfbc`tbcippb`cbbiikggggjdddddhfbipvxxxxxxtttioxxxxtxxxocivicxxxuc`xxxxxxxxxxt`t`tvuxx`tpcxxxipt`vxxivtiixxxxxxxxxcvvipcxxuttvuxuicvtcpxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxoxooooxoxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxx", -"oxoxxxxxxxoxxxxxxxxoxxxxxxxxxxxxxxxxxoxoxxouwgggggggggggggjdddhf`ituuuooraqggggndmiui`fhdddhhmhvpuuvoooxxxtrlggggggggggggggddddddddfcvcbtooop`vvimvtsggggddddddhf`vpvoxxxxxvbcvxxxxxtxxxucttvbpooo`iooxpc``bcxx`xpxxpxpxxxxpxtoxxxvxucttt`uxvc`ccvxttxvxtxxocbvtxxvoxxxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxxxxoooooxoxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxox", -"xxxoxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxoxooxxokgggggggggggggndddhfctpoxxxraqgggggdmovpibfdhdhfm`cpuootoxxxoxarggggggggggggggnddddddhfbvpcp`ooxpcvvtvpueggggdjddddhf`tpvoxotxtpooixxxxxvxxxpcvvttoxxipttxxxxxxxxxx`xpxxpxtxxxxtxtxxxxtxpcttvtoxxxoxxxxptxtotxxvxxxtxxtuxxxvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxoxxxxxxxxxx", -"oxxxxxoxoxoxxxoxoxxxxoxxxxxxxxxxxxxxoxxxoxxxrggggggggggggggdddhmctuooxraqgggggddooicimhdhhh`vttoooxvxxxxxxasggggggggggggggjddddddhmctuvxucxoxbpxouxxrgggndfhdddhmctuvxxxvxixxocxxxxxtxoxobuxxxxxttxx`oxxxxxxxxx`xpxxpxotxxvuxocxoicxxbpooooxxxxxxxxptxtovoovxxtuxxtcoxipoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxoxxxoxx", -"xoxxxxxxxxxoxxxxxxoxxxxxxxxxxxxxooxoxooxxxooulgggggggggggggjddhmctoxxuaqggggnddooop`hhhdhm`mmcuooibbbixxtbrkggggggggggggggdddddddfbvpcioxbbxxxibcpoxrgggndbhhddfbcvbbbbbuxubbtiixxtb`booxxibcpxx``xx``xxxxxxxx``xvuxcxxu``pxxxobbpiixxi`cpxxxxxxxxobix`opixvbbubpxpocbuxxoxxxxxxxxxxxxxxxxxxxxxxxoxooxoxxxooxxxxxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxx", -"xxoxxxxoxoxxoxoxxxxxxxxxxxxxxxoxxooxxxooxxxxokgggggggggggggnddhf`vpoorlgggggdjvpoutcbfhfmcvtuxxxooxxxxxxxorqgggggggggggggnddddddhf`vpoxxxxxoxoxxxxxxrgggjmcmhdhfbitooxooxxxxxoxxxxxxxxxxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoooxoxxxxxxxxxxxxxxxxxxxxoxxxxxxxxtxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxuoxxxooxxxxxoxxxxxxxoxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxoxxxxxxxxxxxxxxxxxxxxoxoxxxoxoxx", -"xxxoxxxxxxxxxxxxoxxoxxxxxxxxxxoxxxooxoxoxxxxxaggggggggggggggdddfbvprrwgggggdjuxoptibfffb`ituoxxxxoxooxxxxoaggggggggggggggndddddddm`voxxxxxxxxoxxoxxoegggdcibfhhf`ttuooxxoxxxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxpmbpxxxxxxxxoxxoxxxxxxxxxxxxooxxxooxoxoxxxxxxxxxoxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxoxxxxoxx", -"xoxxxoxxxxxxxoxoxxoxxxxxoxxxxxxoxxoooxooxxxxxuqgggggggggggggjddhbirrwggggnddoouuti`fffbcvtuooxxxxoxooxoxxrsggggggggggggggjddddddhmivuoxxxxooxxxoxooookngdtv`fhhmcppooxooxxxxxxoxxxoxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoooxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxooxxxxxxxxxxoxxxoxxxxxxxxxxxxxxoooxooxxxxxxoxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxooxxxxxxxxxxxxxxxxxxxxxoxxxxxxxox", -"xxxoxoxxxxxxxxxoooxooxxxxxoxxxxxxxxxxoxxxxxoxokgggggggggggggnddhmtrwgggggdjuxoutibmffm`vpuooxxoxxxxooxxxxrwggggggggggggggddddddhhbipuoxxxrswarxooooxoxmhdutcmffbipxuxoxxxxxoxxxxxxxoxxxxxxoooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxooxoxxxxxxxxxxxxxxxxxxxxxxoxxoooouoxxxxxxxxxooooxoxxxxxxxxxoxxxxxxoxxxxxoxxxxxxxxxxxoooooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxooxooooxxxxxxxxxxxxxxxxxxoxoxoxxx", -"xoxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxoeggggggggggggggdddsrwgggggdduoopti`mffb`ituxxxxxxoxxxxxxxxxrggggggggggggggnddddddhm`vpuoooorqggipxooxooxxxxupi`ff`vuoooxxxxxxxxoxuuuruoxxxoxxoxxoorreseeoxxxxxxxxxxxxxxxourrssseooxxxoxxxxxxxxxxxxxxxxxxxxxxxoxxourrasssroxxxxxxxoouooouooxxxxxxxxxxxooxxxxxxxxoxooxourrrsssserxxxxxxxxxxxxxxxxxxxxxxxxoorrassserooxxxxxorserxxxxxxxxxxxxxxxxoxxxxxoxx", -"xxoxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxrggggggggggggggjdirwgggggdjuouuti`mffm`vtuoxxxxxxxxxxoxxxxoeggggggggggggggnddddddhmctuuoxorsgggdtxxxxxxxxxxopibmm`vuxxxouoooururrrsswqsuxxxxxxxrrswggggggkoxoxxxxxxxxxxrakqggggggkrxxxxxxxxxxxxxxxxxxxxxxxxxxxorrswgggqggqexxxxrrressssslksxxxxxxxxxxxxooxxxxoxoxorraswqggggggglsuxxxxxxxxxxxxxxxxxxxxraslgggqggglkrooxorsgggtxxxxxxxxxxxxxxxxoxoxxxox", -"oxxoxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxowgggggggggggggnfrwggggnddooopti`mmfm`ippoxxxxxxxxxxxxxxoxrkggggggggggggggdddddddhmituoxxurqggndxxxxxxxxxxxopv`bbiprrrrrrsssswwlggggggjcxxxxxureqgggggggggqpoxxxxxxxorakgggggggggggexxxxxxxxxxxxxxxxxxxxxxxxorrsqggggggggggwxxrsggggggggggqcxxxxxxxxxxxooxxxxxxorrewgggggggggggggqsxxxxxxxxxooxxxxxorakgggggggggggggwsareqggndxxxxxxxxxxxxxxxxxxxxoxxx", -"xxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxsggggggggggggggrsgggggdjuxouti`mffm`ituooxoxxxxxxxxxxxxxxrlggggggggggggggddddddhfbvpuoourkgggnfxxxxxxxxxxxxutc``vewlgggggggggggggggggdtxxxxorwggggggggggggguxoxxxxorsqgggggggggggggixxxxxxxxxxxxxxxxxxxxxxorsqgggggggggggggmxrlggggggggggd`xxxxxxxxxxxxxoxxxxurelgggggggggggggggggloxxxxxxxxxxxxxxrsqggggggggggggggggggggggnmxxxxxxxxxxxxxxxxxxxxxxox", -"xoxoxoxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxrggggggggggggggsgggggdduouuti`mmfm`ituoxxov`pxxxxxxuxxxxxrggggggggggggggnddddddhfctuuooreggggjcxxxxibuxxoxooticipsggggggggggggggggggjhoxxxraqggggggggggggggnootoxureggggggggggggggggvbuxxxxxxxxxxxxxxxxxxrawggggggggggggggggvrgggggggggggduxxxu`vxxxxxxxxxxorakgggggggnjddmqgggggggqoxxxxxxxooooorsggggggggnjdddjggggggggggjmxxxxxxxxxxxxxxxxoxxoxxxx", -"xxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxowggggggggggggggggggjdpooupi`bffm`cvpoxxxxvxxxxxxxovxxxxosggggggggggggggjddddddhmcpuooraqggggdpxxuuupixxxxoouvvtpeggggggggggggggggggjboxxraqgggggggggggggggn`ucpurwgggggggggggggggggjfoxxxibfcxxxxxxxxxxrrqgggggggggndddggggweggggggggggndoxxxoxtxxxxxxxxxorsqqggggggjdhvuusgggggggggoxoxxoooxoxreggggggggjdmvoxuclggggggggjixooooooxxxxxxxxxxxxxxoxx", -"xxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxookgggggggggggggggggjdbpuutv`bmfm`itpuxxxxxtxxxxxxxcxxxxxrwggggggggggggggdddddddhfipupraqggggndvooptttcoxxxxouupuppljjgggggggggggggggdtuiraqggggggggggggggggghtpirsggggggggggggggggggn`uuoooxtxxxxxxutpxrsggggggggggddbppvkggwwggggggggggjhtuuuuovxxxxxxtpursggggggggjdbtourkgggggggggfpuouvuvtoorqgggggggndcoouptvpwgggggggdiopttvpoouoooooxxxoooxxox", -"xxxoxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrggggggggggggggggjdfivptvcbffm`ivpuooxxxxpxxxxxxxixxxxirqggggggggggggggdddddddhmvprreqgggggjfvmtviii`uoxxxxxouuopibb`sggggggggggggndppaaqggggggggggggggggggdivrsgggggggggggggggggggnfttpuoovxxxxxottvrsggggggggggddmiptvilgqgggggggggggdm`bptptiooxxobvarwggggggggjdmicbraqgggggggggjmcpu``vvirsggggggggdfvpptvcbccqggggggdtutciiitoutupuooxouoouxxo", -"xoxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxulggggggggggggggjddbcivi`bfmm`itpuooxxxxxpxxxxxxxtxxxpuaggggggggggggggnddddfmbitrrslgggggggjcuu`i``i`uoxxxxxxxxoxxcoxrggggggggggggjhvaaqgggndjwggggggggggggd`reggggnddqggggggggggggnh`ivtuovxxxxxo`creggggggggggdd`chii`ikggggggggggggndcc`iiiv`uoxovourwggggggggjdfiicfrkggggggggggnfhvpiooxvrqggggggggdtivii``fbbsggggggdivv`civvuxtxuxxoxuoooooxx", -"xxoxxxoxooxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxokgggggggggggggnddhfbcc`mmfm`cvpuoooxxxxxtxxxxxxovoxxvusggggggggggggggsrarrrssskwggggggggggdvut``bbc`uooxxxxxxxxxxvxxrggggggggggggdmerlgggjdbtaggggggggggggdsaqgggddbutkgggggggggggndfmcituixxvxxiursggggggggggjdc``b`mmmsggggggggggggjdbmmmb`c`puooturwgggggggggdmbccbcrgggggggggggndmcicpootegggggggggdtccbbfmhmmclggggnd`c`mb`iiuopxuxxoxuoooooxx", -"oxxxoxxxxxoxxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxeggggggggggggggdddhmmbmmfm`itpuooxxxxxxxtxxxxxxxcxooorlggggggggggggggggggggggggggggggggggndupmbbmbicuoxxxxxxxxxxxvoorgggggggggggndbrwgggdd`purgggggggggggnbrlgggddpoxasgggggggggggjdhhm`vpioxvxxirsggggggggggjdhic`mfhj`sggggggggggggdhhhdhhmc`pooxrrwgggggggggdjpfciccsgggggggggggndhb``puoasgggggggggdimbfhhhhmm`sggggndmmmffbcvuotxoxxoxuoxoxxxx", -"xxxxxoxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxuqgggggggggggggjddhhffhfmbitpoxxoxxxxxxxpxxxxxxxcuoxxrgggggggggggggggggggggggggggggggggggjfff`bmmhhfmixxxxxxxxxvbmmesgggggggggggjdrsgggddffptagggggggggggnrsgggddvuoorkgggggggggggjdddhmffmmmmxxraqggggggggggdmcfjhhhddisggggggggggggdddddhhdhfmmoorwgggggggggndvtifjhbsgggggggggggndhhfhmptewgggggggggjhhdjhhjhff`eggggjdhhjdhmbcutpxuoxpxxouoooxo", -"xoxoxxxoxoxxxxoxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxokgggggggggggggnddddhhfmbcvpooooooxxxxxxvtxxxxxxxioxregggggggggggggggggggggggggggggggggggdivcbfff`vpuxxxxxxxxxxxxxxrkgggggggggggdeaggnddmitursgggggggggggseggndd`vptirlgggggggggggddddhfbipoxxourqggggggggggjdibmhhddhhslgggggggggggjddddddhm`tuxorsggggggggggdfvc`mhhfsgggggggggggdddhfmcturwgggggggggghhhddhm`ivtalgggjhhhdhhmituoxoxxxxxxxxxxxxx", -"xxxxoxxxxoxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxeggggggggggggggddddhhfbitpuoxxxxoxxxxxxuvuxxxxxoooxrkggggggggggggggjdjjjjnnggggggggggggndiibmhfm`tpoxxxxxxxxxxxxxxuwggggggggggnmrlggddhbiturkgggggggggggrqggjdh`iptvaggggggggggggdddddhmctoxxorwggggggggggndb`fhdddhhfawgggggggggggjddddddhmctuoraggggggggggndicbffhjh`ggggggggggnddddhf`iprwggggggggggndddhfbitpuukgggdhhddhhbipuoxxooxxxxxxxoxox", -"oxoxxoxoxxoxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuqgggggggggggggjddddfmcvpooxxxxxoxxxxxxxxxxxxxxxxxxrlggggggggggggggddddddddjjjgggggggggnjibfhhhmctuxxxxxxxxxxxxxxxrgggggggggggnrsggjdjf`vptrlggggggggggkkggjddfbitpasgggggggggggndddddhm`tpoxrsgggggggggggdhbfhhdddhfbrqgggggggggggdddddddfbvpuorqggggggggggdmcbfhddhfmwgggggggggddddddfmiprwgggggggggggdddhmcvpuoosgggd`fhddfbipoooxxxxxxoxxxxxxx", -"xxxoxxxxoxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxuwgggggggggggggndddhf`vpuoxoxxxxxxxxxxoxoxxxxxxxooorggggggggggggggndddddddfbcv`qgggggggjhmfhjdhbipoxxxxxxxxxxxxxxosgggggggggggaeggnddhmcvppagggggggggggsggndddfbivtrlgggggggggggjdddddhfcvpooaqggggggggggndmfhddddhfbvrgggggggggggnddddddhf`vuorkggggggggggndbmfhddhhmcvqgggggggjddddddhmctpwggggggggggggddhmituooooggndcmhhhfbvpuxxoxxoxxxxxoxxox", -"oxxxxxoxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxraqggggggggggggggdddhmituoxxxxxxxxxxxxxxoxoxxxxxxxorsggggggggggggggjddddddhhm`cvvwggggggdhhdddhfbipoxxxxxxxxxxxxxxrkgggggggggggrqggdddfbivtrsgggggggggglqggdddhf`iveaggggggggggggddddddhmcvuorkgggggggggggjdfhdddddhmcasgggggggggggjddddddhmituragggggggggggjjmhhdddhf`ipobnnnnjddddddddhmctusggggggggggggfdhmipuoooxoddhibfhhf`vpooxoxxxxxxxxxxxxx", -"xxoxxxoxoxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxorwgggggggggggggggjddhbcpoxxxxxxxxxxxxoxxxoxxoxxxxxxuwggggggggggggggddddddddhfbb``sgggggndhddddhf`vuxxxxxxxxxxxxxxxrlggggggggggswggjddhm`vtvrwggggggggggqggnddddfb`ctsggggggggggggddddddhfcturegggggggggggndhhddddhhmcvpsgggggggggggdddddddhbiporlgggggggggggdfhhdddhhbipoxxobffjddddddddhmcpueggggggggggggghhmctoxxxxxouut`mhhm`tuooxxxoxxoxxxxxxxx", -"xxxoxxxxxoxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrrwggggggggggggggggjddhmctoxxxxxxxxxxxxoxxxxoxoxxxxxxrqgggggggggggggnddddddddhfmmbbcwggggjddddddhmctuxxxxxxxxxxxxxxxrgggggggggggsggndddhm`ciirgggggggggggggnddddhfm`crlgggggggggggjddddddhmiturlgggggggggggjdhdddddhfbiprlggggggggggnddddddhf`vpregggggggggggjdhhddddhmcvpuoxootibfdddddddhmiporgggggggggggggghf`vuoxxoxooutibffmcvuooxxoxxxxxoxoxoxx", -"xoxxxxoxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxorwggggggggggggggggggddhf`vuxxxxxxxxoxxxxxxxxxxxxxxxxxaggggggggggggggndddddddhfmbbbbckggggdddddddfbituxxxxxxxxxxxxxxosggggggggggllggddddhmciceegggggggggggggjdddddfmbiaggggggggggggjddddddhbipregggggggggggndjddddddhbitprgggggggggggjddddddhfcturlgggggggggggjdhdddddfbituxoxootibfhdddddhfbipookgggggggggggggghbipuxxoxxxopv`mmbituxooxxxoxoxxxxxxxx", -"xxxxxxxxoxoxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxorwgggggggggggggggggggdddf`vuoxxxxopxoxxxxxxxxoxxxxxxxusggggggggggggggjddddddhdhbcii`vsggggddddddhdfipoxxxxxxxxxxxxxxrwggggggggggqggjdddhfb`ccakggggggggggggndddddhffmakgggggggggggnddddddhf`iprlgggggggggggjdddddddhm`vpuegggggggggggdddddddhbcpregggggggggggndhdddddhm`tpooxoxupv`mhddddhhbcvuoxrggggggggggggggqmcvpoxxoxooutc`b`vpuoxxoxxxxxxxxxxoxx", -"xxoxxoxxxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxrsgggggmlgggggggggggggnddhmcpoxxxx`uxxoxxxxxxxxxxxxxxvrwggggggggggggggddddddddb`itttiasgggnddddddhmmtpoxxxxxxxxxxxxxxrqgggggggggggggddddhfb``irqggggggggggggjdddddhhj`rqgggggggggggndddddddf`vreggggggggggggddddddddhbiturkgggggggggggdddddddfbvprkgggggggggggndddddddfbcpuoxxxxxutibffhhhhm`vpuoxokggggggggggggggmbipuoxoxooupv`cctpoooxoxxoxoxoxoxxxx", -"oxxxxxxoxoxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxorsgggggjhkgggggggggggggnddhm`tuxxxx`xooxuvtxxxpuxotuxucrggggggggggggggnddddddhdmctpuiiusgggjhfhdddhmbpuoxxxxxxxxtutxtuegggggggggggggndddddhbb`eeggggggggggggnddddddhhhieggggggggggggdddddddhmctrlgggggggggggndddddddhm`vuorqggggggggggjddddddhfcvurggggggggggggjddddddhf`vpoxxxxxoouvi`mmmmb`vtuoxxxrqggggggggggggggf`vpooxoxooptvivpuoxxxxxxxxxxxxxxoxx", -"xxxoxxxxxoxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxorsgggggjdtaggggggggggggggdddfbipoxxupxooxivtixxpiouvvoueeggggggggggggggndddddddhmcpuov`osgggdmffhdhfbbpoooxxxxxxo`ii`tesgggggggggggggdddddhdfb`akggggggggggggjddddddhhmakggggggggggggdddddddfbiraggggggggggggddddddddhbituuegggggggggggjddddddhmctrsggggggggggggdddddddhm`tuoxxxxxxouutvccccivpuoxxxxxsgggggggggggggggfcvpooxxxooupppuooxxoxxxoxooxoxxxox", -"xoxxxxxxxxoxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxrsgggggjdvxrlgggggggggggggjddhbctoxxtxxxoocm`ixxxvxxxvxxakggggggggggggggjddddddhfcpuooovusgggdvbbhhhf``pxxxcmbbbixvvxvxrlggggggggggggjddddddhdbcrqgggggggggggnddddddddf`rqgggggggggggjdddddddf`irkggggggggggggdddddddhf`vporkgggggggggggdddddddfbvprwgggggggggggndddddddf`vtuoxxxxxxxooopttvvtpuoxxxxxxxwgggggggggggggggmctuooxoxoouuuuoxxxxoxxxxxxxxoxxxx", -"xxoxoxoxxxxxxxxoxxxxxxoxxxxxxxxxxxxxxxxxoraqggggjdvxookggggggggggggggddhfcvuxxvxxxxvpoxixxoioxxtxxrlggggggggggggggddddddhffvpoooxvokggjdpb`fhhmc`uxxxxoooxxxttxtorgggggggggggggjdddddhhhbveggggggggggggjdddddddhmseggggggggggggjddddddhm`trqgggggggggggjdddddddhmctuorqggggggggggnddddddhf`vurggggggggggggnddddddhm`touxxxxxxxxxoooouuuuoooxxxxxxxxqggggggggggggggj`ctuooxoxxoooxxxxxxxoxoxoxoxxoxxx", -"oxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxraqggggndcxoopsggggggggggggggdddfbipuxutxxxixxu`xxoixovvxorggggggggggggggnddddddhfmvpoxxxvxeqgjboccmffbicuruxxooxooovtxvosggggggggggggndddddddhm`rkggggggggggggddddddddhbakgggggggggggndddddddhmiaeggggggggggggdddddddhf`vpouegggggggggggjddddddhm`treggggggggggggjddddddhbitoxxxxxxxxxxxxxxoooooooxxxxxxxxrqggggggggggggggh`ituooxxxxxxxxxxxxxxoxxxxxxxxoxx", -"xxoxxoxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxraqggggndmououvvqgggggggggggggjddfmctuxx`xxxobmviixoumbpmprsggggggggggggggjdddddddhhf`oxtmbmb`mdhffhhmmhfmaslkxxxxxopmixbrkggggggggggggjdddddddhmcrlgggggggggggjjddddddhfcrqgggggggggggnddddddhf`vrkggggggggggggdddddddhmctporkgggggggggggdddddddhbctusggggggggggggdddddddfbvuuoxxxxxxxxxxxxxxoxoxxxoxxxxxxxxsggggggggggggggnm`vpuoxoxxxxoxxxxxxxxxoxoxoxxxox", -"oxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuaqggggndmooupvcbsgggggggggggggnddhmcvpoxpuxxxxxxxxxxxxoxxxrwggggggggggggggdddddddhbipuxxxxxxxxxxxutibfbctraqggbxxxxxxooxxrqggggggggggggdddddddhfbtaggggggggggggddddddddhbeeggggggggggggdddddddhm`vrlgggggggggggnddddddhh`ipooagggggggggggnddddddhf`vprwggggggggggggddddddhm`vooxxxxxxxxxxxxxxxxxxxxxoxxxxxxxookgggggggggggggghmcvpoxxxoxxxoxxxxxxoxxxxxxxxxxx", -"xxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxurwgggggdmxoupvc`msggggggggggggggdddf`vpuooxxxxxxxxxxxxxxxxorqggggggggggggggddddddhf`vuoxxxxxxxxxxxoti`m`iprwggnduxxxxxxxxuaggggggggggggjdddddddhm`asgggggggggggndddddddhf`akggggggggggggdddddddhbiprggggggggggggjddddddhfcvuorsgggggggggggjddddddhfcvurwggggggggggggddddddhmctuxxoxxxxxxxxxxxxxxxxxxxxxoxoxxxxxolgggggggggggggjfbctuooxxxxxxxxxxxxxxxoxxxxoxxx", -"oxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxurwggggndhxooptcbmfcqgggggggggggggjdhhbituooxxxxxxxxxxxxxxxxoeggggggggggggggnddddddhmctuoxxxxxxxxxxxuti`b`vrsgggjfxxxxxxoxxusggggggggggggddddddddfbirlgggggggggggjddddddjhbirlgggggggggggjdddddddfbvreggggggggggggdddddddhbipuurqgggggggggggdddddddhbitorggggggggggggnddddddhbipoxoxxxxxxxoxxxxxxxxxxxxxxxoxxxxxooulgggggggggggggdf`vtuxxxxxxxxxoxxxxxxxxoxxxoxx", -"xxoxxoxxxxxxxxxxxxxxxxxxxxxxxxoxxxxurwgggggdjuxoutc`mfmbsgggggggggggggnddhmituooxxxxxxxxxxxxxxxxrsggggggggggggggjddddddhmitooxxxxxxxxxxoopic`craqgggjixxxooxxoorwggggggggggggdddddddhm`tagggggggggggnddddddjhm`vaggggggggggggdddddddhm`tusgggggggggggndddddddf`iuursggggggggggggdddddddfbiporggggggggggggndddddhf`vpoxxoxxxxxxxxxxxxxxxxxuerxxxoxxxxxouaqggggggggggggdhm`vuooxxxxxxxxxxxxxoxxxxoxxox", -"oxxxoxxoxxxxxxxxxxxxxxxxxxxxoxxxxxorwgggggdhuouupibmfmbcaggggggggggggggddhf`tpooooxxxxxxxxxoxxxxrwggggggggggggggdddddddf`ipxxxxxxxxxxxxoopticarlggggdpxxxououoorggggggggggggjdddddddhbiasgggggggggggnddddddjfbirsggggggggggggdddddmdhmctrkgggggggggggnddddddhmcvuurqgggggggggggnddddddhfcvporggggggggggggndddddhmcvuoxxxxxxxoxxxxxxxxxxxxaggkxxxooxxxxousggggggggggggjdhbctuoxxxxxxxxxoxxxxxxxxxxxxx", -"xxoxxxxoxxxxxxxxxxxxxxxxxxxxoxxxxorkgggggjduooutv`bfmmcvaqgggggggggggggjddfbipoxxxxxxxxxxxxxxooorggggggggggggggnddddddhf`tuoxxxxxxxxxxxoooptprwggggjjxooouppuorsggggggggggggdddddddhf`trwgggggggggggddddddjhf`vrwgggggggggggjddddhrs``ipuwgggggggggggjddddddhbctorsggggggggggggjdddddmmmituorggggggggggggndddddhmipuoxxxxxxrsqaxxxxxxxxxxegggmxxxoxoxxxouwgggggggggggndhf`ipuxxxxxxxxxxxxxxxxxxoxxxx", -"xxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxoorsgggggjdvouppi`bfmmcvprkgggggggggggggjddhm`tuoxxxxxxxxoxxoxoxrsggggggggggggggnddddddhmctuxxxxxxxxoxxxooourrwgggggd`xoupttpporkgggggggggggndddddddhmctrggggggggggggddddddjhmctrqgggggggggggdddddaegg`turwgggggggggggjdddddhf`vpraqggggggggggggdddddjrssiuxxrggggggggggggndddddhbipuxxxxxxraqqgkxxxxxxxxosgggdxxxxxxoxoourqggggggggggnddhmctuoxxxxxxxxxxxxxoxxxxoxox", -"xoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxorsgggggjdvoouti`mfmmcipoosggggggggggggggddhf`vpooxxxxxxxoooxxoxukggggggggggggggjddddddhbiuoxxxxxxxxxxoxooxurwggggggdpouptiivpurlgggggggggggjddddddhh`irsgggggggggggjddddddjf`iaaggggggggggggdddd`rgggjcuuwgggggggggggjdddddhf`vprkgglggggggggggdddddeaggluxxuqggggggggggggdddddhbvuuxxxxxurlgggjbxxxxxxxokgggjoxxoxxxxoxuusggggggggggnddhfbipooxxxxxxxxxxxxxxxoxxxxx", -"xxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxrsgggggjdvoouticmmfmcvtuxorggggggggggggggdddhbipuxxxxxxoooxoxxoxrlggggggggggggggdddddddf`vuooxxxxxxxxxxxxxrrwggggggndxopti``ituaggggggggggggdddddddhm`trwgggggggggggdddddddhf`vrsgggggggggggndddhrkggndiorwgggggggggggjdddddhmctrsggkggggggggggnddddcrqggjbxxowggggggggggggdddddf`iuxxxxxorwgggndvxxxxxxxrwgggnvoxoooxxoooorqgggggggggndddhmctuxxxxxxxxxxxxxooxxxxoxx", -"xoxoxxxoxoxxxxxxxxxxxxxxxxxxxorsgggggndbxuupi`bfmm`ipuoxxulgggggggggggggnddhmctpuxoxxxoxooxxxxuaggggggggggggggnddddddhf`vuoxxxoxxxvbpoxoraqgggggggjmoptc`b`itreggggggggggggdddddddhbiprggggggggggggdddddddhbitrkgggggggggggjdddeegggdmuoowgggggggggggjdddddhbiraqggsggggggggggjdddmrwggndcxxokggggggggggggndddhh`vpxxxxxrsggggdhxxxxxxxxrlggggmuuuuuoooxoousgggggggggjdddhf`vpoxxxxxxxxxxxxxxoxxxxox", -"xxxxxoxxuxxxxxxxxxxxxxxxxxxuorsggggggdfooutvcbffm`ituxxxxowggggggggggggggddhf`vpooxxoxxxoxooxxukggggggggggggggjddddddhmctuooxxxxxxxxvorrkgggggggggdvptv`fm`vprlgggggggggggjddddddhf`vregggggggggggnddddddjfbiprwgggggggggggdddaaqggjdvuookggggggggggggdddddf`raqggwkggggggggggjddfrsgggdfoxxxegggggggggggggdddhf`vuxxxorsggggjjoxxxxxooorgggggjupttppoooxooegggggggggdddddfbipoxxxxxxxxxxxxxxxoxoxxx", -"xoxoxxxxuxxxxxoooxxxxuoxxxxareggggggnduvppicbffm`iiipxxxprsggggggggggggggnddfbituoxxotpvovuoxorlggggggggggggggjddddddhbitoxutvxxxoooarelgggggggggndivi`fhhm`urggggggggggggjddddddhfctrkgggggggggggjddddddhf`vprlgggggggggggddaaqggndbuooxsggggggggggggqdddh`aaqggnrwggggggggggjdfrsgggjdtoxxxoqggggggggggggqdddf`tuoxurwggggjdvxxouuuuuorggggggvtivvpuoooxorgggggggggdddddhbctuoxxxxxxoxoxxoxxxxxoxx", -"xxxxxoxooxxxxuuutxxotuptpxurwgggggggnfbctvcbffmbivivipxxttsggggggggggggggghdhmctuoxxociicvcxxregggggggggggggggjdddddhf`vpuxvvvixxourelgggggggggggjhcf`mhhfbireggggggggggggdddddddhbiprqgggggggggggdddddddhbiturggggggggggggwraqggndhtuoxurgggggggggggggwkcrrsqggndrggggggggggglsrsgggjd`uooooukggggggggggggglbmf`turralggggndcxoouptvtpuegggggghic`ituooooorggggggggjdddddhmctuxxxxxxxxxxoxxxoxoxxxx", -"xoxxxxxoxxxxxpooxxxpuupuvrawgggggggggmpivcbffmbivp`bitxoorsgggggggggggggggqhhfffmbbixptxvovorrlgggggggggggggggjdddddddhmtuxi`cvurrslgggggggggggggdfc`mfhhmcprkgggggggggggnddddddhf`vregggggggggggnddddddhhbvpurgggggggggggggwggggjd`tuouptwggggggggggggggwwgggggdhrggggggggggggwlgggndfpuxoupptqgggggggggggggqserraelgggggndmoooutvccvtrsggggggq`bb`vuooooregggggggnddddddhfctuoxxxxxxxxxxxxxxxxoxox", -"xxoxoxooxxxxxxxopxxtuuprreqggggggggggktccbfffbcvpioxotoorrlggggggggggggggggqk``ipoxxxtpxvoprrwggggggggggggggggqbfdddhbituoprrraswgggggggggggggggndibhhhhh`vprlgggggggggggjddddddhmctrsgggggggggggjddddddhm`vuurgggggggggggggggggjdmvpuoptisggggggggggggggggggggdhurggggggggggggggggndhipuoupvvvsgggggggggggggggggggggggggndmooxupic``ctrsgggggggqbmbcpoxoorlgggggggjddddddhm`tpoxxxxxxxxxoxoxxoxxxxx", -"xxxxxxxooxxxuoxxouxotrrewggggggggggggglsrvffmcvpuixrrrraslggggggggggggggggggglsaruxxxppurrasqggggggggggggggggggqksrrrrrresskwqggggggggggggggggggnj`mhddhh`vpaggggggggggggdddddddhbitrlgggggggggggdddddddhbipooulgggggggggggggggjdh`vpuuvicclggggggggggggggggggjdtxulgggggggggggggggdd`vppppiicivkgggggggggggggggggggggggndmxxoptvcbb`ctrwggggggggwbm`tuxursgggggggjdddddddhfctuoxxxxoxxxxxxxoxxxxoxx", -"xoxxoxoxuoxxouppuxxxoeqggggggggggggggggggqnm`ipoxt`rwqggggggggggggggggggggggggggglexu`vrwgggggggggggggggggggggggggggggggggggggggggggggggggggggggdhhddhdhfmmesgggggggggggnddddddhf`vragggggggggggndddddddfbvuoxokggggggggggggggjddm`vpptic`isqggggggggggggggggjdixxosggggggggggggggddfcvpppvi`citpkgggggggggggggggggggggjdmxxxppvc`mb`vtrwgggggggggletarrakgggggggjdhhdddddhmctoooxxxxxxxxxoxxoxoxxxx", -"xxoxxxxxooxoxxxxxxxxosggggggggggggggggggggghctuoxxxrggggggggggggggggggggggggggggggncxxxrggggggggggggggggggggggggggggggggggggggggggggggggggggggggdhhhddhhbiprwgggggggggggjddddddhmctrkgggggggggggjddddddhfcvpoxxuqggggggggggggjddhmcvttic``ipsgggggggggggggggdd`puoupqgggggggggggnddjf`vttvc``cvpuo`ggggggggggggggggggnddioouupvc`mb`iturqggggggggggggwwlggggggggjdfmhdddddfbitooxxxxxxxoxxxxxxxxoxox", -"oxxxxxoxxoxxxxxxxxxxxagggggggggggggggggggggdipoxxxxxggggggggggggggggggggggggggggggnmxxxxgggggggggggggggggggggggggggggggggggggggggggggggggggggggndhddddhf`vpoggggggggggggdddddddhmitukgggggggggggdddddddhmctuoxoxrggggggggggjddddhf`ivic``cvpucggggggggggggjddbivtptvcggggggggggjdddhf`ivic```ituooucnggggggggggggggnjdhtooupticbmm`cvporggggjjjnggggggggggggggjdj`imhddddhf`vpooxxoxxxxxxoxxxxoxxxxx", -"xxoxoxxxxxxxxxxxxxxxxxtdddddddddddddddddddddipoxxxxxxddddddddddddddddddddddddddddddfooxxxdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddhmctpooddddddddddddddddddf`vpoxmdddddddddddddddddfbipooxxoxunngggnnjddddddhhbb`bb`cvpuoopnnggggggnjdddhf`ciicc`bnggggggnddddddhm````b`itpoooouthjnggggggggnnjddctttttvccbmbbcvpuuugggdjccmjjnggggggggnjdd`ppimhddddhbctuooxxxxoxxxxxxxxxxxoxxx", -"oxxxxoxoxoxxxxxxxxxxxxxxxoooooppvc`mhdddddhmctuoxxxxxxxxxxooouppibfdddddddddddddfbcvpuoooxoxxooxoupvcbfjddddddddddddf`ipuuoooooouuppptvvi``mfhhdddddddhbitooxxoooouv`fjdddddddhfcvuoxxxxxoupcmhdddddddhm`vuooxxxoxo`fddddddddddddhfmmbb`ituuxuoubjjjjjddddddjhfmbbbbmbbfjjjdddddddddhfmbbb`cvpuooxoupi`hddjjjjdddddfbcciicc`bmmmbcvtuoooejdhpupcmhdddjjjjdddmcoouvcfhdddhm`ipuoxxxxxxxxxxxxxxxxxxxox", -"xxoxxxxoxxoxxxxxxxxxxxoxxxoouptvc`mhhdddddhmbivppooxxxxxxooupptvcbhhddddddddddddhfbcivppuuooooooppvi`fhdddddddddddddfmcvtppupppppttvvic`bmfhhddddddddhf`vpuoxxxxoouv`fhdddddddhmctuxxxxxxoptcmhdddddddhmctuoxxxxxoooui`fddddddddddhffb`ivpooxxuutcbhddddddddddhhfffmm`cvvmfhdddddddddhhfmbcvpuoxxxxoutibfhdddddddddhhmmmbmmfffmbcvtuoxxouvvtxuvcmhdddhhmb`uuuooutibfhdhhfbituooxoxoxxxxxxxxxxxxxxxxx", -"xxxxxoxxxxxxxxxxxxxxoxxxxxoupti`bfhhdddddddfm`citpuxxxxxxuuptvccbfhddddddddddddddhfm`civtuuoxooptv`bmhhdddddddddddddhfm`civvvvviiic``bmmfhhhdddddddddhm`tuooooxxoopibfdddddddhfbvpoxxxxxoopv`fhddddddhhbitoxxxooxxxouv`mhdddddddddhhmbctuooxoxoouv`mhddddddddddjhhfm`ivtpv`mhdddddddddhfb`ituuxxxxxooptcbfhddddddddddhhhfhhffmbcvupuxooxoxxxouv`fhdjdhfb`ittppppicmhhdhfbcvuuxxxxxxxxxxxxxxxxxoxxoxx", -"xoxxxxxxoxoxoxxxxxxxxxxxxxxuticbmhhdhddhdhhhfmb`itpoxxxxoupvicbbmhhdddddddddddhdhhhfmb`citpoouuvc`bffhhddddddddddhdhhhfmb```````bbbbmffhhhdhhddddddhhfbipuxxxxxooupibfhdddddhhm`vuoxxxxxootv`fhdddddhhm`vpooxxxoxxxoupcbhhddddddhhhmbivpuxoxxxoouti`mhdddddddddhhfm`ituuptcbhhddddddhhfb`vppooxoxxxxoupvcbmhhdddddddddhdhhhfmbivpuxuxxooxoxoopt`mhhhhhhfb`civvvc`mfhhhmbctpuoxoxxxxxxxxxxxxxxxxxxxxx", -"xxoxxxxxxxxxxxxxxxxxxxxxxoouti`mmffhfhfhhhffmmb`cvpoxxxxoupvc`bmmffffffhfhffhfhfhffmmbb`ivpuoupvc`bmffffffhffhfhhhhhffmmbb`b`bbbbbmmmmmffffhffffffhffbcvpoxxxoxxooti`mfffffhfmbitpxxxxxxxupv`bffffffff`cpuooxoxxoxxoopv`mhhhdhdhhfm`ituoxoxxxoxoopti`mfhddddhdhhfm`ituooopvcmhhddddhhfb`vtuoooxxxxxoooopti`mfhdhddddhdhhhfmbcivpuoxxxxxoxoxoopv`mfhfffmmmm```c`bbmffmm`itpooxoxoooxxxxxxxxxxxxoxxoxx", -"xxxxoxxxxxxxxxoxxxxxxxxxxxoutvc```bbbbbbbbbb```civpoxxxxxupvi`c```bbbbbbbbbbbbbbbb`bb`ccitpooouvic```bbbb`bb`bbbbbbb`b````c`c```````b``mbbbbbbmmbbb``ivpuxxxxxxoxopvc`bbbbb```itpoxxxxxxxouti``bbbbb``ivpoxooxxxoxxouupicbfffffmb`cvtuooxxxxxxxooupti`bmffhhhffm`cvtpoxxoopicmffhfhfb`cvpuoxxxxoxxxxxoouutvc`bmffhfhhhffmb`ivtuuxxxxxxxxxxxouptcbbb````bbbbbbb`bmmmb`cvtuooxxxxxxoxxxxoxxxxxxxxxxxox", -"xxoxxxoxxxxxxxxxxxxxxxxxxxoouttiiiviivivvvvvviivtpupxxxxoouptvvivivvvviiiviiviiiiviiiivvtpuuoot`tvviiivvvivmbivvvviiiciivivvcvvv`mcmivi`ivivvii`iiivvtpuooxxxxxoooupbcvvvvivvvtpoxxxxxxxoou`bvvvviicbttpupcucpoxoxxxooupvic````civtpuoxxxxxxxvtxxxoptvi`bbbbb``citpovcpxxoupvi`bmb``cvppooxxxxxxxxxxpcxxouptvc``mbmbbb``civtpuooxxxxxxxxxxxxxuticciivvviccc```````ccitpuooxxxxxxxxooxxxoxxxxoxxoxxxx", -"xxxxoxxxxxxxoxxxxxxxxxxxxxxxouuppppppppppppuupppuuiuxxxxxxouuuupuupppupppppuppuptpppppppuoooooovuupppppppptftppuppuuctpppppvipppvbifpppuippupppippppuuoxxxxxxxxxooouuippppuuvuuuoxxxxxxxxooovuppuuvtp`vooomompxxoxoxoooupttvvvvttpuuooxxxxxxxxpxxxxxuitviiiiivvtpuuooxpxxxooptviiiivtpuooxxxxxxxxxxxxtxooxouutvvibiiiivvtppooxxxxxxxxxxxxxxxooutvvtppppptvviiiiivvttppuoxoxxxxxxxxxxxxxxooxxxxxxoxxx", -"xoxxxxoxxxxxxxxxxxxxxxxxxxxxoooxuouoooouuooxoooooxixxxxotpoxotuptpooppottoooxutvoooppptuoooxututooooooooooviooooooouioouuouioooot`uboooovuooxoouvoooooxxxxxxuuoptooootpvooopitttxxpopxuuxxxotoooootooooxxxmx`oxxxxxxxoxoouupppuuuooooxxxxxxxxxpopoxouivvivtvvvtptooxxxpxxxoxouuppvvvtupxxxxupoxxooptopxxootpouuppcttppppuuooxxxxxxxxxxxxxxxxxxopuuuuoooouupppttpppuuoooxxxxxxxxxxxxxxxxxxxoxxxoxxxox", -"xxoxxxxxoxxxxxxxxxxxxxxxxxxxxoooxxooxoxxoxxxxoxxouuxxxxppttxxtiipvtouictpcoxtiptcoopctttuxxttpicoooooxoxoovuxoxxoxxupoooooovxooooixioxxoxvxxxxxxvxxxxxxxxxxxuiitpcxxx`ptixxuiptuxxpcpittpxxxpxxxxxucpuxxxxcxvxxoxxxxxxxxxoooooooooxxxxxxxxxxxxvtttuxoittvuutcvctttxxxxpxxxxxxxouotctctptxxtvpipoxptpiioxtvppcuoooppouoooooxxxxxxxxxxxxxxxxxxxxouoooxoxooxoooououuooooxoxxxxxxxxxxxxxxxooxxxoxxxxoxxx", -"xxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpxxxxxtcvtxxxtxxxtxxtoxoopovpppvixxpxxopoxtxxxtxxxxxxoxxxxxxxxxoxopxxxooxopoxxxxxxxxoxxxtoxxxxxotxxxxxxxxxxxtxxxopxxpxxpxxxpxxxxxxixpxxpxxxpxxxxxxxxtpxxxxoxxxxoxxxxxxoxxoxxxxxxoxoxxxxxxxxxxpxxxpxxpxooooocxtxxpxxxxpxxxxciccipxixpxxuxuoxxxpxxtxxxtxxvppptvxxxxtxxxoxoxxxxxxxxxxxxxxxxxxoxxxooxoxxxxxoooxoxoxooooxxxxxxxxxxxxxxxoxxxoxoxxoxoxxoxx", -"xoxoxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxpxxxxpuxxtxxxtxxxtxxtxxxopxcpptpuxopxxxpxxpxxxpxoxxxxxxxxxxxxxxxxopxxxxxoxpxxxxxxxxxoxxxovxxxxxxixxxxxxxxxxxtxxxopxxpxxpxxxpxxxxxxixpxxpxxxpxxxxxoxxopxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxpxxxtxxpxoxoxxixpxxpoxoopxxxxxxxxxoxixpxxuxpxxxxpxxpxxxpxxipppppxxxxpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxox", -"xxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxtxxovxxxcoxotxxvtxovoxttxxxoxxpoxxpxxvxxucxxxxxxxxxxxxxxxxxxxopxxooxotxxxxxxoxxxxxoxtxxxxxxuoxxxxuvxxxxvtxovxxxpxxuxxxtxxxoxxvxpxxpxxxuxxxxxvvttxxxxoxxxxxxxxxxoxxxxxxxxxxoiuxxxxxxxxxxxpxxxpxxpoxoooxixpxxpoxxxpxxxxxxxxxxxixuxxuxxvoxutxxvoxucxxttxxxoxxxtxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxxxxxxxxxxxxxxoxxxxxxxxxxxxoxxxxxoxxoxxoxxxxxx", -"xoxoxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxvxxxxiiptpxxptitxxxuuivooxxuiipoxtipxtixxxtituixxxooxxxxxxxxxxxxxxvxxxooxtoxxxxxooxxoxxxotxxxxxxvxxxxuvxxxxuuivoxxiixuivxxxvivuxiixpuxixpiivvuxxxxuxxxxxxxxxxxoxoxxoxxxxxxxxxxoiuxxxxxxxxxxpiuxiiuxxtiipotiuutxtuoiiiitxxxxxxxxtiuupxpoxxvvtxxxxvituixxovipxooxvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxoxxxxxxxxxxxxxxxoxxxxxxxxxxxxxoxxxxoxxoxxxoxoxx", -"xxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxxxxxpxxxxxxpxxxxxxoxxxxoxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxuuxoxxxxtxxxxxxxxxxoxxxuxxxxxxoxxxxxxxxxxpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxxoxoxxxxoxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxxxxxxoxoxoxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxtoxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxoxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxox", -"xxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvivxxxxpivoxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxpiioxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxx", -"oxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxoxxxoxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxoxxoxxxxxxxx", -"xxoxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxoxxoxxxxoxx", -"oxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxxxxxxooxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxoxxxxoxxxoxxxxx", -"xxoxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxoxxxxxxxoxxxxoxox", -"xxxoxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxxxxxxxxoxxxxxoxxxxxxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxoxxxxxxxxxxxxxoxxxxxooxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxxxxxoxxxxoxxxxxxxxxx", -"xoxxxxoxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxoxooxxxxxxxxxxxxxouxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxoxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxoxoxxoxoxoxxxox", -"xxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxoxuxxxvpppxxxpxxxxxxpoxxxxxxxxxxxxxxxxxxxopxxxxxxxxxxxxxxxxxxxxxxpuxxxxxxpxxxxxupopxxxxxxxxxxxxxxxxxxxxxxxxoxoxxxootuxxxxxxxxxxxoooxoxxoxxtpxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxoxxxxxxxxxxxxxoxxxoxxxxxxxxxxx", -"xxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxooxoxoxxxxxxxxxxxxxxtoxxxtpttxxxooxxxxxxpxxxxxxxxxxxxxxxxxxxxuxxxxxxxoxxxxxxxxxxxxxxxuxxxxxuxxvxxxuvuixxxxxxxxxxxxxxxxxxxxxxoxoxxoxxxoxuxxxxxxoxxxxxxxxoxxxxxxuxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxuxxxxxxxxxxuxxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxoxxxoxxxxxxxxxxxoxxoxxxoxxoxxxxx", -"oxxoxoxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxoxxxxxxxxxxxxpoxoxtuptxxxxpxxxxxxpooxxxxxxxxxxxxuuoxxxuxoxxxxupooxxxoooxoxxxxxoxxxxxuxxxxxxutxvxxxxxxxxxxxxxxxxxxxxxxxxxoxooxxxouuuxxxupouuxxuuuouuxxoxuxxxxxxxxxxououoooxxxxuuxxxxxuuxoxxxxoxxxxxxuxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxxxxoxxxxxxxxxxxxxxoxxxoxxoxxoxoxx", -"xoxxxxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxouxxoopoouxxxxouxxxxxxpxxxxxxxxxxxotuupuxxupuuuxxopuuxxoppppupxxxxoxxxxxupuxxxxxpxpxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxtuupxxotuuoxxututupuxoxuxxxxxxxoxxoututupoxotuutoxxpuutuxxupuupxxxxuxxxxxxooxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxoxooxxoxxxxxxxxx", -"xxxxxxoxxxxxxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxoxxxxxxxuxoxxxxxoxoxxxxpxxxxxxuoxxxoxxxxxxuuuuutxxoxxxoxxxuxxxxxuoxuxuxxxxuxxxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxooxxxxxxuxxuxoxuxxxxxxtxuxxuxxxoxxxxopttptxxtxuxxuxuxxxxuxuoxxxuxxpuuupxxxxoxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxoxxxoxxxxxxxxoxxoxxxoxoxxxox", -"xxxoxxxoxxxxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxxxoxxxxxxuxxxoxoxoxxxxxxuoxxoxxopxxxxoxoxxopuuuuuxxoxxxooxxuxxxxxuuxoxuxxxxoxxxxuxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxuxouxxxuxxxxxxpxuxxuxoxuxxxxxxxxxxxxpxuxouxuxoxxuxuxxxxoxopuuuuoxxxuxxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxoxxxxxxoxxoxxxxxxxxxoxoxxxxxxoxxx", -"xoxxxxxxxoxxxxxxoxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxxoxoxxxxxoxxxxxxxxxxoooxxxxxxxoxxxxxuxxxoxxuxxxxxpuoxxopoxxxxxuxxxuxoxuxxxxxuoxuxoxxxxuxxoxoppuoxxxxxxxxxxoxxxxxxxxxxxxxxxupoxxoxxxoxoxxuxxooxxuxoxxxxtxuxouxxxuxxxxxxxxoxxxpxuxxuoouxxpoxouxxupxxpoxxxxxxxuxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxoxxxoxxxxxoxxxxxxxxxxxxxxxxxxxoxxoxxxxx", -"xxoxxoxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxooxxxoxoxxoxxxxxxpxxxoxxxxxoxxxxuoxxxxxouxxxxpuxxxxxppuoxopuxupuxxoppuoopuxpxouxpppppxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxopxxxxoxxxxoxppooppxoouppoxppxuoxpxuppppoxxxxxxxxppxuoxpxxoppooxxoppouuxxuppoxxxxuxxxxxxuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxooxxxoxxoxxoxxxxxxxxxoxxxxxxoxxox", -"xxxoxxxxxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxxxoxxxxxooxxxxxxxxxxoxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxoxxoxoxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxoxxoxxxxxxxxoxoxoxxxxxxpxxxxxxuoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxoxxoxxxxxxxxxxxxxxxxxxoxxxoxxx", -"xoxxxoxxoxxxoxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxoxoxxoxxoxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxoxoxxxxxxoxxxxxxxxxxxxxxxxxxoxxxxxxxxoxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxoxoxxoxxoxxxxxxxxxxoxxxxxxxxxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxxxxxxoxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxxxxxxxoxxxoxxoxxxxxxxoxxxxxxxox", -"xxxoxxxxxxxxxxoxxxxxoxoxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxxoxxxoxxxxxxxoxxoxxxxoxxxoxoxxxxxxxxxxxxoxxxoxoxxxxxxoxxxxoxxxxxxxxoxxxoxoxxxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxoxxxxxxxxxxxxxxxxoxoxxxoxxxxxxxxxxxoxxoxoxxxxxxxoxxxxxxxxxxxxxxxxxoxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxoxoxxxoxxxxxxxxxoxxxxxxxxxoxxx", -"xxxxxoxxxxoxxxxxoxxxxxxoxxxxxxxxxxoxoxxxxxxxxxxxxoxooxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxoxxxxxoxoxxxoxxxxxxoxxxxxxxxxxxxxxxxxoxxxxxxxoxxxxxoxxxxoxxoxxxxoxxxoxxxxxxxxxxxxxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxoxxxxoxxoxxoxxxxxxxoxoxxxxxxxxxxxxxxxxoxoxxxoxxxxxxxxxxoxoxxxxxxoxxoxxxxxxxxxxxxxooxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxxxxxxoxxxxxoxxxxxxxxxxxxxoxxxxxx", -"oxxoxxoxoxxxoxoxxxxxxxxxxxxxxxxoxxxxxxxxxxxxxxxxxxxxxxoxoxxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxoxxxxxxxoxxxxoxxxxxoxxxxxxxxxxxoxxxxoxxoxoxxxoxxxxxoxxxxxxxxoxxxxxxxxxxxxxxxxxxoxxoxxxxxxoxoxxxxxxoxxxxxxxxxxxxxxxxxxxxxxxxoxxxxoxxxoxxxxxxxxoxxxxxxxxxxxxoxxxxoxxoxxxxoxoxxoxxoxxxxxxxxoxxxoxxxxxxxxxxxxxxxxoxxxxxxoxxoxxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxxoxxxxoxxxxxxxxoxxxxxxxxoxoxxxxxxxoxoxx", -"xxxxoxxxxxoxxxxoxxoxxxxxxxxxxxxxxxxxxxxxxxxxxxxoxoxoxxoxxxoxxxoxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxoxxxxoxoxxxxoxxxxoxxoxxoxxxxxxxxxxxoxxxxoxxxxxoxxxoxxxxxxxxxxoxxxxoxxxxxxxxxxoxoxxxoxxoxxoxxxxxxxxxxxxoxxxoxxxxxxxxxxxxxxoxxoxxxxoxxxxxxxoxoxxoxxxxxoxoxoxxxxxxxxxxxxxoxxxxxxoxxoxxxxoxxxxxxxoxxxxoxxxxoxxoxxoxxxoxoxoxxxxxxxxxxxxxxxoxxxxoxxxxxxxxxxxxxxxxxxxxxoxxxxoxoxxoxxoxxxoxxxxxxoxxxxxxxxxox", -"xoxxxxoxoxxxxxxxxxxoxxxoxxoxoxxxoxoxxxxxxxxxxoxxxxxxoxxxoxxxoxxxxxoxxxoxoxxxoxxxxxxxxxoxxxxxxoxxxxoxxxxxxxxxxxxoxxxxxxxxxoxxxxxoxxxxoxoxxxxoxxxoxxxxxxxoxxoxxxxoxxxxxoxxoxoxxxxxxoxxoxxoxxxxoxoxoxxxxxxxoxxxxoxxxxxxxxxxxxxxxxoxxxxoxxoxxxxxoxxxoxxxxoxxxoxxxxxxxxxoxxxoxoxxxxxxxxoxxxoxxxxxxxxoxxxxoxxxxxxxxxxxxxxxxxoxoxxoxoxoxxxxxxoxoxxxoxxxxxxxxxxxoxxxxoxxxxxoxxxxxxxoxxxoxxxxoxoxxxxxxxxxxxxx", -"xxoxxxxxoxxxoxoxoxxxxoxxxxxxxoxxxxxxoxxxxxoxxxxoxoxxxoxxxxxxxoxoxxxxoxxxxxxxxoxxxxxxxxxxoxxxxxxoxxxoxxoxxoxoxoxxxoxxoxoxxxoxoxxxxxxxxxxoxoxxxxxxxxxxxxxxxxxxxxxxuoxxxxxxxxxxoxxoxxxxxoxxxxouoxxxxoxooxxxxoxxxxoxxxxxxxoxoxxxxxxoxxxxoxxxoxxxxxxxxoxxxxoxxxxxxxoxxoxxxoxxxxxoxxoxxxxxxxxxoxxoxxxxoxxxxxoxxxoxoxxoxoxoxxxxxoxxxxxxoxoxoxxxxxxxxoxxxxxxxxoxxxxxxxoxxoxxxoxxoxxxxoxxxoxxxxxoxoxxxxxxoxxx", -"xxxxxxxxxxoxxxxxxxxxxxxxoxxoxxxxoxoxxoxoxxxxxoxxxxxoxxxoxxoxxxxxxoxxxxoxoxxoxxxxxoxxxoxxxxxxoxxxoxxxoxxxxxxxxxxxxxxxxoxxoxxxxxxxoxxxxxxxxxxoxxxoxxxoxxxoxoxoxoxxxoxoxoxoxxoxxxxxxoxoxxoxoxxxxoxoxxxoxoxoxxxoxxxxoxoxxxxxoxxoxxxoooxxxxxxxxxxoxxoxxxxoxxxoxoxoxxxxxxxxxxxxoxxxxxxxxoxxxxxxoxxxoxxxoxxoxxoxxxxxoxxxxxxoxoxxxxxoxoxxxxxxxoxoxoxxxoxxxoxxxxxxxoxxxxoxxxoxxxxxxxxxxxxxxxxxoxxxxxoxoxxxoxx", -"xoxxoxoxxxxoxxxxxxxoxxoxxxxxxoxxxxxoxxxxoxoxxxoxoxxxoxxxoxxxoxoxxoxxxxxxxoxxxoxxxxxoxxxoxxxxxxxxxxoxxxxoxxoooxxooxxoxxooooooxoxxxooxoxxxxxxxooxoxoxxxoxoxxxxxxooxoxxxooxoxxxoxoxxxxoooxxxoxxoxxxooxoxxxxxooooxxxooxoxoxxooxxxoxxoxxoxoxoxxoxxxxxxxxxxxoxxxxxxoxoxxxxxoxxxxoxoxxxxxxoxxoxxxxoxxxoxxoxxxxxoxxoxxoxoxoxxxxoxxoxxxxoxoxxxxxxxxxoxxxxxxxxoxxxoxxxoxxxxoxxxoxoxxoxoxxoxxoxxxoxoxxxxxoxxxxx", -"xxoxxxxxoxxxxoxxoxxxxxxxoxoxxxoxxoxxoxoxxxxoxxxxxxoxxoxxxxoxxxxxxxoxoxxoxxxoxxoxxxxxxxxxoxxoxoxxoxxxoxxxxxoxooxxxoxooxxxooxoxxxooxooxxoxoxoxxooooooxxxoxooxoxooooxoxooxoxoxoxxxxxoxxoxoxxxoxxoxxxxooxxoxoxoxooxooxooxxxxxoxxxxxxoxxxxxxxoxxxxoxxoxoxoxxxxoxoxxxxxxoxxxoxoxxxxxoxxxxxxxxxoxxxxoxxxxxxoxoxxoxxxxxxxxxoxoxxoxxxxoxxxxoxxoxxoxxxoxoxxxxxxoxxxxxxxxoxxxxoxxxxxxxxxoxxxxxxoxxxxxoxoxxxxoxx", -"xxxxoxoxxxoxxxxxxoxxoxxxxxxoxxxxxxxxxxxoxoxxoxxoxxxoxxoxoxxoxxoxoxxxxoxxoxxxoxxoxxxxxoxxxxxxxxoxxxxxxoxoxxooxoxoxoxxoxoxxxxxoxxoxxxoxxooooooxxxxxxoxooxxoxxxoxxxxoxoxooooxxoooooxxoxoooxoxxxoxxoxxxoxxxxxoxoxxxxoxxxxoxxxoxxoxxxoxoxxoxxxxoxxxoxxxxxxoxoxxxxxoxxoxxoxxxxxxoxxxxoxoxxoxxxxoxxxxxoxoxxxxoxxxoxxoxxoxxxxxoxxoxxxxoxoxxoxxoxxoxxxxxoxoxxxxxoxxoxxxxoxxxxoxxoxoxxxxxoxoxxoxoxoxxxxoxoxxox" +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkknkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknikkkknninkkkkkkkkkkknninnnkkkkkkkkkinkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkknknkkkkkkkkkknkkkkkkkknkkkkkknkkkkknkknkkkkkkkkkkkxkkkkkkknkkkkkkknkkkknknkkkkkkknkkkkknknnkkkkkkkkknkkknkkkkknkkkkkkkkkkkkknkkkkkkkkkkkkknkkkkkkkknkkkkkknkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkknnkknnnnikkkkkkkkkknnnnkkknnnnnkkkinnikkkkkinnkkkkkkkkkkikkkkkkknkkkkkkknnkkkkkkkkkkkinnnnkkknnnkkkkkkkkkknnninnkknnnnnkkknnninkkinnnnkkkkkkkkkkinnnkkknnnnnkknnnnnkkknkxnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkknkkknkkniiiinkknkkknkknkkknkknkkkknkknxkkkkkkkkkkkkkkkkkkkkknkkkkkkiinnkkkknkkkknnnnnxkkkkxkkkkniiiinknnknknkknkkkkkknkkkknknnnnnikkiiiiikkknkknkknkkkknkknkkkknkknikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkknkkkkkkkkkknkkknkknkkkknknkkkknkknnikkkkkkkkkkkkkkkkkkkknkknkkikkknkkkknkkkknnnknnkkkxkikkkkkkkkkknnknknkknkkkknknkkkknkinnnnnkkkkkkkkkknkknkknkkkknkknkkkknkkinnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkknnkknkkkxkkkkkkkkkknkkknkkinkkikknnkknnkknkkikkkkkkkkkkkkkkkkkkknkknkkikknnkkkknkkkkkxkkkkkkikkkikkkkkkkkknnknknkknnknxkknnkkinkkxkkkkkkkkkkkkkknkknkkkikknikkinkkikkknknnkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkknkknkkninnikkkkkkkknxkkixkkkixxnkkknxxnkkiikkxxkkkkkkkkkkkkkkkknxxxxxkknxxkxnkkixxnkkkkxxikknxiknxnkkkkkkknxikxknnkkixikkkknxikxnkkixikkkkkkkkkkixkkxxkkkixnkkkkixxkkkxnknxikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkknkkkkkkkkknknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkknkkkkkknkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkknkknkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkknkknkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknknkkkkkkkkkkkknkkkkkkkkkknkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkknkknkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkknkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkknkkkknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknknknkkkkknkknkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknknkkkkkknkknkkkkkkkkkkkkkknknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknknkkknkkkkkkknknknkkkkknkknkknkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkkkkknkkknkknkkkkkkkknknknkkkkkkkknkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkknkknknknkknkkkkkkkkkkkkkkkkkkkkkknkkkknkkkknkknuunnkknkkkknkkknkkkkntkkkkkkkkkkiikkkkkkknkkkkkknkkkknnkkkknnkkknkkkkkkkkkkkkkkkknkknkknkkknknkkkknkkkkkkkkkkkkkkknkknkknkkkkkkknkknkknknkknknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkknkknknkkkknkkkkkknkkkkkkkkkkkkkkknkknkknkkkkkkknkknkknknkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkknkkkknkkkkkkkkkkkknkkkkkkkkkknktnkkkkiknkkkknkkkkkkkkkkkkikkkkkkkkkkkinkkknkkkkknkkkknknkkukkkktkknkknkkkkkkknknkknkkkknknknknkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkknkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkknkkknknkkknknknkkkkkknknknkknkkkknkknknkknkkkkkkkkkkkkkkkkknkkkkkkkkkknkknkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkknknkkkkkknknkkkkkkkknkknkkknkkkkkknkkkkkkkkktkkkknikkknnkixnknininnnkkxkninkkkkiikikknniikkkkknkkkkkkkxnknkkiikkknknkkkkkkknkkkknkknkkkkkknknknkkkkknkknkkknkkkkkknkkkkkkkkkkkkkkkknkknkknkkknkkknkkkkkkkkkkkkkkkkkkkkkknkkkkknkknkkkknkkkkknkkkkknkkkkkkkknkkknkknknkkkkknkknkkkkkknkknkkknkkkkkknkkkkkkkkkkkkkkkknkknkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkknkknnknkkknnkkkkkkknkkkkkkkkknkkknkkkkkkknnknkkkxnkkkknixtkkxuxuxxikitxiukkktiiuxkknixxikkkkknkkknkktkkkkkktkkkkkkkkkkknkkknknkkkknknknkkknkkkkkkkknkkkkkkkkknkkknkkkkkkkkkknknknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkknkkkkkknkkkkknkknkknknnkkknkkkkkkkknkkkkkkkkknkkknkkkkkkkkkknknknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkkkkkkkknknkknkkknkkknknkknknkkkxkkkkkkxknknkiuuukknukxkkxkxnkkktkikkkkxkkktutikknkkknknkkkxknknkkxnknkknknkkkkknkkkknknkkkkknkkkkkkkkkknknkknkkknkkknknkknknkkkkkkkkkkknnkkknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkknkknkknkkknknknknkkkkkkknkkkkkknnkkkkkkkknkkknkkkkkkkkknknkknkkknkkknknkknknkkkkkkkkkkknnkkknkkknkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkkknkkkkkkkkknknkkkkkxkkkknkxknkkntnktnkkwkxkkxkxkkkkxkxkkkkxkkxnknxkkkkkkkkknkkxnkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkkkknkkkkkkkknkkkkkknkkkkknkkknknkkknkkknkkkkkkknkkkkkkkkkkkkkkkknkkkkkkkkkkknkkknkkkkknkknkkkknkkkkkkkkkknkkkkkkkkkkkkknknkkkkkkkkknkkkkkkkknkkkkkknkkkkknkkknknkkknkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknnknnkxknkknxkknkxkkkwknkwkxkkxkxunkxnkntkkttkktkkixkkkknkkkknkktkknknnxkknkknknknkkkkkknkkkknknkkkkkkkkkknkkkkkkkkkkkkkkkkkkkknknkknkknkkknkkkkkkkkkknkkkknknkkkknkkkkkkkkkkkkkkkkkkkknkknkknknkkknkkkkkkkkknkknkkkkkkknkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknknkknkknkkknkkkkkkkkkknkkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkunkkxwwwwikkuwunwkwwktikwnwnwwnkkknwwittkiwwnwnnkkkknkkkkkntkkkktnnkknkkkknknknnnnnnnnnnnnnkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnkkkkkknkknnkknkkknkknknkkkknkkkkkkkkkkknknkkkkkknkkkkkkkkkkkknkknknnnknknkkknknknknnkkknknknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnkkkkkknkknnkknkkknkknknkkkknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkrrrrrrrrrbrrrrrrbrrrrrrrrrrrrrikinnkkknirrrrrrrrbrbrbrrbrrriknkkkkkkrrrrrrrrrrrrrrbrrrbrbrrrrbrrrrrrrrrrrrrrrrrrssssssgsggbkkkkkkknkkkkkkkkkknknkknkkkkkknkkkkkkknkkkkknknkkkkkkkkknknkkknknknkkkkkkkkknkkknkknknknknknkkknknkkkknknkknkknknkknkknknkkkkkkkkkkkkkknkkkkkkkkkknknkknkkkkkknkkkkkkknkkkkknknkkkkkkkkknknkkknknknkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkrhhhqhhhhhhhhhhhhhhhhhhhhhhhhhhmkkknkkkivhhhhhhhhhhhhhhhhhhhmknknkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhtnknkkkknnkkkkkkkkkkkkknkkkkkkknkkknkkknknkkkkknknkkkkkkknnnkknkkkknknkkkknkknkkkkkkkkkkkkkknkkknknnkknknkkknkknknkkkkkkkkkkknknnkknkkkknnkkkkkkkkkkkkknkkkkkkknkkknkkknknkkkkknknkkkkkkknnnkkknkkknknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknknknkkihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhodknkkkknvhhhhhhhhhhhhhhhhhhhockkkkkkihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoenkkknnkkkkknkknknkknkknknnknkkkkkkkkkknkknkknkkkkknknkkkkkknkknknkkkkkkkkkkkkknnkknknknnkknknknkkkknkknknkkkkknkknnnkknnkkknkknknkkknnkkkkknkknkkknknkknnnkkkkkkkkkkkknkknkknkkkkknknkkkkkknkkkknkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkmohhhhhhhhhhhhhhhhhhhhhhhhhoooldkknknkkbhohhhhhhhhhhhhhhhholdnknnkkkmohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhlcnknknkkkkknkkkkkkknknknknkkkkkkknkknnkkkknkkkknnkkkkkkknknkknkkkkknknnkkkkknkkknnkkkkkknknkknknknknknknknknknkknkkknkkkknnkknknknknknkkkkknkkkkknknkknkkknknkkkknkknnkkkknkkkknnkkkkkkknknknnknkkknknnkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkdpllhhhhhhhhhhhhhhhhhhholeepddwnkknknkkwdddqhhhhhhhhhhooeepwknkkknkkddjeoqhhhhhhhhhhhhhhhhhhleeeeeeelloohhhhhhhhhhhhhhhhl`nnnnknknknknnknknkknkkkkkknkknkkkkkkknknkkkkkkknnnknknkkknnkkknnnkkkkkkknkkkknkkknkkkkkkkknknkkknkkkknkkknkkknknkknnknkkkkkkkknknknkkknknknknknkkkknkkkkkkkkknkkkkkkknknkkkkkkknnnknknkkknkkkknknkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkx`fhhhhhhhhhhhhhhhhledtnnknnnnnnnnnkkkknshhhhhhhhhlej`nnnnniknknkkkkknghhhhhhhhhhhhhhhhoel`xnninitwudplohhhhhhhhhhhhheunnnnnnnknknkknkknnnkkknknkkkkkkkkkknkknkknnnkkkkkkkkkkkkkkkknkkkknnknkkkkkkkkkkkkknkkknkkkkkknnkkkknkkknknnnkkkkkkkkknkkknknkkkkkkknkkknknknknknnnnknknnknkkkkkkkkknkknkknnnkkkkkkkkkkkkknknkkknknnknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnmhhhhhhhhhhhhhhhlcxxiixixxxxiinnnkkkighhhhhhhheeaxxxxxxxiiinnknkknnivhhhhhhhhhhhhhhhejxxixxxxxxxxxii`dohhhhhhhhhhoetxtxxinnnnknknknknknnnknkknknkkkknkkkknknnkkkkkkkknkkknkknknknknknkknknknnkkkkknkkkknkkknnknknkkknkkkknknkkknknknknkkkknkkkkkknknkkkkkkkkknknknkknknnknkkknknkkknkkkkknknnkkkkkkkknkkknkknkknknkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkknirfhhhhhhhhhhhhhhecuuwwuuuuuuutxnnnkkrvhhhhhhoeewuwwwuuuuutxxnnknkknrvhhhhhhhhhhhhhhoewwuwuuuwuuwuwuuuuwdqhhhhhhhhoew`wwwuxnnnkknkkknknknknknkkkkknnkknkkkknknnknnknkkkkknkkkkkkkknknkkkkkkkkknknkkkknkkkkkkknkknkknkkknknkkknnknnnkknkkkknknkkknkkkkknkkkkknkkkknkkknkknnknnkkkkknkknknkkknknnknnknkkkkknkkkkkkkkknnnkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkknknitshhhhhhhhhhhhhhlcccccaaaa``wuxinnkrbhhhhhhoejdccaacacaaa`utxnnkknnrvhhhhhhhhhhhhhhllccaccaaaaaaaaaaaaaaaqhhhhhhhljcdcca`txnkkkkkkknknkkkkkknnnknkknnnknkkkkkkkknkkknnkkknkknknkkkkkknkknnkkkknkknkkkkkkkkkkknkknknnknkknknkknkknknknknkknknkkkknknkkkkkkkkkkkkkkknknnkkkkkknnnknkknnnkkkkkkkkkknkkknnkkknkknknknkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkniughhhhhhhhhhhhhhljjpjpppdcaa`utxnnirfhhhhhoeejjpjpjpppddcaaccxnkkinrhhhhhhhhhhhhhhhejjpjppppjpccaccccccddvqhhhhhheejjjjpawxinkkkknkkknknnnnnkknknknkknknnkknkknknknnkknkkkkknkknknkkkkkkuukknkkkkknkkkkkkkknkkknnkkkknkkknknknknkknknknkkkkknkkkkkknknnkkkkknkkkknkkkknknnnkknknknnknknnnkknkknknknnkknkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnituvhhhhhhhhhhhhhoeeejejpdca`wuxinnrmhhhhhoelpjejejejjjdda`ctnkkkkxnrhhhhhhhhhhhhhhoeeeeejejpdpcaaa`aaaccddmhhhhhheeeeejpc`cdannknknkknknxa`cackknknnnnkccnkcaknkkknknkkkknkkknknkkkkkkkkktkkkkkkkkknkkkkkkkkkknkkkknkknkkkkkknknknknkkkknknknkknkkkkkkkkkkkkkknknknknknknknkkkknknknnknknnkkkknkkknknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkniitshhhhhhhhhhhhhheeeejjpc`wutxinnrshhhhhoejcdpeeeeeejpc`aaautnnkttishhhhhhhhhhhhhhleeeeeeljpccwaa`uwwacaacsqhhhhoeeeeeejcwxunknkkkittkkktkntktnknxtinknndknwnkkkknknktitniikkkntxkkkkkxxkxkkkitxkkkknknkknxxxkxnnnkitxknntkttnknknknknnkkknkknkkknknkkkkkkknknkkkkknkkknknknnkknknnknknnknknnkkknkknnkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknnirhhhhhhhhhhhhhheeeeepc`utxxinnighhhhhoepcapjeeeeejjp`wwwatxkknt`rmhhhhhhhhhhhhhhleeeeeejpc`ata`uxxca`ccwwmhhhhleeeeejpawxunkknkktttwnnkkktkkkn`uuu`nknn`cknnnkkkkkkt`xaxuikn`xx`nkk`ttaukk`uxw`nkkkkkkknwuu`xwknntxuiki``ut`xkknkknknnnknkkkkknkkkkkkkknkkkknnkknkknnkkkkkknknnknnnnknknnknnkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknknnknivhhhhhhhhhhhhhleeejpauxinnnnrbqhhhhoedwiwapjeeejjdjtxinunnnkkktrfhhhhhhhhhhhhhheeeeeeeejwuwctnnni`uuwcutshhhheeeeeejpauxuknnknkua`uknnkktnknn`ttuaxknn`wknkxaaacakkckxkkxkxkkkktktnkkkwki`ttxaxnwaaa`tkttntktkkn`autkktnknkwkknknkkkkkkknknkknkkkkkkkknnnknkknkknknknnkknkknkknknknnnnknknnkkknnkkknkkkkkkkkkkkkkknkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknknknkknknknshhhhhhhhhhhhhoeeejd`uinnkkrrqhhhhhednuxucpejejpda`xinntnkknnkxrhhhhhhhhhhhhhhoeeeeeejpaux`x`nnnx`ttuuiighhhheleeeejp`tiunkntktxnnwkknkntknkx`ttttnnkwxttkkkkkkkkknaktkktktkkkktktknnktkx`ttttnkknkkkkkxxkuntnkunkntkkunknkwnkkknkknknnknknknknkknnknkkknknnnknknnkknknknknknnnknkkkknkkkkkknkkkkknkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkknknknknkbhhhhhhhhhhhhhheeejd`tinknrbqhhhhoejnnu`wdjejjjauxxnnnkuknkknnbshhhhhhhhhhhhhhleeeeeejc`titni`knkcxkniknrhhhoepjeeejd`titnknukwkkn`nknkktkknncxkknkktxnkcnknkkknkkkaktkktkitkkuxkn`knw`nkaxnnnnkkkkkkkktxntntnnukktxkkx`nkuinnnknknknkkkknnkkkknnkkknnknknkknkkkkkknknkkkkknknkkkkkkkknnknkkkkkkkkkkkkkkkkkkkknkknkkknnkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknknknnknknkkknnnfhhhhhhhhhhhhhleejd`tnkkibqhhhhheeinnxajjjepdadd`xknwcccwkntarmhhhhhhhhhhhhhheeeeeeepcwx`unkcanknwcwxknrhhhoecpeeepcwwccccaxkicctuwkntcccnnknwa`xkkaakkackkknkknnaakuikakkiacxknknacxwwnnua`xnknkkkkkiawkanxwkuccicxktn`ciknkknknknknknkkkkknkknnnknnknnnnnkknnnkknknknknnnknnknknkkkkkkkkknknknnkkkkkkkkkkkkkkkkknknknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkknnknkknmhhhhhhhhhhhhhoeejpauxnirfhhhhoeltxnit`cpjpd`utnnkknnnknknkknrqhhhhhhhhhhhhhoeeeeeejpauxknkknnknknknnkkrhhhld`djjjpcwxnnknknnknknknkknkkknkknnnnnkknknkkkknkknkkknkkkkkkkkkkkkkkkkknnnkkknkknkkkkkkkkkkkkkknnnkkkknnktkkknkknnnknnkknkknkknkknkkknkknnkkkknnnnknnnknknkknknknnnknkkkknkkkknkkkkkknkkkkkkkkkkkknkkkkknkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkknkkkkkkknknknnknkknknknbhhhhhhhhhhhhhheeepcuxirvhhhhheliknxtwcpppcawxinknknknnknknknbhhhhhhhhhhhhhhoeeeeeejp`unkkkkkknknknknknghhhe`wcpjjpattnnnnnkknknknknnknkknnkknkkknkkkkkkkknknkknkkknkkkkkkkinknknkknknnnknkknknkkkkkkkkkkknkknknnkknxpctkkkkkkknkknnknnkknnkknknknnnknnnnnkkkkknknkknknkknnkknknknnkkkkkkknknnknkknkkkkkkkknnknkknknknknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkknkkkknnkkkkkkkknknknnkkkkkiqhhhhhhhhhhhhhleejcwrrvhhhhheennnitwadppc`utxnnnkkknknnknnkrshhhhhhhhhhhhhhleeeeeejdwuxinkknnnnknnknnnnmohetuapjjd`xxnnknnknkknknknknnnkknknknknknnkknknnkknnknknkkkkknkkkknnnknkknnknnknnknkknkkknnknkkkkknnnknknknknnnkkkkkkknnnknnnnnknnnkknkknkknnnnnnnnnkknknnnknnkknknkknkknnkkknnnknknkknkkkkkkkkkkkknknkkkknknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkknkkkkkkkkknkknkkkknknkkknnnknmhhhhhhhhhhhhhoeejdtrvhhhhhelnnnitwadppd`uxnnnknnnnknnnknkkrvhhhhhhhhhhhhhheeeeeeepcwxinnknrgvbrknnnnknncjlit`dppcwxnnnnknknnnknkknkknknknknnnnkkkknnnnkknnkkknkkknkkknkkkknnnnnnknknnnnknkkkkknknkkkkkkkkkkkknnkknnnnnnnknkkkkkknnnknnkkknknnknnkkkknknkkkknnknkkkknkknnnnninnkkkkknkkkknknknkknkknkknkkkknnnnknkkkknnkknnnkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkknghhhhhhhhhhhhhheeesrvhhhhoeeinnxtwadppcawtikkkkkkknkknnknknrhhhhhhhhhhhhhhoeeeeeejp`uxnnnnnrqhhwxknnknnkkkkixwapdauinnknknkkknknnniirnikkknkknnniirrggsgikknnnknnkknkkknirrrgsggnnknkknknkkkkkknkkkknkkkkkkknknknirrbsssbnnnnkkkknnnnniiiikkkkkkkkkkknnknnnkknknnnnnnirrrsssggrnnnkkknkkknknnknknnkknkknrrrbsgsgrnnnkkkknrsgrkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnkkknnknnhhhhhhhhhhhhhhlewrvhhhhhelinnitwadppdawtinkkkknkkknkknknknghhhhhhhhhhhhhhoeeeeeejd`tiinknrshhhetkkkkkkkkknnxwcdd`uiknknnnnniiirrrssvqsikkkkknkrrgvhhhhhhminknknknknnknrbmqhhhhhhmiknknknknnnknkkknnknkkkkkkkkirrsvhhhhhhqgkknnrrrgssgssvmsnknkkknkkkknnnkkkknknknirbsmqhhhhhhhfsrkkkknkkknknnnkknknnnrbmfhhhhhhhfsrnnknrghhhtkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkknnfhhhhhhhhhhhhhoprvhhhhheennnxtwaddpdawxiinkkkkkknknknkknnrmhhhhhhhhhhhhhheeeeeeejcwxinnkirqhhoekkkkkkkkkkknxuaccwxrrrrrrssssvvfhhhhhhlankkkkirgqhhhhhhhhhqxnnknknkknrbmhhhhhhhhhhhgknkknnkkknknnkkkknkkkkkknrrsqhhhhhhhhhhfnkrshhhhhhhhhhdakknkkknkkkknnnknkkknrrgvhhhhhhhhhhhhhhmnknknnknknknnnkknrbmhhhhhhhhhhhhqvsbrgqhhoekkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnknknghhhhhhhhhhhhhhrshhhhhelinnitwacppdawxinnnnkkkkkkkkkkknkkrfhhhhhhhhhhhhhheeeeeejpcuxinnirmhhhopkkkkkkkkkkknit`aaugvfhhhhhqhhhhhhhhhhhetnnknrrvhhhhhhhhhhhhhinnnknnnrsqhhhhhhhhhhhhhwknkknknknkknknknkknkkkirsqhhhhhhhhhhhhhdnrfhhhhhhhhhhlakkkknkkknkkkknnnnnirgfhhhhhhhhhhhhhhhhhfnnkkknknnknknknrsqhhhhhhhhhhhhhhhhhhhhhhodkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkrhhhhhhhhhhhhhhshhhhheeinnituadppdawtinkknwctkkkkkkxkkkknrhhhhhhhhhhhhhhoeeeeeejp`uinnnrghhhhlankni`dxkknknixw`wxshhhhhhhhhhhhhhhhhhljnnnnibqhhhhhhhhhhhhhqonntnnirshhhhhhhhhhhhhhhhwcxnknknknknkkkknkknkrbvhhhhhhhhhhhhhhqhurhhhhhhhhhhhexkknxcwkkkkkkkkkknrbmhhhhhhholeedqhhhhhhhqnnnnknknnnnnnrshhhhhhhholeeelhhhhhhhhhhlckkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknnknnvhhhhhhhhhhhhhhhhhhlexnnixwacdpda`uxnnkkkukknkkkkiwknkkrghhhhhhhhhhhhhhleeeeeejdwxinnrrqhhhhexkniiiiwnkkknnxtutxghhhhhhhhhhhhhhhhhheanknrrqhhhhhhhhhhhhhhho`i`iirvhhhhhhhhhhhhhhhhhlpnknnwdpaknnknkknknrbqhhhhhhhhhoeeehhhhvshhhhhhhhhhoennknnkukkkkkkkknnrsqhhhhhhhlepuxnshhhhhhhhonknnknnknknrgqhhhhhhhledunkiwfhhhhhhhhlwnknnknkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknnmhhhhhhhhhhhhhhhhhlecxiitu`ddpdawtxnnkkkkunkknkkk`kkkkkrvhhhhhhhhhhhhhheeeeeeejpwtnxrbqhhhhoeuinxttt`nnnkknnxxixrcllhhhhhhhhhhhhhhhetiurbqhhhhhhhhhhhhhhhhhjtxwrshhhhhhhhhhhhhhhhhhoaxinnnkuknknknxtxnrshhhhhhhhhheecxxumhhvvhhhhhhhhhhljtxiiinwknknnkttirshhhhhhhhledtnirmhhhhhhhhhpxnnitiutnnrqhhhhhhhoewnniituxvhhhhhhheuniixxinknknkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkkkkkkkkknkkrhhhhhhhhhhhhhhhhlepwtttu`cpddawuxiinnkkktknkknnkwkkkk`rqhhhhhhhhhhhhhheeeeeeejduxrrsqhhhhhlpudtuw`wainnknknnninxwccashhhhhhhhhhhhoextrbqhhhhhhhhhhhhhhhhhhewurshhhhhhhhhhhhhhhhhhhodttxnnnunknknnuturshhhhhhhhhheedwxtuwfhqhhhhhhhhhhhedacxtttwinnkndubrvhhhhhhhhledw`crbqhhhhhhhhhld`xxaauuwrshhhhhhhhepuiitu`c``qhhhhhhexix`wuuinnininnkkknkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknnkknkkkkkkniqhhhhhhhhhhhhhhlejd`wuwacdpdawtxinnnnknktknnkknkunnnxibhhhhhhhhhhhhhhoeeeepdcwtrrgfhhhhhhhl`iiaw`awainnnkkkknknknwnnrhhhhhhhhhhhhljubbqhhhoelvhhhhhhhhhhhhecrghhhhoeeqhhhhhhhhhhhhojawutxnuknknkna`rghhhhhhhhhoee``ju```shhhhhhhhhhhhoew`awwwuainnnunirvhhhhhhhhoedwwwprmhhhhhhhhhhopjtxwnnntrqhhhhhhhhetwuww`adccshhhhhoeutu``wttnkikkkkkknkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkknkknknknkkkkknshhhhhhhhhhhhhoeeedc``adppda`txinnnkkkkntkknnknnunknuishhhhhhhhhhhhhhsrbrrrsssmvhhhhhhhhhhetitaacc``innknknkkknnnukkrhhhhhhhhhhhhedgrfhhhlectbhhhhhhhhhhhoegbqhhheecitmhhhhhhhhhhhoepcautiwnkunkwirshhhhhhhhhhleaaadacpdshhhhhhhhhhhhlecddccawaxnnntirvhhhhhhhhhedc`aa`rhhhhhhhhhhhoep`u`xnntghhhhhhhhhex``ccdppddwfhhhhoea``ccawunniknkkkknknkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkknkknkkghhhhhhhhhhhhhheeejpccddddawuxinnnnnnkkkukkknnknwnnnnrfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoeitcccda``inknknknkkkkkunirhhhhhhhhhhhoecrvhhoeecxirhhhhhhhhhhhocrfhhheexnnbshhhhhhhhhhhlejjdauxwnkuknwrshhhhhhhhhhoejw`adpjlashhhhhhhhhhhhejjjejjd`axnnnrrvhhhhhhhhheexp`wa`shhhhhhhhhhhoepdaaxnnbshhhhhhhhhewdcpjjjjdcamhhhhoedddpdcwunkxkkkkkknkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkknknnkkkknkrqhhhhhhhhhhhhhleejjppppdcwtxnknkknkkkkkukkknknnwiknkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhlpdjacdpjjpd`kknnnkkkkwcddgshhhhhhhhhhhlershhheedpxtbhhhhhhhhhhhorshhheeuinnrmhhhhhhhhhhhleeejdppddddnkrbqhhhhhhhhhhed`pjejjeewshhhhhhhhhhhheeeeejjejppdnnrvhhhhhhhhhoeutwpjlcshhhhhhhhhhhoejjpjdxtgvhhhhhhhhhljjejljjjpp`ghhhhlepjjejcawnxxknkknkkknkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknknkknnnkkknnmhhhhhhhhhhhhhoeeeejjjdc`txnnnnnnnnnkkkwunkkkknk`nnrghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhewuwcdpdauxnnnnkknknnkkkkkimhhhhhhhhhhhegbhhheedwtirshhhhhhhhhhhsghhoeeauxxwrfhhhhhhhhhhheeeejpcwxnnnnirqhhhhhhhhhhlewadjjjeljsvhhhhhhhhhhhleeeeeejdatikkrshhhhhhhhhhepu`adpjpshhhhhhhhhhheeejpc`tirvhhhhhhhhhhjjjeejdawttrfhhhljjjejpdwxnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkknkkknkkkkghhhhhhhhhhhhhheeeejjpcwuxinknkknknkkkkxuinkknknnnkrmhhhhhhhhhhhhhhlelllloohhhhhhhhhhhhoewwcpjjdatxnkkkkknkkknknkkrvhhhhhhhhhhodrfhheejcwtxrmhhhhhhhhhhhrqhhlejawxtubhhhhhhhhhhhheeeeejd`tnkknrvhhhhhhhhhhoeccdjeeejjpbvhhhhhhhhhhhleeeeeejc`tinrbhhhhhhhhhhoeu`cpjjljahhhhhhhhhhoeeeeepawxivhhhhhhhhhhoeeejpawtxiimhhhejjeeepcwxnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknknkknkkkrqhhhhhhhhhhhhhleeejjc`uxnnnknnnnkkkknnnknnkkkknknnrfhhhhhhhhhhhhhheeeeeeeelllhhhhhhhhhol`cpjjjd`tiknnnkkknknknkknrhhhhhhhhhhhorshhlelpauxxrfhhhhhhhhhhmmhhleepcwtxrmhhhhhhhhhhhoeeeeejd`txnnrshhhhhhhhhhhejcpjjeeejpcrqhhhhhhhhhhheeeeeejjcwxnirqhhhhhhhhhhep`cpjeejpdvhhhhhhhhheeeeejjcwtrvhhhhhhhhhhqeeejd`tinnnshhheadjejpcuxnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkknkknkkkkkrvhhhhhhhhhhhhhoeeejpauxinnnnkkkknkkkknnnnknkknnnknrhhhhhhhhhhhhhhoeeeeeeepc`uaqhhhhhhhljdpjljjcwxnnkknknkkkkkknnnshhhhhhhhhhhbghhoeejd`uxtbhhhhhhhhhhhshhoeeepcwutrfhhhhhhhhhhhleeeeejpatxnnbqhhhhhhhhhhoedpjeeeejpcurhhhhhhhhhhhoeeeeeeedauinrmhhhhhhhhhhoecdpjejejd`ufhhhhhhhleeeeeejd`tifhhhhhhhhhhhheejcwtinkkkhhoe`cjjepauinkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknnknknibqhhhhhhhhhhhhhheeejc`tinkkkkkkkkkkknnknknnnnkkknnishhhhhhhhhhhhhhleeeeeeejdawwuvhhhhhhejpeeelpcwxnnknkkknknknknkrmhhhhhhhhhhqrhhheeepcwutrshhhhhhhhhhfqhheeejpawugbhhhhhhhhhhhheeeeeejd`uinrmhhhhhhhhhhhlepjeeeejjd`bshhhhhhhhhhhleeeeeejdwtirbhhhhhhhhhhhlecjjeeejpawxicooooleeeeeeeejd`tishhhhhhhhhhhhpejdwxnnnnkneejwapjjd`tinkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkknknnknkkkkknkkirvhhhhhhhhhhhhhhhleejdwxnnkknkknnkknnnnkknnknknkkkkrvhhhhhhhhhhhhhheeeeeeeejpdaaashhhhhoeeeeeejpauinknknkkknkkkkknrfhhhhhhhhhhmmhhleejdauturvhhhhhhhhhhqhhoeeeepd``tshhhhhhhhhhhheeeeeejp`tirghhhhhhhhhhhoejjeeeeejdauxmhhhhhhhhhhheeeeeeepcwxnrfhhhhhhhhhhhepjleeejpcwxnkkncppleeeeeeeejdwtibhhhhhhhhhhhhhjjd`xnkkkkknnit`dpjd`tnnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknkkkkkkrrvhhhhhhhhhhhhhhhhleejd`tnnkkknnknnkkknnkknnnnnnkkkkrqhhhhhhhhhhhhhoeeeeeeejjpdddc`vhhhhleeeeeejd`tnnnkkkknkknknkknrhhhhhhhhhhhshhoeeejdawwwrhhhhhhhhhhhhhoeeeejpda`rfhhhhhhhhhhhleeeeeejdwtirfhhhhhhhhhhhlejeeeeejpawxrvhhhhhhhhhhoeeeeeeepauxrghhhhhhhhhhhlejjeeeejd`uxinnnntwcpeeeeeeejdwxnrhhhhhhhhhhhhhhjp`unnknkknknxucppcwtnnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkknknkkkkirvhhhhhhhhhhhhhhhhhheejp`uinknkknnknnnkknkkknknknnnknbhhhhhhhhhhhhhhoeeeeeeejpdcccc`mhhhhleeeeeepcwtiknknknnkkknkknnshhhhhhhhhhffhheeeepdaw`gghhhhhhhhhhhhhleeeejjdcwbhhhhhhhhhhhhleeeeeepcwxrghhhhhhhhhhhoeleeeeeepc`xxrhhhhhhhhhhhleeeeeejd`tirfhhhhhhhhhhhlejeeeeepcwtinnkinxwcpjeeeeejpawxnnmhhhhhhhhhhhhhhjcwxnkknkknniu`ddcuxnkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkknknkknkkknrvhhhhhhhhhhhhhhhhhhheeepcuinnnkkntknnnknnkkknnknnkknimhhhhhhhhhhhhhhleeeeeeeejcwwwaushhhoeeeeeejepwxnnnknknknnknkkkrvhhhhhhhhhhqhhleeeepca``bmhhhhhhhhhhhhoeeeeejppdbmhhhhhhhhhhhoeeeeeeejawxrfhhhhhhhhhhhleeeeeeejpauxrghhhhhhhhhhheeeeeeejdwtrghhhhhhhhhhhhejeeeeejdauinnknnixuadjeeeejjd`uinkrhhhhhhhhhhhhhhqd`uinkkkkkkitwac`uinnkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknnknnrshhhhhdfhhhhhhhhhhhhhoeejc`xnnknkainnnnnkkikkkknkknkurvhhhhhhhhhhhhhheeeeeeejdawuttwbshhhoeejeeejdcuxnkknknknkkkknknrqhhhhhhhhhhhhheeeejpcaawrqhhhhhhhhhhhhleeeeeljjarqhhhhhhhhhhhoeeeeeejpaurghhhhhhhhhhhheeeeeeeepcwxirmhhhhhhhhhhheeeeeeepcuxrmhhhhhhhhhhhleeeeeeepdwxinnnkknitwcdjjjjpd`uxinnnmhhhhhhhhhhhhhhqcwxnnnnknnnxu``wtikkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkkkkknrshhhhhljmhhhhhhhhhhhhhoeejdatinknkanknnnuunkkxxknuini`rhhhhhhhhhhhhhhoeeeeeejed`tiiwwishhhljjjeeejdcxinnnkkkkkiuxukuighhhhhhhhhhhhhoeeeeejcaagghhhhhhhhhhhhoeeeeeejjjwghhhhhhhhhhhheeeeeeejd`trfhhhhhhhhhhhoeeeeeeejpauxnrqhhhhhhhhhhleeeeeejd`uirhhhhhhhhhhhhleeeeeejpawxnkknkknnxuwccdddcautinkkkrqhhhhhhhhhhhhhhpauxnknkkknixuutxnnkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknknknknrshhhhhletrhhhhhhhhhhhhhheeepcuxnkkxxknnkwutwkntwnnutnnsghhhhhhhhhhhhhhoeeeeeeejd`xinuanshhhedppjejpccxnnnnnnnknna`waubmhhhhhhhhhhhhheeeeejepcabmhhhhhhhhhhhhleeeeeejjdbmhhhhhhhhhhhheeeeeeejcwrbhhhhhhhhhhhheeeeeeeejcwtinghhhhhhhhhhhleeeeeejdwtrshhhhhhhhhhhheeeeeeejcatinnkknknnnitu``a`wuxinkkkknghhhhhhhhhhhhhhqp`tinknkkknnxxinnkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkknknknkkkkkknkkkkkknkkrshhhhhleukrqhhhhhhhhhhhhhleejc`tnnkukkknn`da`kknunknuknrmhhhhhhhhhhhhhhleeeeeejpwxinnntishhheuccjjjpacinknwdddd`ktukukrvhhhhhhhhhhhhleeeeeejec`rqhhhhhhhhhhhoeeeeeeelparqhhhhhhhhhhhleeeeeejpawrmhhhhhhhhhhhheeeeeeejpauiirmhhhhhhhhhhheeeeeeejcwxrvhhhhhhhhhhhoeeeeeejpautinknknkknnnnxtttutxinnkkkkkkfhhhhhhhhhhhhhhhd`tnnnknknnnnnnkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknknrbqhhhhleuknnmhhhhhhhhhhhhhheejpauinkuknkkutnnwnknunkkunkrfhhhhhhhhhhhhhheeeeeejjpwxnnnkunmhhlexcapjjd``inkknnnknknutkunrhhhhhhhhhhhhhleeeeejjjcughhhhhhhhhhhhleeeeeeejpgghhhhhhhhhhhhleeeeeejd`trqhhhhhhhhhhhleeeeeeejc`tinrqhhhhhhhhhhoeeeeeejpauirhhhhhhhhhhhhoeeeeeejp`tninnkknknkknnnnxiiinnnnknnknknqhhhhhhhhhhhhhhjawtnknkkkknknkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkknknknkkkkkkknkkkkibqhhhhoe`knnxghhhhhhhhhhhhhheeepcwxiniuknk`kkiaknn`nnuuknrhhhhhhhhhhhhhhoeeeeeejdduinnknukgqhlan``dppcw`irikknnnnnnuuktnshhhhhhhhhhhhoeeeeeejjdabshhhhhhhhhhhheeeeeeeejdbmhhhhhhhhhhhoeeeeeeejc`bghhhhhhhhhhhheeeeeeejpcuxnighhhhhhhhhhhleeeeeejd`uighhhhhhhhhhhhleeeeeejc`tnkknknkknkknkkknnnnnnnnnknknkkrqhhhhhhhhhhhhhhjautnknkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknrbqhhhhoedniniusfhhhhhhhhhhhhhleepc`tinnakkkidcuwwnnicdxdtishhhhhhhhhhhhhhleeeeeeejjpankucddcadejppjjddjpdbsqmnkkknnxd`kdrmhhhhhhhhhhhhleeeeeeeec`rfhhhhhhhhhhhlleeeeeejd`rqhhhhhhhhhhhoeeeeeeepaurshhhhhhhhhhhheeeeeeejd`tinrmhhhhhhhhhhheeeeeeejc`trshhhhhhhhhhhheeeeeeepcuinnkknkknknnnkkknnknknknnknkkkknshhhhhhhhhhhhhhod`uxnnkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknknkknkknkibqhhhhoednnixu`amhhhhhhhhhhhhhoeejd`uinnxxnkknknkkkknknknkrvhhhhhhhhhhhhhheeeeeeejcwxnnkkkkkknkknntwcdc`tibqhhcnkkkkknnnkrqhhhhhhhhhhhheeeeeeejpctbhhhhhhhhhhhheeeeeeeepdgghhhhhhhhhhhheeeeeeejdaurfhhhhhhhhhhhoeeeeeeepawxnnbhhhhhhhhhhhoeeeeeejpauirvhhhhhhhhhhhheeeeeejdatinnikknkkkkknknkkkkkknknnkknknknnmhhhhhhhhhhhhhhlc`tinknkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkirvhhhhhedkniiuwcdshhhhhhhhhhhhhheeepauxinnknkkkkknnkknknknnrqhhhhhhhhhhhhhheeeeeejpauxnnnknknkkknnnxwcdawxrvhhoeikkknknknnbhhhhhhhhhhhhleeeeeeejdabshhhhhhhhhhhoeeeeeeejparmhhhhhhhhhhhheeeeeeejcwxrhhhhhhhhhhhhleeeeeejp`uinrshhhhhhhhhhhleeeeeejd`uirvhhhhhhhhhhhheeeeeejdwtiknnnkkkknnknknkkkkkkkkknnnnkkkknnvhhhhhhhhhhhhhljcwtinkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkirvhhhhoejknnxuwcdp`fhhhhhhhhhhhhhleepcwtinnnnnknnkkkkkkknkknghhhhhhhhhhhhhhoeeeeeejd`tinknkkkkkkkknitwacaurshhhlpnknnnknknimhhhhhhhhhhhheeeeeeeepcwrfhhhhhhhhhhhleeeeeejjdwrfhhhhhhhhhhhleeeeeejpaurghhhhhhhhhhhheeeeeeejcwxinrqhhhhhhhhhhheeeeeeejdwtnrhhhhhhhhhhhhoeeeeeejcwxnknkknkkkknnnkkkkkkkknkknknnnnkknnifhhhhhhhhhhhhhedauinnkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknkkknknkkkrrvhhhhheliknit`adpdcshhhhhhhhhhhhhoeejdwtinnknknknknknknknnnishhhhhhhhhhhhhhleeeeeejdwtnnkkknnkkknknnxw`a`rbqhhhlwnnknnknnnrvhhhhhhhhhhhheeeeeeejdatbhhhhhhhhhhhoeeeeeeljpatbhhhhhhhhhhhheeeeeeeedatishhhhhhhhhhhoeeeeeejpawiirmhhhhhhhhhhhheeeeeeepcwxnrhhhhhhhhhhhhoeeeeejpawxnknnnknkkkkkkkkkknkkkrsrkknknnknknnbqhhhhhhhhhhhhejd`tinkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknnrvhhhhheennnixuadpdcabhhhhhhhhhhhhhheejdatinnnnknkknknknnnkknrfhhhhhhhhhhhhhheeeeeeepawinnkknknkknnnnnxtw`brfhhhoexknnninnnnrhhhhhhhhhhhhleeeeeeejcwrshhhhhhhhhhhoeeeeeelpcwbshhhhhhhhhhhheeeeedejdwtrmhhhhhhhhhhhoeeeeeejd`uiirqhhhhhhhhhhhoeeeeeejp`txnrhhhhhhhhhhhhoeeeeejd`tnikknkknnrnkkkknknkkknbhhmnkknnknkknishhhhhhhhhhhhljjcwxnnkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknrmhhhhhllnnnituacpdc`urhhhhhhhhhhhhhhleepcwxnkknnnnkknknkknnnnrhhhhhhhhhhhhhhoeeeeeejpatinkknnkkknkkknnnxtxrvhhhholnknnixxinishhhhhhhhhhhheeeeeeejpaurvhhhhhhhhhhheeeeeeljpaurvhhhhhhhhhhhleeeejrsaawxrvhhhhhhhhhhhleeeeeejc`tnrshhhhhhhhhhhhleeeeedddwtnnrhhhhhhhhhhhhoeeeeejdwxxnnkknnnrghgkkkkknnkkkshhhcnkknnnnknnimhhhhhhhhhhhoejpawinkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknnrshhhhhleunnixwacppc`uxrmhhhhhhhhhhhhhleejd`tinkknknknnnnknknnishhhhhhhhhhhhhhoeeeeeejd`xinkkkknkknnknnnnnrrvhhhhheannnxxtxinrmhhhhhhhhhhhoeeeeeeejc`xrhhhhhhhhhhhheeeeeeljc`trqhhhhhhhhhhheeeeebghhctirvhhhhhhhhhhhleeeeeepauxibqhhhhhhhhhhhheeeeelrsswinkrhhhhhhhhhhhhoeeeeejcwxnnkkknkrbqhhfkkknkkkknshhhenkkkknkkknirqhhhhhhhhhhoeejd`tnnkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkrshhhhhleunnituacpdd`wxnnshhhhhhhhhhhhhheejpauxnnnkkknknnnnkknkimhhhhhhhhhhhhhhleeeeeejcwxnnkknnnkknnknknnirvhhhhhhexnnxuwwuxirfhhhhhhhhhhhleeeeeejjawrshhhhhhhhhhhleeeeeelpawrbhhhhhhhhhhhheeeearqhhl`iivhhhhhhhhhhhleeeeejp`wrrmhhfhhhhhhhhhheeeeegbhhfikkiqhhhhhhhhhhhheeeeejcuxnknkkkirfhhhldkknkkkkimhhhlnnnnkknnnknishhhhhhhhhhoeejpauxnkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknrshhhhhletnnixwaddpc`wxiknrhhhhhhhhhhhhhheeejcwxnnknknknnnnnnknnrfhhhhhhhhhhhhhheeeeeejpaunnnnnnknkkkknkkkrrvhhhhhhoennxtwaawxibhhhhhhhhhhhheeeeeeejdaurvhhhhhhhhhhheeeeeeejpaurshhhhhhhhhhhoeeejrmhhoeunivhhhhhhhhhhhleeeeejd`trshhmhhhhhhhhhhoeeee`rqhhlcnnnvhhhhhhhhhhhheeeeepawxknnkkirvhhhoe`kkknkkkrvhhhounknnnkknnnnrqhhhhhhhhhoeeejdwxnkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknrshhhhhoeannixw`cppdauxinkkifhhhhhhhhhhhhhoeejd`txnnnnkknknknknknbhhhhhhhhhhhhhhoeeeeeeedaunnnkknkkkwcxnnirbqhhhhhhhldnitwacawtrghhhhhhhhhhhheeeeeeejcwxrhhhhhhhhhhhheeeeeeejcwtrmhhhhhhhhhhhleeegghhhedinivhhhhhhhhhhhleeeeejcwrbqhhshhhhhhhhhhleeecrvhhoe`kknmhhhhhhhhhhhhoeeejpauinkkknrshhhhepnnkknnnkrfhhhhdniiiinnnknnnshhhhhhhhhleeejpatikkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkknkkkkkkkkkkkkkkkkkkinrshhhhhhejknixu`cpdcawtinknknfhhhhhhhhhhhhhheejpauxnnkknnknknnnknimhhhhhhhhhhhhhhleeeeeejd`tinknnknknkntnrrshhhhhhhhheuitucpdauxrfhhhhhhhhhhhleeeeeejpaurghhhhhhhhhhhoeeeeeelpcwxrvhhhhhhhhhhheeebbqhhleunnnmhhhhhhhhhhhheeeeeparbqhhvmhhhhhhhhhhleepbshhhepnnkkghhhhhhhhhhhhheeeepauxnkkirshhhhlenknnnknnnrhhhhhjixttxinknknnghhhhhhhhheeeeepawxnkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkknkkkkknnnkknrrghhhhhhoeitxxu`ddpdawwuxkkktrshhhhhhhhhhhhhhoeepcwxinkkntxuntinknrfhhhhhhhhhhhhhhleeeeeepcwxnnittnknnnnrrgfhhhhhhhhhoewwuapjjdairhhhhhhhhhhhhleeeeeejd`trmhhhhhhhhhhhleeeeeejdauxrfhhhhhhhhhhheebbqhhoeaxnnkshhhhhhhhhhhhqeeej`rbqhhorvhhhhhhhhhhleprshhhletnknkiqhhhhhhhhhhhhqeejp`tinnirvhhhhleukkniniiinrhhhhhhutuuuxinnnknrhhhhhhhhheeeeejcwxnkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkknnnxkkktnixikirvhhhhhhhopawtu`cppdcwuwuwxnktxshhhhhhhhhhhhhhhjejd`tinnkn`uw`t`nkrghhhhhhhhhhhhhhhleeeeejpcuxikutuwnknirgfhhhhhhhhhhhlj`p`djjpcwrghhhhhhhhhhhheeeeeeejcwxrqhhhhhhhhhhheeeeeeejdwtirhhhhhhhhhhhhvrbqhhoejtnnnirhhhhhhhhhhhhhvmwrrmqhhoerhhhhhhhhhhhfsrshhhleannnnnimhhhhhhhhhhhhhfcppatiirbfhhhhoewnnnixtutxighhhhhhjw`awtnnnnnnrhhhhhhhhleeeeejd`tikkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkknnkkkkininitrbvhhhhhhhhhdxwuwcppdcwtx`cutnnnrshhhhhhhhhhhhhhhqplddpcccwkxtkuntnirfhhhhhhhhhhhhhhhleeeeeejjdtnkwawtirrsfhhhhhhhhhhhhhed`adpjjcwxrmhhhhhhhhhhhoeeeeeejpauighhhhhhhhhhhoeeeeeejpcuxirhhhhhhhhhhhhhvhhhhleaxiknxtvhhhhhhhhhhhhhhvvhhhhheprhhhhhhhhhhhhvfhhhoepxiknnxxxqhhhhhhhhhhhhhqsgrrbsfhhhhhoednnkixww`uxrshhhhhhqaacauinnknighhhhhhhoeeeeeejd`xinkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkknnkkxnnirrgqhhhhhhhhhhmt``cdppc`uxwikntknirfhhhhhhhhhhhhhhhhqscawxnkkkxtktnxrrvhhhhhhhhhhhhhhhhqcpeeejc`xiitrrrbsvhhhhhhhhhhhhhhhoewcjjjjjawxrfhhhhhhhhhhhleeeeeejc`trmhhhhhhhhhhhleeeeeejdatinrhhhhhhhhhhhhhhhhhledwxinxtwshhhhhhhhhhhhhhhhhhhhelirhhhhhhhhhhhhhhhhoejuxinixtuushhhhhhhhhhhhhhhhhhhhhhhhhoecnknitu`aawtrshhhhhhhqddcwxnknnrfhhhhhhhleeeeeejd`tnnkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkknkkxrrgvhhhhhhhhhhhhhfgbuppc`uxiunirrrbsfhhhhhhhhhhhhhhhhhhhfsbrinknxxirrbsqhhhhhhhhhhhhhhhhhhqmsrrrrrrgsgmvqhhhhhhhhhhhhhhhhhhoe`djejejatxbhhhhhhhhhhhheeeeeeejcwtrfhhhhhhhhhhheeeeeeejcwxnnifhhhhhhhhhhhhhhhlejauxiiuw`wqhhhhhhhhhhhhhhhhhhlexkifhhhhhhhhhhhhhhheeauxxixww`wumhhhhhhhhhhhhhhhhhhhhhhhoedkkiixu`cca`trvhhhhhhhhmcd`tnnnrshhhhhhhleeeeeeejd`xnkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkknkkkkniinkkkngqhhhhhhhhhhhhhhhhhhqhpauxnktarvqhhhhhhhhhhhhhhhhhhhhhhhhhhhfskiaurvhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhejejeejjdddgshhhhhhhhhhhoeeeeeejpaurbhhhhhhhhhhhoeeeeeeepcuinknmhhhhhhhhhhhhhhleed`uxitu`awgqhhhhhhhhhhhhhhhhlewnnkmhhhhhhhhhhhhhheep`txxxuwa`wtimhhhhhhhhhhhhhhhhhhhhhlednnkxxu`cccauxrvhhhhhhhhhfgubrrbmhhhhhhhlejjeeeeejdwtnkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkknghhhhhhhhhhhhhhhhhhhhhj`tinkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhowkkkrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhejjeeejjcuxrvhhhhhhhhhhhleeeeeejd`tishhhhhhhhhhhleeeeeejd`uxnnknhhhhhhhhhhhhhleejd`uttw`aawxshhhhhhhhhhhhhhheeaxnniiqhhhhhhhhhhhoeeedautttwaawuxinahhhhhhhhhhhhhhhhhhoeeunnnixuwaccawtirqhhhhhhhhhhhhvvfhhhhhhhhlepdjeeeeepcuxnnkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkrhhhhhhhhhhhhhhhhhhhhhewxnkkkkkhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhodnkkkhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhoejjeeejpauxnhhhhhhhhhhhheeeeeeejcwxivhhhhhhhhhhheeeeeeejd`tnnknkrhhhhhhhhhhleeeejdawuw`aawuxiwhhhhhhhhhhhhoeecwttxtuwhhhhhhhhhhleeejpawuw`aa`wtnnnn`ohhhhhhhhhhhhhholejxnnnxtu`cddawuxnrhhhhlllohhhhhhhhhhhhhhlee`wcjeeeejdauinkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkteeeeeeeeeeeeeeeeeeeeewxnnkkknkeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepnnnkkeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejd`tinneeeeeeeeeeeeeeeeeepauxnkdeeeeeeeeeeeeeeeeepcuxnnknknnoohhhooleeeeeeepcaaaaa`uxnnnxoohhhhhholeeejda`www`adohhhhhhoeeeeeepdaa`acawtxnnnnitplohhhhhhhhoolee`tttttu``ccdc`txinihhhel``dllohhhhhhhholeeaixwdjeeeejcwxikkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknnnixuwadpeeeeejdwtinnnkkkkkknknnniixwapeeeeeeeeeeeeepc`txinnnnknknnkniiuwcpleeeeeeeeeeelpawxinnnnnnnnixxxxuuw`adpjjeeeeeeepcwtnknknnnniuadleeeeeeejp`tinkkknknixwdjeeeeeeejd`uinnkkknkn`peeeeeeeeeeeejpddccawtiiknniclllleeeeeeeejpccccccccpllleeeeeeeeejpdccca`uiiknknnxwajeelllleeeeepc`wwww`acddda`utnnnnglejxnxwdjeeelllleeed`knit`djeejjdauxnnkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknknnixuwadjjeeeeejdawtxinnnkknkknnnixtu`cpleeeeeeeeeeeejpc`uuxiinnnknnnixuwapjeeeeeeeeeeeeejc`utxiniixxxxtuuw`acdppjeeeeeeeejpatxikknkkkniuapjeeeeeeejdwtnnkkkkknit`djeeeeeeejd`tnnknnknknniuapeeeeeeeeejjjdcawtinnknnixwcleeeeeeeeeejjpppdcawuucpjeeeeeeeeejjpdc`uxinkkkknitwcpjeeeeeeeeejppdcccddppdc`uxinkkkiuuxnit`djeeljjdc`iinnnnxwcpjeejpawxnnkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknitw`cpjjeeeeeejjda`wtxnnkkknknixtuw`cpjeeeeeeeeeeeeeejpca`wutinnknnitw`cdjjeeeeeeeeeeeeejpcawwuuuuuwww``acddpjjjeeeeeeeeejd`tinnknkknnxucpeeeeeeejpcwinnkkknkiiuadjeeeeeejjawxnnkkknknknitadjeeeeeeeeejpdcwtinnknkkniu`djeeeeeeeeeeljjpdawttxuadjeeeeeeeejjpc`utinnknkkknitwcpjeeeeeeeeeejjjjjpjpdc`tixnknnnknkkkxtadjjeejpd`wuxxxxxw`djjjjpcwtinkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkknkixuacdjjjejeejejjddaawtinnkkknnxtw`acdpjejeeeeeeeejejjjjpdaa`utinnnitwacdpjjeeeeeeeeeejejjjddcaa`a`aaacccddppjjejejeeeeejjpcwxnknkknnknxwcpjeeeejejd`tinkkkkknnxuapjjeeeejjdauinknkknkkknixwcpeeeeeeeejjpa`txnknknknnnxwadjleeeeeeeejjpdawtiiitwcpeeeeeeeejpcauxinknknknknnxtwcdjjeeeeeeeeejjjjjpcawuxikikknknknnnitapjjjjjppcawuuuuwacpjjjda`txnnknkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknntw`cdpppjjpjpjppddca`uxnnkkknixu`acddpppjppjpppjpjjjpppddcaawtxnnnxu`acdpppppppppjppjjpjppddccaccacccccddddppppppjppppjpdc`txnkkknkknnxwacpppppppdcwxinkkkknknxuacpppppppdawxinknnkknkknnxuacpjejejjjpcautinknkkknknnxxwadpjeeeejejjpd`wxinnniu`cpjeeeejjpc`utnnknkkkkkknnnxtwacppejeejejeejjpdcawuinnkkknknknkknxu`dppppddddcca```ccdpppcawxxnkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkknnxu`aaaccacccacacaaa`wtinkknkknitw`aaaacaacccccacccaccacaca``wtinnnitw`aaaaacacacaccccccacaaaa````a`aaaaaaaacccacaccdcacaawuxnnkknkknknxuwaaccccaa`wuinknkkkknnitwaaccccacawtinknknknnkknnnxu`cdpppddcawuxinnkkkkkkknnnitw`ddppjjppdda`uxikkknnxu`ddppppdcawuxnnknknnkknkknnnitu`acdppjjjjpppdc`wuxinnknkknkkkkknnit`cccaaaaaccccccacdcccawuxinkkkkkknkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknixtuuuuuwuuuwuuuuuuttxixkkkknnixttuuuuuwuuuuwuwuuuwuwuwuuuuttxnnnnxattuuuwuuuuudauuutuuwu`uuuuuuwuuuac`cuwuawuuuwuwawwuutxxnnnkkkkknnnnxcwuuuuuuuttinnkkkkkkknnactuuuuu`ctxxii`iwikknkkknnixuw`aaa``wutxinkkkkkkkutkkknixuwaaccccaawutxnw`ikkkixu`acdccawuxinnnkkkkknknki`kknnxxuwaadccccca``wuxinnnkkkkkkknnknkkitu``wuuuuww```aaaaaa`wutxiknkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkknnixxxxxxxxiiiiiiixinnwnkkkkknnnniiiiiixixixxixixiixxxxxxxxiinnknnntiiixxxixxxxpxxixxiii`txxxxiuwixiucupixiiwixixixwiixxiinkkkkkkkkkknnniuxxiiiiuiinnkkkkkknkknntiixiiuxiatnnkdndxkknknkknnnxxtuuuuxxxinnnkknkkkkkxknkkknuxuuwwwwuuxxinnknxkkknnixuuwwuutxnnkkkkkknknkkkkxnknknnittuwawwwuuutxinnnkkkkkkkkkkkkkknnixuttxiixxttuuwwwuuuttxinnkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkknnknnnnnkninnnknnnnnkwkknknxinkntnxxinnxxnxtknnnnttnnnxxxtiknkkixnxnnnnnnnnnnuunnnnknnnwnnnnnnunnnnt`icnnnnunnknknitnnnknkknkkkiinxxknnnxxtnnniwxxxnkxixninnkkkxnnknkxnnnnknkck`nknkkknkknknnniiiiinnnkknkkknkkkkinxnkniwtuwtxututitnnkkkxnkkkknnixiutuxixknkkixnkkknxxnxkknnxxnniix`xxxxiinnnnkkkkkkkkkkkknkkkkkniininnnnnniixxxxxxiinnknkknkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkknkknknkknkknknkkkkkkkkiikkkkxxxtkkxwuxttknu`xx`kkxuxxwnkiwtxtiknxtxuwkkkkknkkknunkkkknkkiiknnnnntknkknukukkkkktkkkkkntkkkkkkkkkkkiuwxxwkkk`xxukknuxxnkkxwxwxtiknkxkkkkkiwinkkkk`kukknkkkkkkkknknnnnnknknkkkkkkkknkkutxtnknutttnntwtwxxtkkkkikkkkkknnnnx`xwxxxkkutxuxnkitxuwkkxuxiwnnnnxxnnnnnnnkkkkkkkkkkkkkkknkknknnnnknkkknknnnnnnnnnnnknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkxkkkkktwutkkktkkktkktkkknxnuixxtukkikkkxkkxkkktnnknkkknkkkkknkknkkxkkkkkkkxkkkkkkkknknkktnkkkkkntkkkkkkkkkkktkkknxnkxkkxkkkxkkkkkkukxkkxkkkxkkkkkkkktikkkknkkkkknknkkkkknkkkkknkknknknknkkkkkikkkxkkxkknnnk`ktkkxkknkxkknkwuwwwikwkxkkiknnkkkxkktkkktkkuiixtukkkkxkkkkkkkkkkkkkkkknkknkkkknkkkknknkkkkknknkkknknknkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkxkkkkxnkkxkkktkkkxnktkkknikwiixiinkxkkkxkkxkkkikkkkknkkkkkkkkkkkknikkknknkxknkkknkknkknknukkkkkkwkkkkkkkknkktkkknikkxkkxkkkxknkkkkwkikkxkkkxkkkkkikknxkkkkkkkknkkknknkkkkkkkkkkkkkkkkkkkkkkkkxkknxkkxknkkknwkxkkxnkknxkkkkkkkkknkwkikkikxkkkkxkkxkkkxknuxiixnkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkknikkkxkknukkkwnknxkkutknukkttkkknkkxnnkxkktnkiwkknkkkkkkkkkkkkkkkknxkkknkntkkkkkknkkkknkktkkkkkknnkkkkiukkkkttkntkkkxkkikkktkkknkkukxkkxkkkxkkkkkttxxkkkknknkkknkkkkknknkkkkkkknwiknkknkkkkkkxkkkxkkinknnkkwkikkinkkkxnknkkkkkkkkukikkikktnknxkktnkiwkktxkkknknktkkkkkkknknkkkkkkkkkkkkkknknkkkkkkkknkknkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkktkkknuuixtkkituxkkkinutnkkkiuwiknxuikxukkktuxnwkkknknknkkkknkkkkkkukknkkktnkkkkkknkkkkkkntkkkkkkukkkkiukkkkinutnkkuuknuukkkuwuikuukxnkukxuuwuikkkkiknkkknkkkkkknkknkkkkkkkkkkknunkknkkkkkknxunkuuikkxwuxktuinxkxinwuuutkkkkkkkktuinxkxnkkuuxkkkkuuxnukknuuiknkkukkkkkkkkkkkkkkkkkkkknkkknkkkkknknkkkkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkknkkkkknnkkkkkkkkkkikkkkkkikkkkknkkkknkkkkkknkkkkkkkknkkkkkkkkkkkkknkkkkkniknknkkxkkkkkkkknknkkknnkkkkkikkkkkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknknkkknkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkxnkkkkkkkkkkknkkkkkkkkkkkkkknknkknkkkkknkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkuwtkkkkxwuknkkknkkkkknkkkkkkkkkkkkkkknkkknkknkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkxwunkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkknknkknkkkkkkkknkkkkkkkknkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknknkkkkkkkkkknknkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkknkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkknkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkknkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknkknkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkknkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkknkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkknnkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkknknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkknknknktixikkkxkkkkkkinkkkkkkkkkkkkkkkkkkknxkkkkkkkkkkkkkkkkkkkkknxnkkkkkkikkkkkixnxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkktikkkkkkkkkkkkkkkkkkkkktxkkkkknkkkkkkkkkkkkkkkkkkkkkkkkinkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkknkkkkkkkkkkkkkkkkkkxnkkkxixtkkkknkkkkkkikkkkkkkkkkkkkkkkkkkknkkkkkkknkkkkkkkkkkkkkkknkkkkkikkukkkntnukkkkkkkkkkkkkkkkkkkkkkknkkkknkkkknkkkkkknkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkknkkkkkkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkikkkkxnixkkkkikkkkkkiknkkkkkkkkkkkknnnkkknknkkkkninnkkknnnknkkkkknkkkkknkkkkkknxktkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkinikkkninnnkkininnnkkkknkkkkkkkkkkkiniknnkkkknikkkkknnknkkkknkkkkkkikkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkkknnkkknnnnnkkkkknkkkkkkikkkkkkkkkkknxnninkkninnnkkninnkkkinninikkkknkkkkkninkkkkkikikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxnnikkninnnkknxnxninkkknkkkkkkkkkkknxnxnnnkkxnnxnkkinnxnkkinniikkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkkikkkkkkikkkkkkkkkkknnnnnxkknkkknkkknkkkkknnknknkkkknkkkkkkkkikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkknkkkkkkxknkknkkknkkkkkxxxxxkkxknkknknkkkknknkkkknkkinnnikkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkkikkkkkkkkkkinnnnnkkkkkknkkknkkkkknnknknkkkknkkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkknkkknkkkkkkiknkknkkknkkkkkkkkkkkkiknkknknkkkknknkkkknkkinnnnkkkknkkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkknkkkkkiikkkkikkkkkknkkknkkknkkkkknkkkkkkkkknkkkknninkkkkkkkkkkkkkkkkkkkkkkkkkkkkikkkkkkkkkkkknkknkkknkkkkkkiknkknkkknkkkkkkkkkkkkiknkknknnkknkkknkknnkkxkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkkkkkkkkkknkkkkkkknkkkknnkkkkkiinkkknnknnnkkkinnkkinkikknkninnikkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkknikkkkkkkkkkkiikkiikkkninkkiiknnkiknninikkkkkkkkkinknkkikkkiinkkkkinnnnkkniikkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkknkkkkkknkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk", +"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" };
--- a/lisp/README Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/README Mon Aug 13 08:55:10 2007 +0200 @@ -80,19 +80,25 @@ Some packages are fairly large; those have been given their own directories: + auctex A package for editing TeX documents. + bytecomp The XEmacs-lisp compiler. calendar A calendar and appointment manager. + cl Common Lisp compatibility code. + comint General code for interacting with inferior processes, like shell buffers and lisp interpreters. - dired The directory editor. + custom User environment customization code. edebug A source-level debugger for Elisp. ediff A comprehensive visual interface to diff and patch. + efs The directory editor, remote FTP frontend. + electric The "electric" commands; these implement temporary windows for help, list-buffers, etc. @@ -103,7 +109,7 @@ eterm A merge of the comint shell mode with an ANSI-compatible terminal-emulator. - gnus An NNTP-based newsreader; version 3.14. + gnus A network news and mail reader. hm--html-menus Menu interface to html-mode. @@ -112,16 +118,35 @@ ilisp A comint-based package for interacting with inferior lisp processes. + iso ISO Latin language support. + + mailcrypt Package for dealing with PGP encrypted messages. + + mel MIME encoding library (part of the Tools for MIME). + mh-e An interface to the MH-E mail handling system. + mu Message Utilities library (part of the Tools for + MIME). + + ns NeXTStep support. + oobr An Object-Oriented class browser. pcl-cvs An interface to the Concurrent Version System. + psgml General purpose SGML editing support with extra + support for editing HTML. + rmail A BABYL-format mail reader. sunpro Additional code for interfacing with SunPro products. + tl Tiny Library (Part of the Tools for MIME). + + tm Tools for MIME. MIME support for emacs lisp based + news and mail readers. + tooltalk An inteface to the ToolTalk communication protocol. viper A full-featured VI emulator.
--- a/lisp/custom/ChangeLog Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/ChangeLog Mon Aug 13 08:55:10 2007 +0200 @@ -1,3 +1,23 @@ +Mon Mar 24 18:36:15 1997 Per Abrahamsen <abraham@dina.kvl.dk> + + * Version 1.67 released. + +Mon Mar 24 18:19:05 1997 Per Abrahamsen <abraham@dina.kvl.dk> + + * cus-edit.el (custom-save-all): Added autoload. + + * Version 1.66 released. + +Mon Mar 24 18:09:04 1997 Per Abrahamsen <abraham@dina.kvl.dk> + + * wid-edit.el (widget-default-delete): Added workaround for bug + with empty `:format'. + +Thu Mar 20 12:33:59 1997 Per Abrahamsen <abraham@dina.kvl.dk> + + * custom.texi (The Init File): Explain that `custom-file' is not + automatically loaded. + Tue Mar 18 14:42:31 1997 Per Abrahamsen <abraham@dina.kvl.dk> * Version 1.65 released.
--- a/lisp/custom/cus-edit.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/cus-edit.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: help, faces -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary: @@ -517,6 +517,7 @@ (custom-mode) (widget-insert "This is a customization buffer. Push RET or click mouse-2 on the word ") + ;; (put-text-property 1 2 'start-open nil) (widget-create 'info-link :tag "help" :help-echo "Read the online help." @@ -1763,6 +1764,7 @@ (unless (eolp) (princ "\n"))))) +;;;###autoload (defun custom-save-all () "Save all customizations in `custom-file'." (custom-save-variables)
--- a/lisp/custom/cus-face.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/cus-face.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: help, faces -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary:
--- a/lisp/custom/custom.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/custom.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: help, faces -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary:
--- a/lisp/custom/wid-browse.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/wid-browse.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: extensions -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary:
--- a/lisp/custom/wid-edit.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/wid-edit.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: extensions -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary: @@ -1077,7 +1077,9 @@ (inhibit-read-only t) after-change-functions) (widget-apply widget :value-delete) - (delete-region from to) + (when (< from to) + ;; Kludge: this doesn't need to be true for empty formats. + (delete-region from to)) (set-marker from nil) (set-marker to nil))) @@ -1967,7 +1969,7 @@ (setq children (cdr children))) (setcdr children (cons child (cdr children))))))) (widget-setup) - (widget-apply widget :notify widget)) + widget (widget-apply widget :notify widget)) (defun widget-editable-list-delete-at (widget child) ;; Delete child from list of children.
--- a/lisp/custom/widget-example.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/widget-example.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: help, extensions, faces, hypermedia -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ (require 'widget)
--- a/lisp/custom/widget.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/custom/widget.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> ;; Keywords: help, extensions, faces, hypermedia -;; Version: 1.65 +;; Version: 1.67 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ ;;; Commentary:
--- a/lisp/efs/efs-cu.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/efs/efs-cu.el Mon Aug 13 08:55:10 2007 +0200 @@ -359,6 +359,7 @@ (user-login-name)))) (efs-set-user host user))))) +;;;###autoload (defun efs-ftp-path (path) "Parse PATH according to efs-path-regexp. Returns a list (HOST USER PATH), or nil if PATH does not match the format."
--- a/lisp/efs/efs.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/efs/efs.el Mon Aug 13 08:55:10 2007 +0200 @@ -7842,7 +7842,7 @@ ;;; Getting directory listings. -(defun efs-directory-files (directory &optional full match nosort) +(defun efs-directory-files (directory &optional full match nosort &rest ignored-for-now) ;; Returns directory-files for remote directories. ;; NOSORT is a V19 arg. (let* ((directory (expand-file-name directory))
--- a/lisp/gnus/ChangeLog Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/ChangeLog Mon Aug 13 08:55:10 2007 +0200 @@ -1,3 +1,21 @@ +Mon Mar 24 16:57:26 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> + + * gnus.el: Gnus v5.4.37 is released. + +Mon Mar 24 01:16:15 1997 Hrvoje Niksic <hniksic@srce.hr> + + * gnus-xmas.el (gnus-xmas-redefine): Use it. + + * gnus-xmas.el (gnus-xmas-summary-set-display-table): New function. + + * gnus-sum.el (gnus-summary-mode): Use it. + + * gnus-sum.el (gnus-summary-set-display-table): New function. + +Mon Mar 24 16:27:46 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no> + + * gnus-util.el (gnus-buffer-live-p): Reinstated. + Mon Mar 24 01:24:27 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no> * gnus.el: Gnus v5.4.36 is released.
--- a/lisp/gnus/gnus-async.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-async.el Mon Aug 13 08:55:10 2007 +0200 @@ -126,7 +126,7 @@ (defun gnus-async-prefetch-next (group article summary) "Possibly prefetch several articles starting with the article after ARTICLE." - (when (and (buffer-live-p summary) + (when (and (gnus-buffer-live-p summary) gnus-asynchronous (gnus-group-asynchronous-p group)) (save-excursion @@ -143,7 +143,7 @@ (defun gnus-async-prefetch-article (group article summary &optional next) "Possibly prefetch several articles starting with ARTICLE." - (if (not (buffer-live-p summary)) + (if (not (gnus-buffer-live-p summary)) (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) (when (and gnus-asynchronous @@ -154,7 +154,7 @@ (let ((do-fetch next) (do-message t)) ;(eq major-mode 'gnus-summary-mode))) (when (and (gnus-group-asynchronous-p group) - (buffer-live-p summary) + (gnus-buffer-live-p summary) (or (not next) gnus-async-fetch-list)) (gnus-async-with-semaphore @@ -211,7 +211,7 @@ ,mark (set-marker (make-marker) (point-max)) ,group ,article) gnus-async-article-alist))) - (if (not (buffer-live-p ,summary)) + (if (not (gnus-buffer-live-p ,summary)) (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) (gnus-async-prefetch-article ,group ,next ,summary t)))))
--- a/lisp/gnus/gnus-salt.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-salt.el Mon Aug 13 08:55:10 2007 +0200 @@ -129,7 +129,7 @@ (defun gnus-pick-setup-message () "Make Message do the right thing on exit." - (when (and (buffer-live-p gnus-summary-buffer) + (when (and (gnus-buffer-live-p gnus-summary-buffer) (save-excursion (set-buffer gnus-summary-buffer) gnus-pick-mode))
--- a/lisp/gnus/gnus-score.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-score.el Mon Aug 13 08:55:10 2007 +0200 @@ -908,7 +908,7 @@ "Add SCORE to all followups to the article in the current buffer." (interactive "P") (setq score (gnus-score-default score)) - (when (buffer-live-p gnus-summary-buffer) + (when (gnus-buffer-live-p gnus-summary-buffer) (save-excursion (save-restriction (message-narrow-to-headers) @@ -923,7 +923,7 @@ "Add SCORE to all later articles in the thread the current buffer is part of." (interactive "P") (setq score (gnus-score-default score)) - (when (buffer-live-p gnus-summary-buffer) + (when (gnus-buffer-live-p gnus-summary-buffer) (save-excursion (save-restriction (goto-char (point-min))
--- a/lisp/gnus/gnus-sum.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-sum.el Mon Aug 13 08:55:10 2007 +0200 @@ -715,31 +715,6 @@ (defvar gnus-scores-exclude-files nil) -(defvar gnus-summary-display-table - ;; Change the display table. Odd characters have a tendency to mess - ;; up nicely formatted displays - we make all possible glyphs - ;; display only a single character. - - ;; We start from the standard display table, if any. - (let ((table (or (copy-sequence standard-display-table) - (make-display-table))) - ;; Nix out all the control chars... - (i 32)) - (while (>= (setq i (1- i)) 0) - (aset table i [??])) - ;; ... but not newline and cr, of course. (cr is necessary for the - ;; selective display). - (aset table ?\n nil) - (aset table ?\r nil) - ;; We nix out any glyphs over 126 that are not set already. - (let ((i 256)) - (while (>= (setq i (1- i)) 127) - ;; Only modify if the entry is nil. - (or (aref table i) - (aset table i [??])))) - table) - "Display table used in summary mode buffers.") - (defvar gnus-original-article nil) (defvar gnus-article-internal-prepare-hook nil) (defvar gnus-newsgroup-process-stack nil) @@ -1872,7 +1847,7 @@ (setq truncate-lines t) (setq selective-display t) (setq selective-display-ellipses t) ;Display `...' - (setq buffer-display-table gnus-summary-display-table) + (gnus-summary-set-display-table) (gnus-set-default-directory) (setq gnus-newsgroup-name group) (make-local-variable 'gnus-summary-line-format) @@ -2210,6 +2185,30 @@ (mouse-set-point e) (gnus-summary-next-page nil t)) +(defun gnus-summary-set-display-table () + ;; Change the display table. Odd characters have a tendency to mess + ;; up nicely formatted displays - we make all possible glyphs + ;; display only a single character. + + ;; We start from the standard display table, if any. + (let ((table (or (copy-sequence standard-display-table) + (make-display-table))) + ;; Nix out all the control chars... + (i 32)) + (while (>= (setq i (1- i)) 0) + (aset table i [??])) + ;; ... but not newline and cr, of course. (cr is necessary for the + ;; selective display). + (aset table ?\n nil) + (aset table ?\r nil) + ;; We nix out any glyphs over 126 that are not set already. + (let ((i 256)) + (while (>= (setq i (1- i)) 127) + ;; Only modify if the entry is nil. + (or (aref table i) + (aset table i [??])))) + (setq buffer-display-table table))) + (defun gnus-summary-setup-buffer (group) "Initialize summary buffer." (let ((buffer (concat "*Summary " group "*"))) @@ -2262,7 +2261,7 @@ (setq gnus-reffed-article-number reffed) (setq gnus-current-score-file score-file) ;; The article buffer also has local variables. - (when (buffer-live-p gnus-article-buffer) + (when (gnus-buffer-live-p gnus-article-buffer) (set-buffer gnus-article-buffer) (setq gnus-summary-buffer summary)))))) @@ -4961,7 +4960,7 @@ ;; The `gnus-summary-buffer' variable may point ;; to the old summary buffer when using a single ;; article buffer. - (unless (buffer-live-p gnus-summary-buffer) + (unless (gnus-buffer-live-p gnus-summary-buffer) (set-buffer gnus-group-buffer)) (set-buffer gnus-summary-buffer) (gnus-set-global-variables))))
--- a/lisp/gnus/gnus-util.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-util.el Mon Aug 13 08:55:10 2007 +0200 @@ -458,6 +458,12 @@ (let ((ids (inline (gnus-split-references references)))) (car (last ids (or n 1)))))) +(defsubst gnus-buffer-live-p (buffer) + "Say whether BUFFER is alive or not." + (and buffer + (get-buffer buffer) + (buffer-name (get-buffer buffer)))) + (defun gnus-horizontal-recenter () "Recenter the current buffer horizontally." (if (< (current-column) (/ (window-width) 2))
--- a/lisp/gnus/gnus-xmas.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus-xmas.el Mon Aug 13 08:55:10 2007 +0200 @@ -181,6 +181,26 @@ (gnus-horizontal-recenter) (select-window selected)))))) +(defun gnus-xmas-summary-set-display-table () + ;; Setup the display table -- like gnus-summary-setup-display-table, + ;; but done in an XEmacsish way. + (let ((table (make-display-table)) + ;; Nix out all the control chars... + (i 32)) + (while (>= (setq i (1- i)) 0) + (aset table i [??])) + ;; ... but not newline and cr, of course. (cr is necessary for the + ;; selective display). + (aset table ?\n nil) + (aset table ?\r nil) + ;; We nix out any glyphs over 126 that are not set already. + (let ((i 256)) + (while (>= (setq i (1- i)) 127) + ;; Only modify if the entry is nil. + (or (aref table i) + (aset table i [??])))) + (add-spec-to-specifier current-display-table table (current-buffer) nil))) + (defun gnus-xmas-add-hook (hook function &optional append local) (add-hook hook function)) @@ -442,7 +462,7 @@ (defun gnus-xmas-redefine () "Redefine lots of Gnus functions for XEmacs." - (fset 'gnus-summary-make-display-table 'ignore) + (fset 'gnus-summary-set-display-table 'gnus-xmas-summary-set-display-table) (fset 'gnus-visual-turn-off-edit-menu 'identity) (fset 'gnus-summary-recenter 'gnus-xmas-summary-recenter) (fset 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
--- a/lisp/gnus/gnus.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/gnus.el Mon Aug 13 08:55:10 2007 +0200 @@ -226,7 +226,7 @@ :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "5.4.36" +(defconst gnus-version-number "5.4.37" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number)
--- a/lisp/gnus/nnfolder.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/nnfolder.el Mon Aug 13 08:55:10 2007 +0200 @@ -225,7 +225,7 @@ (let ((bufs nnfolder-buffer-alist)) (save-excursion (while bufs - (if (not (buffer-live-p (nth 1 (car bufs)))) + (if (not (gnus-buffer-live-p (nth 1 (car bufs)))) (setq nnfolder-buffer-alist (delq (car bufs) nnfolder-buffer-alist)) (set-buffer (nth 1 (car bufs))) @@ -492,7 +492,7 @@ (when (and server (not (nnfolder-server-opened server))) (nnfolder-open-server server)) - (unless (buffer-live-p nnfolder-current-buffer) + (unless (gnus-buffer-live-p nnfolder-current-buffer) (setq nnfolder-current-buffer nil nnfolder-current-group nil)) ;; Change group. @@ -519,7 +519,7 @@ ;; is live, verify that nobody else has touched the file since last ;; time. (when (and nnfolder-current-buffer - (not (buffer-live-p nnfolder-current-buffer))) + (not (gnus-buffer-live-p nnfolder-current-buffer))) (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist) nnfolder-current-buffer nil)) @@ -611,7 +611,7 @@ (defun nnfolder-possibly-change-folder (group) (let ((inf (assoc group nnfolder-buffer-alist))) (if (and inf - (buffer-live-p (cadr inf))) + (gnus-buffer-live-p (cadr inf))) (set-buffer (cadr inf)) (when inf (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)))
--- a/lisp/gnus/nnheader.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/nnheader.el Mon Aug 13 08:55:10 2007 +0200 @@ -381,7 +381,7 @@ (defun nnheader-init-server-buffer () "Initialize the Gnus-backend communication buffer." (save-excursion - (unless (buffer-live-p nntp-server-buffer) + (unless (gnus-buffer-live-p nntp-server-buffer) (setq nntp-server-buffer (get-buffer-create " *nntpd*"))) (set-buffer nntp-server-buffer) (buffer-disable-undo (current-buffer))
--- a/lisp/gnus/nnmail.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/nnmail.el Mon Aug 13 08:55:10 2007 +0200 @@ -1416,7 +1416,7 @@ (defun nnmail-cache-insert (id) (when nnmail-treat-duplicates - (unless (buffer-live-p nnmail-cache-buffer) + (unless (gnus-buffer-live-p nnmail-cache-buffer) (nnmail-cache-open)) (save-excursion (set-buffer nnmail-cache-buffer)
--- a/lisp/gnus/nntp.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/nntp.el Mon Aug 13 08:55:10 2007 +0200 @@ -598,7 +598,7 @@ "Say whether a connection to SERVER has been opened." (and (nnoo-current-server-p 'nntp server) nntp-server-buffer - (buffer-live-p nntp-server-buffer) + (gnus-buffer-live-p nntp-server-buffer) (nntp-find-connection nntp-server-buffer))) (deffoo nntp-open-server (server &optional defs connectionless)
--- a/lisp/gnus/nnweb.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/gnus/nnweb.el Mon Aug 13 08:55:10 2007 +0200 @@ -133,7 +133,7 @@ (deffoo nnweb-close-group (group &optional server) (nnweb-possibly-change-server group server) - (when (buffer-live-p nnweb-buffer) + (when (gnus-buffer-live-p nnweb-buffer) (save-excursion (set-buffer nnweb-buffer) (set-buffer-modified-p nil) @@ -166,7 +166,7 @@ (deffoo nnweb-close-server (&optional server) (when (and (nnweb-server-opened server) - (buffer-live-p nnweb-buffer)) + (gnus-buffer-live-p nnweb-buffer)) (save-excursion (set-buffer nnweb-buffer) (set-buffer-modified-p nil) @@ -274,7 +274,7 @@ (defun nnweb-init (server) "Initialize buffers and such." - (unless (buffer-live-p nnweb-buffer) + (unless (gnus-buffer-live-p nnweb-buffer) (setq nnweb-buffer (save-excursion (nnheader-set-temp-buffer @@ -295,7 +295,7 @@ t))) (defun nnweb-callback (buffer callback) - (when (buffer-live-p url-working-buffer) + (when (gnus-buffer-live-p url-working-buffer) (save-excursion (set-buffer url-working-buffer) (funcall (nnweb-definition 'article))
--- a/lisp/modes/cc-mode.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/modes/cc-mode.el Mon Aug 13 08:55:10 2007 +0200 @@ -6,8 +6,8 @@ ;; 1987 Dave Detlefs and Stewart Clamen ;; 1985 Richard M. Stallman ;; Created: a long, long, time ago. adapted from the original c-mode.el -;; Version: 4.387 -;; Last Modified: 1997/03/21 20:25:33 +;; Version: 4.388 +;; Last Modified: 1997/03/25 03:19:17 ;; Keywords: c languages oop ;; NOTE: Read the commentary below for the right way to submit bug reports! @@ -4050,7 +4050,7 @@ (if (looking-at "typedef[^_]") (progn (forward-sexp 1) (c-forward-syntactic-ws indent-point))) - (setq placeholder (c-point 'bol)) + (setq placeholder (c-point 'boi)) (and (or (looking-at "enum[ \t\n]+") (= char-before-ip ?=)) (save-excursion @@ -5203,7 +5203,7 @@ ;; defuns for submitting bug reports -(defconst c-version "4.387" +(defconst c-version "4.388" "CC Mode version number.") (defconst c-mode-help-address "bug-gnu-emacs@prep.ai.mit.edu, cc-mode-help@python.org"
--- a/lisp/modes/view-less.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/modes/view-less.el Mon Aug 13 08:55:10 2007 +0200 @@ -51,6 +51,7 @@ "Non-nil when view-mode is active. Call `view-mode' to toggle.") (make-variable-buffer-local 'view-minor-mode) +;;;###autoload (defvar view-minor-mode-map (let ((map (make-keymap))) (set-keymap-name map 'view-minor-mode-map) @@ -99,6 +100,7 @@ (add-minor-mode 'view-minor-mode " View" view-minor-mode-map) +;;;###autoload (defvar view-mode-map (let ((map (copy-keymap view-minor-mode-map))) (set-keymap-name map 'view-mode-map)
--- a/lisp/packages/apropos.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/packages/apropos.el Mon Aug 13 08:55:10 2007 +0200 @@ -562,9 +562,7 @@ (apropos-print-doc 'describe-variable 2 "Variable" do-keys) (apropos-print-doc 'apropos-describe-plist 3 - "Plist" nil)))) - (when temp-buffer-shrink-to-fit - (shrink-window-if-larger-than-buffer (get-buffer-window "*Apropos*")))) + "Plist" nil))))) (prog1 apropos-accumulator (setq apropos-accumulator ()))) ; permit gc
--- a/lisp/packages/hyper-apropos.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/packages/hyper-apropos.el Mon Aug 13 08:55:10 2007 +0200 @@ -157,6 +157,8 @@ ;; movement (define-key map " " 'scroll-up) (define-key map "b" 'scroll-down) + (define-key map [delete] 'scroll-down) + (define-key map [backspace] 'scroll-down) (define-key map "/" 'isearch-forward) (define-key map "?" 'isearch-backward) ;; follow links @@ -182,6 +184,8 @@ ;; slightly different scrolling... (define-key map " " 'hypropos-scroll-up) (define-key map "b" 'hypropos-scroll-down) + (define-key map [delete] 'hypropos-scroll-down) + (define-key map [backspace] 'hypropos-scroll-down) ;; act on the current line... (define-key map "w" 'hypropos-where-is) (define-key map "i" 'hypropos-invoke-fn)
--- a/lisp/packages/terminal.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/packages/terminal.el Mon Aug 13 08:55:10 2007 +0200 @@ -1018,9 +1018,10 @@ (progn (goto-char (point-max)) (recenter -1))))))) -(defvar te-stty-string "stty -nl new dec echo" - "Command string (to be interpreted by \"sh\") which sets the modes -of the virtual terminal to be appropriate for interactive use.") +(defvar te-stty-string "stty -nl erase '^?' kill '^u' intr '^c' echo pass8" + "Shell command to set terminal modes for terminal emulator.") +;; This used to have `new' in it, but that loses outside BSD +;; and it's apparently not needed in BSD. (defvar explicit-shell-file-name nil "*If non-nil, is file name to use for explicitly requested inferior shell.")
--- a/lisp/prim/about.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/about.el Mon Aug 13 08:55:10 2007 +0200 @@ -232,6 +232,19 @@ ; (or got-error (message nil))) ; ) +(defvar about-xref-alist + '((w3-xemacs . "http://www.xemacs.org/") + (w3-jamie . "http://www.netscape.com/people/jwz/") + (w3-baw . "http://www.python.org/~bwarsaw/") + (w3-python . "http://www.python.org/ftp/emacs/") + (w3-infodock . "http://www.infodock.com") + (w3-kyle . "http://www.wonderworks.com/kyle/") + (w3-larsi . "http://www.ifi.uio.no/~larsi/") + (w3-hrvoje . "ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/") + ;; add more here + ) + "Mappings between xref symbols and URLs") + (defun about-xemacs-xref () (interactive "@") (let* ((e (or current-mouse-event last-input-event)) @@ -252,7 +265,7 @@ (setq prev-page 'about) ;; Kill the sub-buffers when going back to the top, so that we ;; don't hold pointers to the bitmaps longer than necessary. - (if (not (eq xref 'w3-jamie)) + (if (not (assq xref about-xref-alist)) (progn (kill-buffer (current-buffer)) (setq prev-page 'others)))) @@ -261,11 +274,9 @@ (about-xemacs)) ((eq xref 'info) (info)) - ((or (eq xref 'w3-xemacs) (eq xref 'w3-jamie)) + ((assq xref about-xref-alist) (funcall browse-url-browser-function - (if (eq xref 'w3-xemacs) - "http://www.xemacs.org/" - "http://www.netscape.com/people/jwz/"))) + (cdr (assq xref about-xref-alist)))) ((eq xref 'kill-buffer) (kill-buffer (current-buffer))) ((eq xref 'news) @@ -299,6 +310,7 @@ ((eq xref 'others) "About Everyone") ((eq xref 'features) "New XEmacs Features") ((eq xref 'history) "XEmacs History") + (t (error "Can't follow xref: %s" xref)) ))) (delete-other-windows) (buffer-disable-undo (current-buffer)) @@ -648,16 +660,23 @@ (about-face "Barry Warsaw" 'bold) (insert " <bwarsaw@python.org> - Author of cc-mode for C++, C, and Objective-C editing, and - Supercite for mail and news citing. Also various and sundry other - Emacs utilities, fixes, enhancements and kludgery as whimsy, - boredom, and ToT dictate (but not necessarily in that order). - - See \"http://www.python.org/~bwarsaw\". + Author of CC Mode, for C, C++, Objective-C, and Java editing, + and Supercite for mail and news citing. Also various and + sundry other Emacs packages, utilities, fixes, enhancements + and kludgery as whimsy, boredom, and ToT dictate (but not + necessarily in that order). See also:\n + ") + (about-xref "http://www.python.org/~bwarsaw/" 'w3-baw + "Visit Barry's WWW page") + (insert "\n and: + ") + (about-xref "http://www.python.org/ftp/emacs/" 'w3-python + "Visit the CC Mode distribution") + (insert "\n\n Daddy © 1994 Warsaw - ======== + ============= Drive me Daddy, drive me quick Push my pedal, shift my stick Fill me up with golden gas @@ -683,7 +702,10 @@ framework for software engineers. It runs atop XEmacs and is available from his firm, InfoDock Associates, which offers custom development and support packages for corporate users of XEmacs, - GNU Emacs and InfoDock. See \"http://www.infodock.com\". + GNU Emacs and InfoDock. See ") + (about-xref "http://www.infodock.com" 'w3-infodock + "Visit the Infodock WWW page") + (insert " His interests include user interfaces, information management, CASE tools, communications and enterprise integration.") @@ -749,9 +771,10 @@ uses the standard UNIX mailbox format for its folders; thus, you can use VM concurrently with other UNIX mail readers such as Berkeley Mail and ELM. - See \"http://www.wonderworks.com/kyle/\".") - - (insert "\n\n\tClick ") + See ") + (about-xref "http://www.wonderworks.com/kyle/" 'w3-kyle + "Visit Kyle's WWW page") + (insert ". \n\n\tClick ") (about-xref "here" prev-page "Return to previous page") (insert " to go back to the previous page.\n") ) @@ -767,9 +790,11 @@ currently plumbing away at his majors work at the Institute of Physics, working on an SCI project connected with CASCADE and CERN and stuff. - See \"http://www.ifi.uio.no/~larsi/\".") + See ") + (about-xref "http://www.ifi.uio.no/~larsi/" 'w3-larsi + "Visit Lars' WWW page") - (insert "\n\n\tClick ") + (insert ". \n\n\tClick ") (about-xref "here" prev-page "Return to previous page") (insert " to go back to the previous page.\n") ) @@ -819,10 +844,19 @@ and back-seat contributor for several of it's major packages. ") (about-xref "Barry Warsaw" 'baw "Find out more about Barry Warsaw") (insert " <bwarsaw@python.org> - Author of cc-mode for C++, C, and Objective-C editing, and - Supercite for mail and news citing. Also various and sundry other - Emacs utilities, fixes, enhancements and kludgery as whimsy, - boredom, and ToT dictate (but not necessarily in that order). + Author of CC Mode for C, C++, Objective-C and Java editing, + and Supercite for mail and news citing. Also various and + sundry other Emacs packages, utilities, fixes, enhancements + and kludgery as whimsy, boredom, and ToT dictate (but not + necessarily in that order). See also: + ") + (about-xref "http://www.python.org/~bwarsaw/" 'w3-baw + "Visit Barry's WWW page") + (insert "\n and: + ") + (about-xref "http://www.python.org/ftp/emacs/" 'w3-python + "Visit Barry's Emacs Goodies page") + (insert " ") (about-xref "Andy Piper" 'piper "Find out more about Andy Piper") (insert " <andyp@parallax.co.uk> Created the prototype for the toolbars. Has been the first to make @@ -835,7 +869,10 @@ framework for software engineers. It runs atop XEmacs and is available from his firm, InfoDock Associates, which offers custom development and support packages for corporate users of XEmacs, - GNU Emacs and InfoDock. See \"http://www.infodock.com\". + GNU Emacs and InfoDock. See ") + (about-xref "http://www.infodock.com" 'w3-infodock + "Visit the Infodock WWW page") + (insert ". His interests include user interfaces, information management, CASE tools, communications and enterprise integration. @@ -852,7 +889,10 @@ uses the standard UNIX mailbox format for its folders; thus, you can use VM concurrently with other UNIX mail readers such as Berkeley Mail and ELM. - See \"http://www.wonderworks.com/kyle/\". + See ") + (about-xref "http://www.wonderworks.com/kyle/" 'w3-kyle + "Visit Kyle's WWW page") + (insert ". ") (about-xref "Lars Magne Ingebrigtsen" 'larsi "Find out more about Lars Magne Ingebrigtsen") (insert " <larsi@ifi.uio.no> Author of Gnus the Usenet news and Mail reading package in @@ -862,16 +902,19 @@ currently plumbing away at his majors work at the Institute of Physics, working on an SCI project connected with CASCADE and CERN and stuff. - See \"http://www.ifi.uio.no/~larsi/\" + See ") + (about-xref "http://www.ifi.uio.no/~larsi/" 'w3-larsi + "Visit Lars' WWW page") + (insert ". ") (about-xref "Jens Lautenbacher" 'jens "Find out more about Jens Lautenbacher") (insert " <jens@lemcbed.lem.uni-karlsruhe.de> - I'm currently working at the University of Karlsruhe, Germany - on getting my diploma thesis on Supersymmetry (uuh, that's - physics) done. After that (and all the remaining exams) I'm - looking forward to make a living out of my hobbies -- - computers (and graphics). But because I have no deadline for - the exams and XEmacs betas are released at a high rate this - may take some time... + I'm currently working at the University of Karlsruhe, Germany + on getting my diploma thesis on Supersymmetry (uuh, that's + physics) done. After that (and all the remaining exams) I'm + looking forward to make a living out of my hobbies -- + computers (and graphics). But because I have no deadline for + the exams and XEmacs betas are released at a high rate this + may take some time... Darrell Kindred <Darrell.Kindred@cmu.edu> Unofficial maintainer of the xemacs-beta list of extant @@ -932,7 +975,10 @@ In his free time he is helping develop free software (especially XEmacs, as well as GNU software) and is writing his own -- he has written a small network mirroring utility Wget, see - \"ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/\". + ") + (about-xref "ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/" + 'w3-hrvoje "Visit Hrvoje's Wget distribution") + (insert " In addition to those just mentioned, the following people have spent a great deal of effort providing feedback, testing beta
--- a/lisp/prim/auto-autoloads.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/auto-autoloads.el Mon Aug 13 08:55:10 2007 +0200 @@ -899,7 +899,7 @@ ;;;*** -;;;### (autoloads (custom-make-dependencies custom-menu-update custom-buffer-create customize-apropos customize-customized customize-face customize-variable customize) "cus-edit" "custom/cus-edit.el") +;;;### (autoloads (custom-make-dependencies custom-menu-update custom-save-all custom-buffer-create customize-apropos customize-customized customize-face customize-variable customize) "cus-edit" "custom/cus-edit.el") (autoload 'customize "cus-edit" "\ Customize SYMBOL, which must be a customization group." t nil) @@ -925,6 +925,9 @@ SYMBOL is a customization option, and WIDGET is a widget for editing that option." nil nil) +(autoload 'custom-save-all "cus-edit" "\ +Save all customizations in `custom-file'." nil nil) + (autoload 'custom-menu-update "cus-edit" "\ Update customize menu." t nil) @@ -1362,11 +1365,15 @@ ;;;*** -;;;### (autoloads nil "efs-cu" "efs/efs-cu.el") +;;;### (autoloads (efs-ftp-path) "efs-cu" "efs/efs-cu.el") (defvar efs-path-root-regexp "^/[^/:]+:" "\ Regexp to match the `/user@host:' root of an efs full path.") +(autoload 'efs-ftp-path "efs-cu" "\ +Parse PATH according to efs-path-regexp. +Returns a list (HOST USER PATH), or nil if PATH does not match the format." nil nil) + ;;;*** ;;;### (autoloads (remote-path-file-handler-function) "efs-dump" "efs/efs-dump.el") @@ -3729,7 +3736,7 @@ ;;;### (autoloads (ksh-mode) "ksh-mode" "modes/ksh-mode.el") (autoload 'ksh-mode "ksh-mode" "\ -ksh-mode $Revision: 1.18 $ - Major mode for editing (Bourne, Korn or Bourne again) +ksh-mode $Revision: 1.19 $ - Major mode for editing (Bourne, Korn or Bourne again) shell scripts. Special key bindings and commands: \\{ksh-mode-map} @@ -5004,7 +5011,7 @@ (autoload 'vhdl-mode "vhdl-mode" "\ Major mode for editing VHDL code. -vhdl-mode $Revision: 1.18 $ +vhdl-mode $Revision: 1.19 $ To submit a problem report, enter `\\[vhdl-submit-bug-report]' from a vhdl-mode buffer. This automatically sets up a mail buffer with version information already added. You just need to add a description of the @@ -5024,6 +5031,10 @@ ;;;### (autoloads (auto-view-mode view-major-mode view-mode view-minor-mode view-buffer-other-window view-file-other-window view-buffer view-file) "view-less" "modes/view-less.el") +(defvar view-minor-mode-map (let ((map (make-keymap))) (set-keymap-name map 'view-minor-mode-map) (suppress-keymap map) (define-key map "-" 'negative-argument) (define-key map " " 'scroll-up) (define-key map "f" 'scroll-up) (define-key map "" 'scroll-down) (define-key map "b" 'scroll-down) (define-key map 'backspace 'scroll-down) (define-key map " " 'view-scroll-lines-up) (define-key map "\n" 'view-scroll-lines-up) (define-key map "e" 'view-scroll-lines-up) (define-key map "j" 'view-scroll-lines-up) (define-key map "y" 'view-scroll-lines-down) (define-key map "k" 'view-scroll-lines-down) (define-key map "d" 'view-scroll-some-lines-up) (define-key map "u" 'view-scroll-some-lines-down) (define-key map "r" 'recenter) (define-key map "t" 'toggle-truncate-lines) (define-key map "N" 'view-buffer) (define-key map "E" 'view-file) (define-key map "P" 'view-buffer) (define-key map "!" 'shell-command) (define-key map "|" 'shell-command-on-region) (define-key map "=" 'what-line) (define-key map "?" 'view-search-backward) (define-key map "h" 'view-mode-describe) (define-key map "s" 'view-repeat-search) (define-key map "n" 'view-repeat-search) (define-key map "/" 'view-search-forward) (define-key map "\\" 'view-search-backward) (define-key map "g" 'view-goto-line) (define-key map "G" 'view-last-windowful) (define-key map "%" 'view-goto-percent) (define-key map "p" 'view-goto-percent) (define-key map "m" 'point-to-register) (define-key map "'" 'register-to-point) (define-key map "C" 'view-cleanup-backspaces) (define-key map "" 'view-quit) (define-key map "" 'view-quit-toggle-ro) (define-key map "q" 'view-quit) map)) + +(defvar view-mode-map (let ((map (copy-keymap view-minor-mode-map))) (set-keymap-name map 'view-mode-map) map)) + (autoload 'view-file "view-less" "\ Find FILE, enter view mode. With prefix arg OTHER-P, use other window." t nil)
--- a/lisp/prim/files.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/files.el Mon Aug 13 08:55:10 2007 +0200 @@ -3005,13 +3005,11 @@ (error "Apparently circular symlink path")))) ;; Suggested by Michael Kifer <kifer@CS.SunySB.EDU> -(defun file-remote-p (file) - "Test whether file resides on the local system. -The special value 'unknown is returned if no remote file access package -has been loaded." - (cond ((featurep 'ange-ftp) (ange-ftp-ftp-path file-name)) - (t (require 'efs) - (efs-ftp-path file-name)))) +(defun file-remote-p (file-name) + "Test whether FILE-NAME is looked for on a remote system." + (cond ((not allow-remote-paths) nil) + ((featurep 'ange-ftp) (ange-ftp-ftp-path file-name)) + (t (efs-ftp-path file-name)))) ;; Written in C in FSF (defun insert-file-contents (filename &optional visit beg end replace)
--- a/lisp/prim/frame.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/frame.el Mon Aug 13 08:55:10 2007 +0200 @@ -1022,6 +1022,9 @@ (defvar temp-buffer-shrink-to-fit t "*When non-nil resize temporary output buffers to minimize blank lines.") +(defvar temp-buffer-max-height .5 + "*Proportion of frame to use for temp windows.") + (defun show-temp-buffer-in-current-frame (buffer) "For use as the value of temp-buffer-show-function: always displays the buffer in the current frame, regardless of the behavior @@ -1036,7 +1039,12 @@ (set-window-start window 1) ; obeys narrowing (set-window-point window 1) (when temp-buffer-shrink-to-fit - (shrink-window-if-larger-than-buffer window)) + (let* ((temp-window-size (round (* temp-buffer-max-height + (frame-height (window-frame window))))) + (size (window-displayed-height window))) + (when (< size temp-window-size) + (enlarge-window (- temp-window-size size) nil window))) + (shrink-window-if-larger-than-buffer window)) nil))) (setq pre-display-buffer-function 'get-frame-for-buffer)
--- a/lisp/prim/help.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/help.el Mon Aug 13 08:55:10 2007 +0200 @@ -347,8 +347,6 @@ This just displays the buffer in another window, rather than selecting the window.") -(defvar help-window-max-height .5 - "*Proportion of frame to use for help windows.") ;; Use this function for displaying help when C-h something is pressed ;; or in similar situations. Do *not* use it when you are displaying ;; a help message and then prompting for input in the minibuffer -- @@ -390,14 +388,7 @@ (substitute-command-keys "Type \\[delete-other-windows] to remove help window, \\[scroll-other-window] to scroll the help."))) (t (message - (substitute-command-keys "Type \\[switch-to-buffer-other-window] to restore the other window, \\[scroll-other-window] to scroll the help.")))) - (when temp-buffer-shrink-to-fit - (let* ((help-window-size (round (* help-window-max-height - (frame-height (window-frame helpwin))))) - (size (window-displayed-height helpwin))) - (if (< size help-window-size) - (enlarge-window (- help-window-size size) nil helpwin))) - (shrink-window-if-larger-than-buffer helpwin)))))))) + (substitute-command-keys "Type \\[switch-to-buffer-other-window] to restore the other window, \\[scroll-other-window] to scroll the help.")))))))))) (defun describe-key (key) "Display documentation of the function invoked by KEY.
--- a/lisp/prim/isearch-mode.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/isearch-mode.el Mon Aug 13 08:55:10 2007 +0200 @@ -384,7 +384,9 @@ ;; good way to fix it, though. -hniksic (defun isearch-mode-help () (interactive "_") - (describe-function 'isearch-forward) + (let ((w (selected-window))) + (describe-function 'isearch-forward) + (select-window w)) (isearch-update))
--- a/lisp/prim/lisp.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/lisp.el Mon Aug 13 08:55:10 2007 +0200 @@ -326,10 +326,7 @@ (setq list (cdr list))) (setq list (nreverse new)))) (with-output-to-temp-buffer "*Completions*" - (display-completion-list list)) - (when temp-buffer-shrink-to-fit - (shrink-window-if-larger-than-buffer - (get-buffer-window "*Completions*")))) + (display-completion-list list))) (message "Making completion list...%s" "done"))))) ;;; lisp.el ends here
--- a/lisp/prim/startup.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/prim/startup.el Mon Aug 13 08:55:10 2007 +0200 @@ -780,7 +780,7 @@ (goto-char (point-min)) (when (re-search-forward " \\[Lucid\\]" nil t) (delete-region (match-beginning 0) (match-end 0))) - (when (re-search-forward "[^(].*-.*-" nil t) + (when (re-search-forward "[^(][^)]*-[^)]*-" nil t) (delete-region (1+ (match-beginning 0)) (match-end 0)) (insert "(")) (goto-char (point-max))
--- a/lisp/tm/tm-play.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/tm/tm-play.el Mon Aug 13 08:55:10 2007 +0200 @@ -4,7 +4,7 @@ ;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp> ;; Created: 1995/9/26 (separated from tm-view.el) -;; Version: $Id: tm-play.el,v 1.7 1997/03/22 05:29:24 steve Exp $ +;; Version: $Id: tm-play.el,v 1.8 1997/03/26 04:34:05 steve Exp $ ;; Keywords: mail, news, MIME, multimedia ;; This file is part of tm (Tools for MIME). @@ -423,7 +423,8 @@ ;;; @ rot13-47 ;;; -(require 'view) +(unless (boundp 'view-mode-map) + (require 'view)) (defconst mime-view-text/plain-mode-map (copy-keymap view-mode-map)) (define-key mime-view-text/plain-mode-map
--- a/lisp/version.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/version.el Mon Aug 13 08:55:10 2007 +0200 @@ -26,7 +26,7 @@ (defconst emacs-version "19.15" "\ Version numbers of this version of Emacs.") -(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid (beta104)"))) +(setq emacs-version (purecopy (concat emacs-version " XEmacs Lucid"))) (defconst emacs-major-version (progn (or (string-match "^[0-9]+" emacs-version)
--- a/lisp/w3/ChangeLog Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/ChangeLog Mon Aug 13 08:55:10 2007 +0200 @@ -1,5 +1,124 @@ +Tue Mar 25 16:06:28 1997 William M. Perry <wmperry@aventail.com> + +* Emacs-W3 3.0.74 released + +Tue Mar 25 15:31:56 1997 Greg Stark <gsstark@great-white> + +* url-cookie.el (url-cookie-handle-set-cookie): don't deal with #!%@ed + microsoft web site cookies - they break good, clean, wholesome sites + like yahoo's stock pages. + +* ssl.el (ssl-program-arguments): Make sure everything gets turned into a + string, not an integer. + (open-ssl-stream): use a pipe instead of a pty if possible (why?) + +* w3-display.el (w3-display-node): Added back in <keygen> support + +* w3.el (w3-notify-when-ready): protect against bad buffer switching + (minibuffer as active window lossage, etc) + +* w3-toolbar.el (w3-toolbar-make-buttons): Don't warn about toolbar + directory on Emacsen that can't do toolbars! + +* Emacs-W3 3.0.73 released + +* w3-display.el (w3-get-face-info): Allow passing in a second argument + that means 'check this attribute of the html tag if you don't find + something in the stylesheet'. This automatically enables <font color> + and <table|td|tr bgcolor>. + +Tue Mar 25 06:45:02 1997 T. V. Raman <raman@Adobe.COM> + +* w3-forms.el (w3-form-keymap): patch to avoid lossage with emacspeak & + using terminal.el + +Tue Mar 25 06:45:02 1997 William M. Perry <wmperry@aventail.com> + +* ssl.el (ssl-program-arguments): Removed -quiet switch, since it requires + patches to s_client + +Mon Mar 24 10:56:11 1997 William M. Perry <wmperry@aventail.com> + +* Emacs-W3 3.0.72 released + +* w3-display.el (w3-display-node): Better handling of body and html style + attributes in XEmacs + +* w3.el (w3-mode): Removed call to kill-all-local-variables, as it + nukes buffer-local faces as well. + +* css.el (css-expand-length): Don't choke and use the wrong damn thing to + base percentages off of on percentage heights (ie: font-size: 80%) + +Mon Mar 24 07:12:52 1997 Gerry S Hayes <sumner@CMU.EDU> + +* url-gw.el (url-open-telnet): Fixed stupid typo into-to-string -> + int-to-string + (url-open-rlogin): Ditto. + +Sun Mar 23 09:43:24 1997 William M. Perry <wmperry@aventail.com> + +* w3-display.el (w3-table-ascii-border-chars): Use a '+' in the ascii art + version of table borders. + +Sat Mar 22 00:45:34 1997 William M. Perry <wmperry@aventail.com> + +* w3-menu.el (w3-use-menus): Customized this variable + +* w3-display.el (w3-display-node): Don't run multiline text area's default + value through w3-normalize-spaces + +Thu Mar 20 23:44:50 1997 Greg Stark <gsstark@mit.edu> + +* w3-cus.el (w3-use-terminal-characters): New variable + (w3-use-terminal-characters-on-tty): New variable + (w3-use-terminal-glyphs): New variable + (w3-horizontal-rule-char): Make setting it to nil allow use of graphic + characters (also means people can avoid using graphic charactes for + horizontal rules if they wish) +* w3-display.el (w3-handle-image): clean up whitespace in alt tags + (w3-table-glyph-border-chars): New variable + (w3-table-graphic-border-chars): New variable + (w3-terminal-properties): New variable + (w3-insert-terminal-char): New inline function + (w3-horizontal-rule-char): New inline function + (w3-setup-terminal-chars): Set up all of these and make using graphic + characters work on XEmacs using text properties (and optionally use text + properties on FSF Emacs too). + (w3-table-hack-borders): Remove, obsoleted by w3-setup-terminal-chars + (w3-table-unhack-borders): don't have to fiddle with + w3-horizontal-rule-char any more. + (w3-display-table): Use w3-insert-terminal-char + (w3-size-of-tree): Use w3-horizontal-rule-char + (w3-display-node): Use w3-horizontal-rule-char, w3-insert-terminal-char, + uhm, i'm not sure if it was correct to remove the handle-content +* w3-forms.el (w3-fixup-eol-faces): try to remove mouse-face from end-of-lines as + well, uhm, this doesn't seem to work though. + (w3-form-determine-size): add keygen + (w3-form-encode-helper): add keygen support for the day when the ssl code + itself is released. +* w3-widget.el (widget-image-value-create): use 'item widgets instead of + 'push-button widgets and specify the format ourselves so we don't get + widget.el's arbitrary formatting. +* w3.el (w3-do-setup): call w3-setup-terminal-chars to make nice tables and + horizontal rules the default at least under X. +* mm.el added x-x509-ca-cert and x-x509-user-cert viewers but the tests + will fail so no one should should see this change until i release the + functions. + +Fri Mar 21 18:52:31 1997 William M. Perry <wmperry@aventail.com> + +* css.el (css-expand-length): Better support for percentage values in + lengths + +Thu Mar 20 06:22:29 1997 Istvan Marko <istvan@cmdmail.amd.com> + +* Added slot for no_proxy settings under the preferences panel + Thu Mar 20 06:22:29 1997 William M. Perry <wmperry@aventail.com> +* Emacs-W3 3.0.71 released + * w3-parse.el:Added more transitions for error handling of raw 'td' or 'th' outside of a 'tr' in tablebody.
--- a/lisp/w3/Makefile Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/Makefile Mon Aug 13 08:55:10 2007 +0200 @@ -36,7 +36,7 @@ url-nfs.el url-file.el url-cookie.el url-parse.el url-irc.el \ url-gopher.el url-http.el url-mail.el url-misc.el url-news.el \ url-vars.el url-auth.el mm.el md5.el url-gw.el ssl.el base64.el \ - url.el socks.el url-cache.el + url.el socks.el url-cache.el url-ns.el CUSTOMSOURCES = # widget.el widget-edit.el CUSTOMOBJECTS = $(CUSTOMSOURCES:.el=.elc) @@ -67,9 +67,6 @@ xemacs-w3: docomp.el $(OBJECTS) @echo Build of w3 complete... -xemacs-w3: docomp.el $(OBJECTS) - @echo Build of w3 complete... - all: w3.info w3 install: all
--- a/lisp/w3/css.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/css.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; css.el -- Cascading Style Sheet parser ;; Author: wmperry -;; Created: 1997/03/14 22:02:39 -;; Version: 1.30 +;; Created: 1997/03/25 03:35:09 +;; Version: 1.33 ;; Keywords: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -44,7 +44,7 @@ [font-style t symbol] [font-variant t symbol] [font-weight t weight] - [font-size t length] + [font-size t height] [font nil font] ;; Color and background properties, Section 5.3 @@ -317,7 +317,7 @@ (setq classes (sort classes 'string-lessp)) (cons tag classes))) ((string-match "^#" tag) ; id selector - (cons '*document tag)) + (cons '*document (list tag))) (t (cons (intern (downcase tag)) t) ) @@ -361,17 +361,27 @@ (if size (push (cons 'font-size (css-expand-length size)) retval)) (if height - (push (cons 'line-height (css-expand-length height)) retval)) + (push (cons 'line-height (css-expand-length height t)) retval)) (if family (push (cons 'font-family (css-expand-value 'string-list family)) retval)) retval)) -(defun css-expand-length (spec) +(if (not (fboundp 'frame-char-height)) + (defun frame-char-height (&optional frame) + "Height in pixels of a line in the font in frame FRAME. +If FRAME is omitted, the selected frame is used. +For a terminal frame, the value is always 1." + (font-height (face-font 'default frame)))) + +(defun css-expand-length (spec &optional height) (cond ((not (stringp spec)) spec) ((string-equal spec "auto") nil) ((string-match "\\([+-]?\\([0-9]+\\|[0-9]*\\.[0-9]+\\)\\)%" spec) ; A percentage - nil) + (setq spec (/ (string-to-int (match-string 1 spec)) 100.0)) + (if height + (round (* (frame-char-height) spec)) + (max 0 (round (* (frame-width) spec))))) ((string-match "\\([+-]?\\([0-9]+\\|[0-9]*\\.[0-9]+\\)\\)e[mx]" spec) ; Character based (max 0 (round (string-to-number (match-string 1 spec))))) (t @@ -463,6 +473,8 @@ (case type (length ; CSS, Section 6.1 (setq value (css-expand-length value))) + (height + (setq value (css-expand-length value t))) (percentage ; CSS, Section 6.2 (setq value (/ (string-to-number value) (if (fboundp 'float) (float 100) 1)))) @@ -577,8 +589,7 @@ ((string-match (css-symbol-list-as-regexp normal bold bolder lighter) value) (setq value (intern (downcase (concat ":" value))))) - (t setq value (intern ":bold")))) - + (t (setq value (intern ":bold"))))) ;; The rest of these deal with how we handle things internally ((symbol integer) ; Read it in (setq value (read (downcase value))))
--- a/lisp/w3/custom-check Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/custom-check Mon Aug 13 08:55:10 2007 +0200 @@ -4,13 +4,8 @@ HOME=`(cd ; pwd)` fi -if [ -n "$WIDGETDIR" ]; then - echo "WIDGETDIR environment variable set, good good" - exit 0 -fi - -WITH=`${EMACS} -batch -l ${HOME}/.emacs -eval '(princ (locate-library "custom"))' | cut -f3- |xargs dirname` -WITHOUT=`${EMACS} -batch -eval '(princ (locate-library "custom"))' | cut -f3- |xargs dirname` +WITH=` ${EMACS} -batch -l ${HOME}/.emacs -eval '(princ (file-truename (locate-library "custom")))'` +WITHOUT=`${EMACS} -batch -q -no-site-file -l docomp.el -eval '(princ (file-truename (locate-library "custom")))'` if [ "${WITH}" = "${WITHOUT}" ]; then exit 0
--- a/lisp/w3/mm.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/mm.el Mon Aug 13 08:55:10 2007 +0200 @@ -123,6 +123,12 @@ ) ) ("application" . ( + ("x-x509-ca-cert" . (("viewer" . ssl-view-site-cert) + ("test" . (fboundp 'ssl-view-site-cert)) + ("type" . "application/x-x509-ca-cert"))) + ("x-x509-user-cert" . (("viewer" . ssl-view-user-cert) + ("test" . (fboundp 'ssl-view-user-cert)) + ("type" . "application/x-x509-user-cert"))) ("octet-stream" . (("viewer" . mm-save-binary-file) ("type" ."application/octet-stream"))) ("dvi" . (("viewer" . "open %s")
--- a/lisp/w3/ssl.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/ssl.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; ssl.el,v --- ssl functions for emacsen without them builtin ;; Author: wmperry -;; Created: 1997/03/15 00:29:34 -;; Version: 1.11 +;; Created: 1997/03/26 00:04:40 +;; Version: 1.13 ;; Keywords: comm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -85,10 +85,10 @@ :type 'string) (defcustom ssl-program-arguments - '("-quiet" + '(;;"-quiet" "-host" host "-port" service - "-verify" ssl-certificate-verification-depth + "-verify" (int-to-string ssl-certificate-verification-depth) "-CApath" ssl-certificate-directory ) "*Arguments that should be passed to the program `ssl-program-name'. @@ -154,7 +154,7 @@ Fourth arg SERVICE is name of the service desired, or an integer specifying a port number to connect to." (if (integerp service) (setq service (int-to-string service))) - (let* ((process-connection-type t) + (let* ((process-connection-type nil) (port service) (proc (eval (`
--- a/lisp/w3/url-cookie.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/url-cookie.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; url-cookie.el --- Netscape Cookie support ;; Author: wmperry -;; Created: 1997/03/19 00:42:23 -;; Version: 1.14 +;; Created: 1997/03/26 00:06:01 +;; Version: 1.15 ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -374,12 +374,6 @@ (let ((cur nil)) (while rest (setq cur (pop rest)) - ;; Oh gross, this is for microsoft & netscape. - ;; Fuck them fuck them fuchk them fuck them. - (if (string-match "^\\([^=]+\\)=\\(.*\\)" (cdr cur)) - (setq rest (cons (cons (match-string 1 (cdr cur)) - (match-string 2 (cdr cur))) rest) - cur (cons (car cur) ""))) (url-cookie-store (car cur) (cdr cur) expires domain path secure)))) (t
--- a/lisp/w3/url-gw.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/url-gw.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; url-gw.el --- Gateway munging for URL loading ;; Author: wmperry -;; Created: 1997/02/10 01:00:01 -;; Version: 1.5 +;; Created: 1997/03/24 15:13:19 +;; Version: 1.6 ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -106,7 +106,7 @@ (defun url-open-rlogin (name buffer host service) "Open a connection using rsh." (if (not (stringp service)) - (setq service (into-to-string service))) + (setq service (int-to-string service))) (let ((proc (if url-gateway-rlogin-user-name (start-process name buffer "rsh" @@ -129,7 +129,7 @@ ;; Stolen from red gnus nntp.el (defun url-open-telnet (name buffer host service) (if (not (stringp service)) - (setq service (into-to-string service))) + (setq service (int-to-string service))) (save-excursion (set-buffer (get-buffer-create buffer)) (erase-buffer)
--- a/lisp/w3/url-misc.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/url-misc.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; url-misc.el --- Misc Uniform Resource Locator retrieval code ;; Author: wmperry -;; Created: 1997/02/19 00:52:07 -;; Version: 1.12 +;; Created: 1997/03/24 23:59:37 +;; Version: 1.13 ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -30,6 +30,14 @@ (require 'url-parse) (autoload 'Info-goto-node "info" "" t) +(defun url-netrek (url) + ;; Start a netrek client + (if (get-buffer url-working-buffer) + (kill-buffer url-working-buffer)) + (let ((data (url-generic-parse-url url))) + (error + "I should launch netrek on: %s %s" (url-host data) (url-port data)))) + (defun url-info (url) ;; Fetch an info node (if (get-buffer url-working-buffer)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/w3/url-ns.el Mon Aug 13 08:55:10 2007 +0200 @@ -0,0 +1,63 @@ +;;; url-ns.el --- Various netscape-ish functions for proxy definitions +;; Author: wmperry +;; Created: 1997/03/24 20:16:16 +;; Version: 1.1 +;; Keywords: comm, data, processes, hypermedia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Copyright (c) 1997 Free Software Foundation, Inc. +;;; +;;; This file is not part of GNU Emacs, but the same permissions apply. +;;; +;;; GNU Emacs 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. +;;; +;;; GNU Emacs 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, Inc., 59 Temple Place - Suite 330, +;;; Boston, MA 02111-1307, USA. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun isPlainHostName (host) + (string-match "\\." host)) + +(defun dnsDomainIs (host dom) + (setq host (url-gateway-nslookup-host host)) + (string-match (concat (regexp-quote dom) "$") host)) + +(defun dnsResolve (host) + (url-gateway-nslookup-host host)) + +(defun isResolvable (host) + (if (string-match "^[0-9.]+$" host) + t + (not (string= host (url-gateway-nslookup-host host))))) + +(defun isInNet (ip net mask) + (let ((netc (split-string ip "\\.")) + (ipc (split-string net "\\.")) + (maskc (split-string mask "\\."))) + (if (or (/= (length netc) (length ipc)) + (/= (length ipc) (length maskc))) + nil + (setq netc (mapcar 'string-to-int netc) + ipc (mapcar 'string-to-int ipc) + maskc (mapcar 'string-to-int maskc)) + (and + (= (logand (nth 0 netc) (nth 0 maskc)) + (logand (nth 0 ipc) (nth 0 maskc))) + (= (logand (nth 1 netc) (nth 1 maskc)) + (logand (nth 1 ipc) (nth 1 maskc))) + (= (logand (nth 2 netc) (nth 2 maskc)) + (logand (nth 2 ipc) (nth 2 maskc))) + (= (logand (nth 3 netc) (nth 3 maskc)) + (logand (nth 3 ipc) (nth 3 maskc))))))) + +(provide 'url-ns)
--- a/lisp/w3/url-vars.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/url-vars.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; url-vars.el --- Variables for Uniform Resource Locator tool ;; Author: wmperry -;; Created: 1997/03/20 18:03:50 -;; Version: 1.39 +;; Created: 1997/03/26 00:08:38 +;; Version: 1.42 ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -26,7 +26,7 @@ ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defconst url-version (let ((x "p3.0.71")) +(defconst url-version (let ((x "p3.0.74")) (if (string-match "State: \\([^ \t\n]+\\)" x) (substring x (match-beginning 1) (match-end 1)) x))
--- a/lisp/w3/url.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/url.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,13 +1,13 @@ ;;; url.el --- Uniform Resource Locator retrieval tool ;; Author: wmperry -;; Created: 1997/03/20 15:45:21 -;; Version: 1.66 +;; Created: 1997/03/25 00:00:34 +;; Version: 1.68 ;; Keywords: comm, data, processes, hypermedia ;;; LCD Archive Entry: ;;; url|William M. Perry|wmperry@cs.indiana.edu| ;;; Functions for retrieving/manipulating URLs| -;;; 1997/03/20 15:45:21|1.66|Location Undetermined +;;; 1997/03/25 00:00:34|1.68|Location Undetermined ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -97,6 +97,7 @@ (autoload 'url-telnet "url-misc") (autoload 'url-tn3270 "url-misc") (autoload 'url-proxy "url-misc") +(autoload 'url-netrek "url-misc") (autoload 'url-news "url-news") (autoload 'url-nntp "url-news") @@ -907,6 +908,7 @@ (url-register-protocol 'nntp nil 'url-identity-expander "119") (url-register-protocol 'irc nil 'url-identity-expander "6667") (url-register-protocol 'data nil 'url-identity-expander) + (url-register-protocol 'netrek nil 'url-identity-expander) (url-register-protocol 'rlogin) (url-register-protocol 'telnet) (url-register-protocol 'tn3270)
--- a/lisp/w3/w3-cus.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-cus.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-cus.el --- Customization support for Emacs-W3 ;; Author: wmperry -;; Created: 1997/03/18 20:30:34 -;; Version: 1.5 +;; Created: 1997/03/24 06:35:57 +;; Version: 1.7 ;; Keywords: comm, help, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -102,7 +102,7 @@ :group 'w3-files :type 'file) -(defcustom w3-documentation-root "http://www.cs.indiana.edu/elisp/w3/docs/" +(defcustom w3-documentation-root "http://www.cs.indiana.edu/elisp/w3/" "*Where the w3 documentation lives. This MUST end in a slash." :group 'w3-files :type 'string) @@ -125,10 +125,16 @@ (const :tag "Show hyperlinks, ask whether to retrieve them" :value ask) (const :tag "Automatically retrieve frames" :value t))) -(defcustom w3-do-incremental-display nil - "*Whether to do incremental display of pages or not." +(defcustom w3-bullets + '((disc . ?*) + (circle . ?o) + (square . ?#) + (none . ? ) + ) + "*An assoc list of unordered list types mapping to characters to use +as the bullet character." :group 'w3-display - :type 'boolean) + :type 'list) (defcustom w3-echo-link '(title url text name) "*Whether to display the URL of a link when tabbing through links. @@ -149,12 +155,45 @@ (const :tag "Name of the link as defined in the HTML tag" :value name))) -(defcustom w3-horizontal-rule-char ?- +(defcustom w3-horizontal-rule-char nil "*The character to use to create a horizontal rule. Must be the character's code, not a string. This character is -replicated across the screen to create a division." +replicated across the screen to create a division. +If nil W3 will use a terminal graphic character if possible." + :group 'w3-display + :type '(choice (const :tag "Best possible" :value nil) + (character))) + +;;; these three variables control how w3-setup-terminal-chars works +(defcustom w3-use-terminal-characters t + "*Use terminal graphics characters for drawing tables and rules if available" + :group 'w3-display + :type 'boolean) + +(defcustom w3-use-terminal-characters-on-tty nil + "*Use terminal graphics characters for tables and rules even on a tty. +This triggers display bugs on both FSF Emacs and XEmacs. +(Though it's usually tolerable at least on FSF Emacs.)" :group 'w3-display - :type 'character) + :type 'boolean) + +(defcustom w3-use-terminal-glyphs t + "*Use glyphs if possible rather than properties for terminal graphics characters + +Glyphs are probably more efficient but don't work with the most recent versions +of XEmacs and there are some cute tricks we can play with text-properties that +glyphs won't let us do. It may be possible someday to make XEmacs automagically +translate the characters back to ascii characters when pasted into another +buffer. (On the other hand, right now w3-excise-terminal-characters doesn't +work at all if we're using text-properties)." + :group 'w3-display + :type '(choice (const :tag "Use Glyphs" :value t) + (const :tag "Use Text Properties" :value nil))) + +(defcustom w3-do-incremental-display nil + "*Whether to do incremental display of pages or not." + :group 'w3-display + :type 'boolean) (defcustom w3-defined-link-types ;; This is the HTML3.0 list (downcased) plus "made".
--- a/lisp/w3/w3-display.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-display.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-display.el --- display engine v99999 ;; Author: wmperry -;; Created: 1997/03/18 23:20:40 -;; Version: 1.150 +;; Created: 1997/03/26 00:03:00 +;; Version: 1.156 ;; Keywords: faces, help, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -75,9 +75,11 @@ (defmacro w3-get-attribute (attr) (` (cdr-safe (assq (, attr) args)))) - (defmacro w3-get-face-info (info) + (defmacro w3-get-face-info (info &optional other) (let ((var (intern (format "w3-face-%s" info)))) - (` (push (w3-get-style-info (quote (, info)) node (car (, var))) + (` (push (w3-get-style-info (quote (, info)) node + (or (w3-get-attribute (quote (, other))) + (car (, var)))) (, var))))) (defmacro w3-pop-face-info (info) @@ -94,8 +96,8 @@ (w3-get-face-info font-size) (w3-get-face-info text-decoration) ;;(w3-get-face-info pixmap) - (w3-get-face-info color) - (w3-get-face-info background-color) + (w3-get-face-info color color) + (w3-get-face-info background-color bgcolor) (setq w3-face-font-spec (make-font :weight (car w3-face-font-weight) :family (car w3-face-font-family) @@ -285,15 +287,6 @@ (setq string (substring string 0 (match-beginning 0)))) string) -(defvar w3-bullets - '((disc . ?*) - (circle . ?o) - (square . ?#) - (none . ? ) - ) - "*An assoc list of unordered list types mapping to characters to use -as the bullet character.") - (defsubst w3-display-line-break (n) (if (or @@ -728,6 +721,7 @@ ((stringp w3-auto-image-alt) (format w3-auto-image-alt (url-basepath src t))))) (alt (or (w3-get-attribute 'alt) our-alt)) + (c nil) (ismap (and (assq 'ismap args) 'ismap)) (usemap (w3-get-attribute 'usemap)) (base (w3-get-attribute 'base)) @@ -736,6 +730,8 @@ (widget nil) (align (or (w3-get-attribute 'align) (w3-get-style-info 'vertical-align node)))) + (while (setq c (string-match "[\C-i\C-j\C-l\C-m]" alt)) + (aset alt c ? )) (if (assq '*table-autolayout w3-display-open-element-stack) (insert alt) (setq widget (widget-create 'image @@ -757,11 +753,141 @@ ;; The table handling +(defvar w3-table-ascii-border-chars + [nil nil nil ?/ nil ?- ?\\ ?- nil ?\\ ?| ?| ?/ ?- ?| ?+] + "*Vector of ascii characters to use to draw table borders. +This vector is used when terminal characters are unavailable") + +(defvar w3-table-glyph-border-chars + [nil nil nil 11 nil 2 7 14 nil 3 8 6 1 15 4 5] + "Vector of characters to use to draw table borders. +This vector is used when terminal characters are used via glyphs") + +(defvar w3-table-graphic-border-chars + [nil nil nil ?j nil ?q ?m ?v nil ?k ?x ?u ?l ?w ?t ?n] + "Vector of characters to use to draw table borders. +This vector is used when terminal characters are used directly") + +(defvar w3-table-border-chars w3-table-ascii-border-chars + "Vector of characters to use to draw table borders. +w3-setup-terminal-chars sets this to one of +w3-table-ascii-border-chars, +w3-table-glyph-border-chars, or +w3-table-graphic-border-chars.") + +(defsubst w3-table-lookup-char (l u r b) + (aref w3-table-border-chars (logior (if l 1 0) + (if u 2 0) + (if r 4 0) + (if b 8 0)))) + +(defvar w3-terminal-properties nil) + +(defsubst w3-insert-terminal-char (character &optional count inherit) + (if w3-terminal-properties + (set-text-properties (point) + (progn + (insert-char (or character ? ) + (or count 1) inherit) + (point)) + w3-terminal-properties) + (insert-char (or character ? ) (or count 1) inherit))) + +(defsubst w3-horizontal-rule-char nil + (or w3-horizontal-rule-char (w3-table-lookup-char t nil t nil))) + +(defun w3-setup-terminal-chars nil + "Try to find the best set of characters to draw table borders with. +On a console, this can trigger some Emacs display bugs. + +Initializes a number of variables: +w3-terminal-properties to either nil or a list of properties including 'face +w3-table-border-chars to one of the the three other vectors" + (interactive) + (setq w3-table-border-chars w3-table-ascii-border-chars + w3-terminal-properties nil) + (cond + ((and w3-use-terminal-characters + (eq (device-type) 'x)) + (if (find-face 'w3-table-hack-x-face) nil + (make-face 'w3-table-hack-x-face) + (font-set-face-font 'w3-table-hack-x-face + (make-font :family "terminal"))) + (cond + ((not (face-differs-from-default-p 'w3-table-hack-x-face)) + nil) + ((and w3-use-terminal-glyphs (fboundp 'face-id)) + (let ((id (face-id 'w3-table-hack-x-face)) + (c (length w3-table-border-chars))) + (while (> (decf c) 0) + (if (aref w3-table-glyph-border-chars c) + (aset standard-display-table (aref w3-table-glyph-border-chars c) + (vector (+ (* 256 id) + (aref w3-table-graphic-border-chars c)))))) + (setq w3-table-border-chars w3-table-glyph-border-chars + w3-terminal-properties nil))) + (t + (setq w3-table-border-chars w3-table-graphic-border-chars + w3-terminal-properties (list 'start-open t + 'end-open t + 'rear-nonsticky t + 'w3-table-border t + 'face 'w3-table-hack-x-face))))) + ((and w3-use-terminal-characters-on-tty + (eq (device-type) 'tty)) + (let ((c (length w3-table-border-chars))) + (while (> (decf c) 0) + (and (aref w3-table-glyph-border-chars c) + (aref w3-table-graphic-border-chars c) + (standard-display-g1 (aref w3-table-glyph-border-chars c) + (aref w3-table-graphic-border-chars c))))) + (setq w3-table-border-chars w3-table-glyph-border-chars + w3-terminal-properties (list 'w3-table-border t))) + (t + nil)) + w3-table-border-chars) + +(defun w3-unsetup-terminal-characters nil + (interactive) + (w3-excise-terminal-characters (buffer-list)) + (standard-display-default 1 15) + (setq w3-table-border-chars w3-table-ascii-border-chars)) + +(defun w3-excise-terminal-characters (buffs) + "Replace hacked characters with ascii characters in buffers BUFFS. +Should be run before restoring w3-table-border-chars to ascii characters. +This will only work if we used glyphs rather than text properties" + (interactive (list (list (current-buffer)))) + (let ((inhibit-read-only t) + (tr (make-string 16 ? )) + (i 0)) + (while (< i (length tr)) + (aset tr i i) + (setq i (1+ i))) + (setq i 0) + (while (< i (length w3-table-border-chars)) + (and (aref w3-table-border-chars i) + (< (aref w3-table-border-chars i) 16) + (aset tr + (aref w3-table-glyph-border-chars i) + (aref w3-table-ascii-border-chars i))) + (setq i (1+ i))) + (mapcar (function (lambda (buf) + (save-excursion + (set-buffer buf) + (if (eq major-mode 'w3-mode) + (translate-region (point-min) + (point-max) + tr))))) + buffs))) + + (defvar w3-display-table-cut-words-p nil "*Whether to cut words that are oversized in table cells") (defvar w3-display-table-force-borders nil - "*Whether to always draw table borders") + "*Whether to always draw table borders +Can sometimes make the structure of a document clearer") (defun w3-display-table-cut () (save-excursion @@ -828,7 +954,7 @@ (w3-do-incremental-display nil) (hr-regexp (concat "^" (regexp-quote - (make-string 5 w3-horizontal-rule-char)) + (make-string 5 (w3-horizontal-rule-char))) "*$")) ) ;;(push 'left w3-display-alignment-stack) @@ -1042,107 +1168,6 @@ ))) (list rows cols ret-vector)))) -(defvar w3-table-ascii-border-chars - [? ? ? ?/ ? ?- ?\\ ?- ? ?\\ ?| ?| ?/ ?- ?| ?-] - "Vector of ascii characters to use to draw table borders. -w3-table-unhack-border-chars uses this to restore w3-table-border-chars.") - -(defvar w3-table-border-chars w3-table-ascii-border-chars - "Vector of characters to use to draw table borders. -If you set this you should set w3-table-ascii-border-chars to the same value -so that w3-table-unhack-borders can restore the value if necessary. - -A reasonable value is [? ? ? ?/ ? ?- ?\\\\ ?^ ? ?\\\\ ?| ?< ?/ ?- ?> ?-] -Though i recommend replacing the ^ with - and the < and > with |") - -(defsubst w3-table-lookup-char (l u r b) - (aref w3-table-border-chars (logior (if l 1 0) - (if u 2 0) - (if r 4 0) - (if b 8 0)))) - -(defun w3-table-hack-borders nil - "Try to find the best set of characters to draw table borders with. -I definitely recommend trying this on X. -On a console, this can trigger some Emacs display bugs. - -I haven't tried this on XEmacs or any window-system other than X." - (interactive) - (case (device-type) - (x - (let ((id (or (and (find-face 'w3-table-hack-x-face) - (face-id 'w3-table-hack-x-face)) - (progn - (make-face 'w3-table-hack-x-face) - (font-set-face-font 'w3-table-hack-x-face - (make-font :family "terminal")) - (face-id 'w3-table-hack-x-face))))) - (if (not (face-differs-from-default-p 'w3-table-hack-x-face)) - nil - (aset standard-display-table 1 (vector (+ (* 256 id) ?l))) - (aset standard-display-table 2 (vector (+ (* 256 id) ?q))) - (aset standard-display-table 3 (vector (+ (* 256 id) ?k))) - (aset standard-display-table 4 (vector (+ (* 256 id) ?t))) - (aset standard-display-table 5 (vector (+ (* 256 id) ?n))) - (aset standard-display-table 6 (vector (+ (* 256 id) ?u))) - (aset standard-display-table 7 (vector (+ (* 256 id) ?m))) - (aset standard-display-table 8 (vector (+ (* 256 id) ?x))) - (aset standard-display-table 11 (vector (+ (* 256 id) ?j))) - (aset standard-display-table 14 (vector (+ (* 256 id) ?v))) - (aset standard-display-table 15 (vector (+ (* 256 id) ?w))) - (setq w3-table-border-chars [? ? ? 11 ? 2 7 14 ? 3 8 6 1 15 4 5]) - (setq w3-horizontal-rule-char 2)))) - (tty - (standard-display-g1 1 108) ; ulcorner - (standard-display-g1 2 113) ; hline - (standard-display-g1 3 107) ; urcorner - (standard-display-g1 4 116) ; leftt - (standard-display-g1 5 110) ; intersection - (standard-display-g1 6 117) ; rightt - (standard-display-g1 7 109) ; llcorner - (standard-display-g1 8 120) ; vline - (standard-display-g1 11 106) ; lrcorner - (standard-display-g1 14 118) ; upt - (standard-display-g1 15 119) ; downt - (setq w3-table-border-chars [? ? ? 11 ? 2 7 14 ? 3 8 6 1 15 4 5]) - (setq w3-horizontal-rule-char 2)) - (otherwise - (error "Unknown window-system, can't do any better than ascii borders"))) - ) - -(defun w3-table-unhack-borders nil - (interactive) - (w3-table-excise-hack (buffer-list)) - (standard-display-default 1 15) - (setq w3-table-border-chars w3-table-ascii-border-chars) - (setq w3-horizontal-rule-char ?-)) - -(defun w3-table-excise-hack (buffs) - "Replace hacked characters with ascii characters in buffers BUFFS. -Should be run before restoring w3-table-border-chars to ascii characters." - (interactive (list (list (current-buffer)))) - (let ((inhibit-read-only t) - (tr (make-string 16 ? )) - (i 0)) - (while (< i (length tr)) - (aset tr i i) - (setq i (1+ i))) - (setq i 0) - (while (< i (length w3-table-border-chars)) - (if (< (aref w3-table-border-chars i) 16) - (aset tr - (aref w3-table-border-chars i) - (aref w3-table-ascii-border-chars i))) - (setq i (1+ i))) - (mapcar (function (lambda (buf) - (save-excursion - (set-buffer buf) - (if (eq major-mode 'w3-mode) - (translate-region (point-min) - (point-max) - tr))))) - buffs))) - (defun w3-display-table (node) (let* ((dimensions (w3-display-table-dimensions node)) (num-cols (max (cadr dimensions) 1)) @@ -1349,11 +1374,12 @@ (setq bflag (/= (aref table-colspans i) 0)) (setq tflag (/= (aref prev-colspans i) 0)) - (insert (w3-table-lookup-char lflag tflag rflag bflag)) + (w3-insert-terminal-char (w3-table-lookup-char lflag tflag rflag bflag)) (setq lflag t) (cond ((= (aref prev-rowspans i) 0) - (insert-char (w3-table-lookup-char t nil t nil) - (aref column-dimensions i)) + (w3-insert-terminal-char + (w3-table-lookup-char t nil t nil) + (aref column-dimensions i)) (setq i (1+ i))) ((car (aref formatted-cols i)) (insert (pop (aref formatted-cols i))) @@ -1365,8 +1391,9 @@ (setq lflag nil) (setq i (+ i (max (aref table-colspans i) (aref prev-colspans i) 1)))))) - (insert (w3-table-lookup-char lflag (/= row 1) nil t) "\n")) - + (w3-insert-terminal-char (w3-table-lookup-char lflag (/= row 1) nil t)) + (insert "\n")) + ;; recalculate height (in case we've shortened a rowspanning cell (setq height 0 i 0) @@ -1377,13 +1404,14 @@ ;; Insert a row back in original buffer (while (> height 0) - (insert fill-prefix (w3-table-lookup-char nil t nil t)) + (insert fill-prefix) + (w3-insert-terminal-char (w3-table-lookup-char nil t nil t)) (setq i 0) (while (< i num-cols) (if (car (aref formatted-cols i)) (insert (pop (aref formatted-cols i))) (insert-char ? (aref table-colwidth i))) - (insert (w3-table-lookup-char nil t nil t)) + (w3-insert-terminal-char (w3-table-lookup-char nil t nil t)) (setq i (+ i (max (aref table-colspans i) 1)))) (insert "\n") ;;(and w3-do-incremental-display (w3-pause)) @@ -1418,12 +1446,15 @@ (let (tflag lflag) (while (< i num-cols) (setq tflag (/= (aref prev-colspans i) 0)) - (insert (w3-table-lookup-char lflag tflag t nil)) + (w3-insert-terminal-char (w3-table-lookup-char lflag tflag t nil)) (setq lflag t) - (insert-char (w3-table-lookup-char t nil t nil) - (aref column-dimensions i)) + (w3-insert-terminal-char + (w3-table-lookup-char t nil t nil) + (aref column-dimensions i)) (setq i (1+ i))) - (insert (w3-table-lookup-char t t nil nil) "\n"))) + (w3-insert-terminal-char + (w3-table-lookup-char t t nil nil)) + (insert "\n"))) ) (pop w3-display-open-element-stack))))) @@ -1708,14 +1739,11 @@ (let* ((perc (or (w3-get-attribute 'width) (w3-get-style-info 'width node) "100%")) - (rule nil) (width nil)) (setq perc (/ (min (string-to-int perc) 100) 100.0) - width (* fill-column perc) - rule (make-string (max (truncate width) 0) - w3-horizontal-rule-char) - node (list 'hr nil (list rule))) - (w3-handle-content node))) + width (truncate (* fill-column perc))) + (w3-insert-terminal-char (w3-horizontal-rule-char) width) + (w3-handle-empty-tag))) (map ; Client side imagemaps (let ((name (or (w3-get-attribute 'name) (w3-get-attribute 'id) @@ -1795,6 +1823,15 @@ (w3-handle-content node) (setq w3-current-isindex (cons action prompt))) ) + ((html body) + (let ((fore (car (delq nil (copy-list w3-face-color)))) + (back (car (delq nil (copy-list w3-face-background-color)))) + ) + (if (and fore font-running-xemacs) + (font-set-face-foreground 'default fore (current-buffer))) + (if (and back font-running-xemacs) + (font-set-face-background 'default back (current-buffer))) + (w3-handle-content node))) (*document (let ((info (mapcar (lambda (x) (cons x (symbol-value x))) w3-persistent-variables))) @@ -1808,7 +1845,10 @@ w3-right-margin) (or w3-maximum-line-length (window-width)))) - (switch-to-buffer (current-buffer)) + (condition-case nil + (switch-to-buffer (current-buffer)) + (error (message "W3 buffer %s is being drawn." (buffer-name (current-buffer))))) + (buffer-disable-undo (current-buffer)) (mapcar (function (lambda (x) (set (car x) (cdr x)))) info) ;; ACK! We don't like filladapt mode! @@ -1879,21 +1919,13 @@ w3-current-form-number) args)) (w3-handle-content node))) -; (keygen -; (w3-form-add-element 'keygen -; (or (w3-get-attribute 'name) -; (w3-get-attribute 'id) -; "keygen") -; nil ; value -; nil ; size -; nil ; maxlength -; nil ; default -; w3-display-form-id ; action -; nil ; options -; w3-current-form-number -; (w3-get-attribute 'id) ; id -; nil ; checked -; (car w3-active-faces))) + (keygen + (w3-form-add-element + (w3-display-normalize-form-info + (cons '(type . "keygen") + args)) + w3-active-faces) + (w3-handle-empty-tag)) (input (w3-form-add-element (w3-display-normalize-form-info args) @@ -1957,8 +1989,7 @@ (w3-handle-empty-tag)))) (textarea (let* ((plist (w3-display-normalize-form-info args)) - (value (w3-normalize-spaces - (apply 'concat (nth 2 node))))) + (value (apply 'concat (nth 2 node)))) (setq plist (plist-put plist 'type 'multiline) plist (plist-put plist 'value value)) (w3-form-add-element plist w3-active-faces)) @@ -2040,11 +2071,13 @@ (defun w3-fixup-eol-faces () ;; Remove 'face property at end of lines - underlining screws up stuff + ;; also remove 'mouse-face property at the beginning and end of lines (let ((inhibit-read-only t)) (save-excursion (goto-char (point-min)) - (while (search-forward "\n" nil t) - (put-text-property (match-beginning 0) (match-end 0) 'face nil))))) + (while (search-forward "[ \t]*\n[ \t]*" nil t) + (remove-text-properties (match-beginning 0) (match-end 0) + '(face nil mouse-face nil) nil))))) (defsubst w3-finish-drawing () (let (url glyph widget) @@ -2065,7 +2098,7 @@ (not (eq (device-type) 'tty)) (w3-fixup-eol-faces)) (let ((inhibit-read-only t)) - (put-text-property (point-min) (point-max) 'read-only nil)) + (remove-text-properties (point-min) (point-max) '(read-only) nil)) (message "Drawing... done")) (defun w3-region (st nd)
--- a/lisp/w3/w3-forms.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-forms.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-forms.el --- Emacs-w3 forms parsing code for new display engine ;; Author: wmperry -;; Created: 1997/03/18 23:20:04 -;; Version: 1.79 +;; Created: 1997/03/25 23:33:51 +;; Version: 1.81 ;; Keywords: faces, help, comm, data, languages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -49,7 +49,7 @@ (defvar w3-form-keymap (let ((map (copy-keymap global-map)) - (eol-loc (where-is-internal 'end-of-line nil t))) + (eol-loc (where-is-internal 'end-of-line global-map t))) (if widget-keymap (cl-map-keymap (function (lambda (key binding) @@ -100,6 +100,17 @@ (defsubst w3-form-element-set-widget (obj val) (aset obj 8 val)) (defsubst w3-form-element-set-plist (obj val) (aset obj 9 val)) +(defvar w3-form-valid-key-sizes + '( + ("1024 (Premium)" . 1024) + ("896 (Regular)" . 896) + ("768 (Unleaded)" . 768) + ("512 (Low Grade)" . 512) + ("508 (Woos)" . 508) + ("256 (Test Grade)" . 256) + ) + "An assoc list of available key sizes and meaningful descriptions.") + (defun w3-form-determine-size (el size) (case (w3-form-element-type el) (checkbox 3) @@ -125,6 +136,12 @@ (lambda (x y) (>= (length (car x)) (length (car y))))))))))) + (keygen + (+ (length "Key Length: ") + (apply 'max + (mapcar (function (lambda (pair) + (length (car pair)))) + w3-form-valid-key-sizes)))) (otherwise (or size 22)))) ;;###autoload @@ -348,32 +365,21 @@ :must-match t :value (w3-form-element-value el))) -(defvar w3-form-valid-key-sizes - '( - ("1024 (Premium)" . 1024) - ("896 (Regular)" . 896) - ("768 (Unleaded)" . 768) - ("512 (Low Grade)" . 512) - ("508 (Woos)" . 508) - ("256 (Test Grade)" . 256) - ) - "An assoc list of available key sizes and meaningful descriptions.") - (defun w3-form-create-keygen-list (el face) - (let ((tmp w3-form-valid-key-sizes) - (longest 0) - (options nil)) - (while tmp - (if (> (length (caar tmp)) longest) - (setq longest (length (caar tmp)))) - (setq options (cons (list 'choice-item :tag (caar tmp) - :value (cdar tmp)) options) - tmp (cdr tmp))) + (let* ((size (apply 'max (mapcar (function (lambda (pair) (length (car pair)))) + w3-form-valid-key-sizes))) + (options (mapcar (function (lambda (pair) + (list 'choice-item + :format "%[%t%]" + :menu-tag-get `(lambda (zed) ,(car pair)) + :tag (mule-truncate-string (car pair) size ? ) + :value (cdr pair)))) + w3-form-valid-key-sizes))) (apply 'widget-create 'menu-choice :value 1024 :ignore-case t :tag "Key Length" - :size (1+ longest) + :size size :button-face face :value-face face options))) @@ -795,9 +801,15 @@ (assoc (widget-value widget) (w3-form-element-options formobj))))) (keygen - (cons (w3-form-element-name formobj) - (format "Should create a %d bit RSA key" - (widget-value widget)))) + (condition-case () + (require 'ssl) + (error (error "Not configured for SSL, please read the info pages."))) + (if (fboundp 'ssl-req-user-cert) nil + (error "This version of SSL isn't capable of requesting certificates.")) + (let ((challenge (plist-get (w3-form-element-plist formobj) 'challenge)) + (size (widget-value widget))) + (cons (w3-form-element-name formobj) + (ssl-req-user-cert size challenge)))) ((multiline hidden) (cons (w3-form-element-name formobj) (w3-form-element-value formobj)))
--- a/lisp/w3/w3-menu.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-menu.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-menu.el --- Menu functions for emacs-w3 ;; Author: wmperry -;; Created: 1997/03/18 00:45:01 -;; Version: 1.34 +;; Created: 1997/03/22 17:31:47 +;; Version: 1.35 ;; Keywords: menu, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -45,8 +45,8 @@ (defvar w3-links-menu nil "Menu for w3-mode in XEmacs.") (make-variable-buffer-local 'w3-links-menu) -(defvar w3-use-menus '(file edit view go bookmark options buffers style - emacs nil help) +(defcustom w3-use-menus '(file edit view go bookmark options buffers style + emacs nil help) "*Non-nil value causes W3 to provide a menu interface. A value that is a list causes W3 to install its own menubar. A value of 1 causes W3 to install a \"W3\" item in the Emacs menubar. @@ -75,7 +75,20 @@ NOTE! The current port of Emacs to Windows NT/95 does not support buttons in the menubar, so the 'emacs' keyword is currently ignored -on that platform.") +on that platform." + :group 'w3-menus + :type '(set (const :tag "File related commands" :value file) + (const :tag "Standard editing commands" :value edit) + (const :tag "View document information" :value view) + (const :tag "Navigation" :value go) + (const :tag "Bookmarks" :value bookmark) + (const :tag "Options" :value options) + (const :tag "Buffer list" :value buffers) + (const :tag "Stylesheet information" :value style) + (const :tag "Search engines" :value search) + (const :tag "Toggle to default menus" :value emacs) + (const :tag "Separator" :value nil) + (const :tag "Help" :value help))) (defun w3-menu-hotlist-constructor (menu-items) (or (cdr w3-html-bookmarks)
--- a/lisp/w3/w3-mouse.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-mouse.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ -;;; w3-xemac.el --- XEmacs specific functions for emacs-w3 +;;; w3-menu.el --- Mouse specific functions for emacs-w3 ;; Author: wmperry -;; Created: 1997/02/13 23:05:39 -;; Version: 1.7 +;; Created: 1997/03/23 03:08:58 +;; Version: 1.8 ;; Keywords: mouse, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--- a/lisp/w3/w3-prefs.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-prefs.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-prefs.el --- Preferences panels for Emacs-W3 ;; Author: wmperry -;; Created: 1997/03/14 23:49:47 -;; Version: 1.20 +;; Created: 1997/03/21 15:52:22 +;; Version: 1.23 ;; Keywords: hypermedia, preferences ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -304,7 +304,9 @@ (setq host proxy-entry port nil)) (set (make-local-variable host-var) (or host "")) - (set (make-local-variable port-var) (or port ""))))) + (set (make-local-variable port-var) (or port "")))) + (set (make-local-variable 'w3-preferences-temp-no-proxy) + (cdr-safe (assoc "no_proxy" url-proxy-services)))) (defun w3-preferences-create-proxy-panel () (let ((proxies '("FTP" "Gopher" "HTTP" "Security" "WAIS" "SHTTP" "News")) @@ -335,6 +337,14 @@ :value (format "%5s" (symbol-value port-var))) 'variable port-var) (widget-insert "\n\n")) + (widget-insert " No proxy: ") + (widget-put + (widget-create 'editable-field + :size 40 + :value-face 'underline + :notify 'w3-preferences-generic-variable-callback + :value (or (symbol-value 'w3-preferences-temp-no-proxy) "")) + 'variable 'w3-preferences-temp-no-proxy) (widget-setup))) (defun w3-preferences-save-proxy-panel () @@ -346,6 +356,12 @@ (host nil) (port nil) (new-proxy-services nil)) + (if (/= 0 (length (symbol-value 'w3-preferences-temp-no-proxy))) + (setq new-proxy-services (cons + (cons + "no_proxy" + (symbol-value 'w3-preferences-temp-no-proxy)) + new-proxy-services))) (while proxies (setq proxy (car proxies) proxies (cdr proxies)
--- a/lisp/w3/w3-toolbar.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-toolbar.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-toolbar.el --- Toolbar functions for emacs-w3 ;; Author: wmperry -;; Created: 1997/02/03 15:38:24 -;; Version: 1.8 +;; Created: 1997/03/26 00:01:47 +;; Version: 1.9 ;; Keywords: mouse, toolbar ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -163,7 +163,8 @@ (expand-file-name "w3" data-directory)))) (cond ((not (file-exists-p w3-toolbar-icon-directory)) - (w3-warn 'files "Toolbar directory does not exist.")) + (and w3-running-xemacs + (w3-warn 'files "Toolbar directory does not exist."))) ((not (fboundp 'toolbar-make-button-list)) nil) ((eq w3-toolbar-type 'text)
--- a/lisp/w3/w3-vars.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-vars.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-vars.el,v --- All variable definitions for emacs-w3 ;; Author: wmperry -;; Created: 1997/03/20 18:03:49 -;; Version: 1.112 +;; Created: 1997/03/26 00:08:38 +;; Version: 1.115 ;; Keywords: comm, help, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -33,7 +33,7 @@ (require 'w3-cus) ; Grab everything that is customized (defconst w3-version-number - (let ((x "p3.0.71")) + (let ((x "p3.0.74")) (if (string-match "State:[ \t\n]+.\\([^ \t\n]+\\)" x) (setq x (substring x (match-beginning 1) (match-end 1))) (setq x (substring x 1))) @@ -41,7 +41,7 @@ (function (lambda (x) (if (= x ?-) "." (char-to-string x)))) x "")) "Version # of w3-mode.") -(defconst w3-version-date (let ((x "1997/03/20 18:03:49")) +(defconst w3-version-date (let ((x "1997/03/26 00:08:38")) (if (string-match "Date: \\([^ \t\n]+\\)" x) (substring x (match-beginning 1) (match-end 1)) x))
--- a/lisp/w3/w3-widget.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3-widget.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3-widget.el --- An image widget ;; Author: wmperry -;; Created: 1997/03/11 15:40:22 -;; Version: 1.23 +;; Created: 1997/03/25 23:35:03 +;; Version: 1.25 ;; Keywords: faces, images ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -158,37 +158,6 @@ 'src (widget-get widget 'src) 'ismap server-map))) -(defun widget-image-emacspeak-tty-imagemap (usemap) - (let* ((default nil) - (href nil) - (tag nil) - (options (delete - nil - (mapcar - (function - (lambda (x) - (if (eq (aref x 0) 'default) - (setq default (aref x 2))) - (if (and (not default) (stringp (aref x 2))) - (setq default (aref x 2))) - (setq tag (or (aref x 3) (aref x 2)) - href (aref x 2)) - (and (stringp tag) - (stringp href) - (list 'a - (list - (cons 'href href) - (cons - 'class - (list - (if (url-have-visited-url href) - ":visited" ":link")))) - (list tag))))) - usemap)))) - (w3-display-node (list 'table '((border . "1")) - (w3-display-chop-into-table - (list nil nil options) 3))))) - (defun widget-image-value-create (widget) ;; Insert the printed representation of the value (let ( @@ -218,35 +187,33 @@ (goto-char where) (cond (client-map - (if (featurep 'emacspeak) - (widget-image-emacspeak-tty-imagemap client-map) - (let* ((default nil) - (href nil) - (tag nil) - (options (mapcar - (function - (lambda (x) - (if (eq (aref x 0) 'default) - (setq default (aref x 2))) - (if (and (not default) (stringp (aref x 2))) - (setq default (aref x 2))) - (list 'choice-item - :format "%[%t%]" - :tag (or (aref x 3) (aref x 2)) - :value (aref x 2)))) client-map))) - (setq real-widget - (apply 'widget-create 'menu-choice - :tag (or (widget-get widget :tag) "Imagemap") - :notify (widget-get widget :notify) - :action (widget-get widget :action) - :value default - :parent widget - :help-echo 'widget-image-summarize - options))))) + (let* ((default nil) + (href nil) + (tag nil) + (options (mapcar + (function + (lambda (x) + (if (eq (aref x 0) 'default) + (setq default (aref x 2))) + (if (and (not default) (stringp (aref x 2))) + (setq default (aref x 2))) + (list 'choice-item + :format "%[%t%]" + :tag (or (aref x 3) (aref x 2)) + :value (aref x 2)))) client-map))) + (setq real-widget + (apply 'widget-create 'menu-choice + :tag (or (widget-get widget :tag) "Imagemap") + :notify (widget-get widget :notify) + :action (widget-get widget :action) + :value default + :parent widget + :help-echo 'widget-image-summarize + options)))) ((and server-map (stringp href)) (setq real-widget (widget-image-create-subwidget - 'push-button + 'item :format "%[%t%]" :tag alt :delete 'widget-default-delete :value href @@ -255,7 +222,8 @@ (href (setq real-widget (widget-image-create-subwidget - 'push-button :tag (or alt "Image") + 'item :format "%[%t%]" + :tag (or alt "Image") :value href :delete 'widget-default-delete :action (widget-get widget :action) @@ -263,7 +231,8 @@ (alt (setq real-widget (widget-image-create-subwidget - 'push-button :tag alt :format "%[%t%]" + 'item :format "%[%t%]" + :tag alt :tab-order -1 :delete 'widget-default-delete :action (widget-get widget :action)
--- a/lisp/w3/w3.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/w3/w3.el Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ ;;; w3.el --- Main functions for emacs-w3 on all platforms/versions ;; Author: wmperry -;; Created: 1997/03/18 20:31:29 -;; Version: 1.100 +;; Created: 1997/03/26 00:02:30 +;; Version: 1.103 ;; Keywords: faces, help, comm, news, mail, processes, mouse, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -183,7 +183,9 @@ (pop-to-buffer buff) (delete-other-windows)) ((eq w3-notify 'semibully) - (switch-to-buffer buff)) + (condition-case nil + (switch-to-buffer buff) + (error (message "W3 buffer %s is ready." (buffer-name buff))))) ((eq w3-notify 'aggressive) (pop-to-buffer buff)) ((eq w3-notify 'friendly) @@ -1998,6 +2000,8 @@ (setq url-package-version w3-version-number url-package-name "Emacs-W3") + (w3-setup-terminal-chars) + (w3-emit-image-warnings-if-necessary) (cond @@ -2203,7 +2207,8 @@ (w3-preview-this-buffer) (let ((tmp (mapcar (function (lambda (x) (cons x (symbol-value x)))) w3-persistent-variables))) - (kill-all-local-variables) + ;; Oh gross, this kills buffer-local faces in XEmacs + ;;(kill-all-local-variables) (use-local-map w3-mode-map) (setq major-mode 'w3-mode) (setq mode-name "WWW")
--- a/lisp/x11/x-menubar.el Mon Aug 13 08:54:52 2007 +0200 +++ b/lisp/x11/x-menubar.el Mon Aug 13 08:55:10 2007 +0200 @@ -1404,7 +1404,8 @@ (items (cdr mode-popup-menu)) filters) ;; Strip keywords from local menu for attaching them at the top - (while (not (vectorp (car items))) + (while (and items + (symbolp (car items))) (setq items (append filters (list (car items)))) (setq items (cdr items))) ;; If filters contains a keyword already present in
--- a/man/Makefile Mon Aug 13 08:54:52 2007 +0200 +++ b/man/Makefile Mon Aug 13 08:55:10 2007 +0200 @@ -80,11 +80,6 @@ -f texinfo-format-buffer -f save-buffer -mv vm.info* ../info -../info/efs.info : efs.texi - -$(EMACS) $(EMACSFLAGS) -insert efs.texi -l texinfmt \ - -f texinfo-format-buffer -f save-buffer - -mv efs.info* ../info - PERL = perl TEXI2DVI = texi2dvi
--- a/man/custom.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/custom.texi Mon Aug 13 08:55:10 2007 +0200 @@ -13,7 +13,7 @@ @comment node-name, next, previous, up @top The Customization Library -Version: 1.65 +Version: 1.67 @menu * Introduction:: @@ -620,8 +620,9 @@ When you save the customizations, call to @code{custom-set-variables}, @code{custom-set-faces} are inserted into the file specified by @code{custom-file}. By default @code{custom-file} is your @file{.emacs} -file. The two functions will initialize variables and faces as you have -specified. +file. If you use another file, you must explicitly load it yourself. +The two functions will initialize variables and faces as you have +specified. @node Wishlist, , The Init File, Top @comment node-name, next, previous, up
--- a/man/efs.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/efs.texi Mon Aug 13 08:55:10 2007 +0200 @@ -75,7 +75,7 @@ Indices: * Concept Index:: -* Variable and command index:: +* Variable and function index:: @end menu @@ -842,7 +842,7 @@ a login token is specified in your @file{.netrc} file, then this will be used as the default user for @code{<host>}. Otherwise, it is determined based on the value of the variable @code{efs-default-user}. -@vindex{efs-default-user} +@vindex efs-default-user This EFS path syntax can be customised to a certain extent by changing a number of variables. To @@ -855,8 +855,8 @@ A password is required for each host / user pair. This will be prompted for when needed, unless already set by calling @code{efs-set-passwd}, -@findex{efs-set-passwd} or specified in a @emph{valid} @file{~/.netrc} -file. +@findex efs-set-passwd +or specified in a @emph{valid} @file{~/.netrc} file. When EFS prompts for a password, it provides defaults from its cache of currently known passwords. The defaults are ordered such that passwords @@ -865,7 +865,7 @@ defaults with @kbd{C-n} to cycle forwards and @kbd{C-p} to cycle backwards. The list is circular. -@subsection Passwords for user @t{anonymous} +@subsection Passwords for anonymous user Passwords for the user @t{anonymous} (or @t{ftp}) are handled specially. The variable @code{efs-generate-anonymous-password} controls what @@ -1091,7 +1091,7 @@ for every FTP transfer. Having this set all the time is annoying, but it is useful to give special treatment to a small set of files. There is also a variable @code{efs-text-file-name-regexp}. This is tested -@vindex {efs-text-file-name-regexp} +@vindex efs-text-file-name-regexp before @code{efs-binary-file-name-regexp}, so if you set @code{efs-text-file-name-regexp} to a non-trivial regular expression, and @code{efs-binary-file-name-regexp} to @samp{".*"}, the result will @@ -1671,7 +1671,7 @@ @end enumerate -@node Concept Index, Variable and command index, Bugs, Top +@node Concept Index, Variable and function index, Bugs, Top @comment node-name, next, previous, up @unnumbered Concept Index
--- a/man/gnus.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/gnus.texi Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Gnus 5.4.36 Manual +@settitle Gnus 5.4.37 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -287,7 +287,7 @@ @tex @titlepage -@title Gnus 5.4.36 Manual +@title Gnus 5.4.37 Manual @author by Lars Magne Ingebrigtsen @page @@ -323,7 +323,7 @@ spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Gnus 5.4.36. +This manual corresponds to Gnus 5.4.37. @end ifinfo
--- a/man/hypb-mouse.txt Mon Aug 13 08:54:52 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -============================================================================== - Smart Keys -Context Action Key Assist Key -============================================================================== -Hyperbole - On a menu item Item is activated Item help - On an explicit button Button is activated Button help - Reading argument - 1st press at an arg value Value copied to minibuffer <- same - 2nd press at an arg value Value used as argument <- same - In minibuffer Minibuf arg is applied Completion help - On an implicit button Button is activated Button help - Within an outline cell Collapses and expands Shows tree props - Left of an outline cell Creates a klink Moves a tree - Wrolo Match Buffer Edits entries and mails to e-mail addresses - -Mouse or Keyboard Display Control - Line end, not end of buffer - smart-scroll-proportional - = t (default) Makes curr line top line Bottom line - = nil Scrolls up a windowful Scrolls down - End of Any Help buffer Screen restored to previous state - -Mouse-only Control - Modeline down & wind release Resize window height <- same - Drag from shared window side - or from left of scroll bar Resize window width <- same - Drag between windows Create/modify a link but Swap window buffers - Horizontal drag within window - Left to right Scroll to buffer end Split window across - Right to left Scroll to buffer begin Delete window - Vertical drag within window Split window sideways <- same - Diagonal drag within window Save ring screen-config Restore ring config - Click in modeline - Left window edge Bury buffer Unbury bottom buf - Right window edge Info Smart Key summary - Otherwise Action Key Hook Assist Key Hook - -Special Modes - C,C++,Objective-C,Java Modes Jumps to id/include def Jumps to next def - Java Cross-Reference Tag Jumps to identifier def Jumps to next def - Assembly Language Mode Jumps to id/include def Jumps to next def - Any Lisp or Fortran Mode Jumps to id def Jumps to next def - Emacs Lisp Compiler Error Jumps to def with error <- same - Grep or Occur Match Jumps to match source line <- same - Multi-buffer Occur Match Jumps to match source line <- same - Outline Major/Minor Modes Collapses, expands, and moves outline entries - Man Apropos Displays man page entry <- same - Man Pages Follows cross refs, file refs and C code refs - Buffer Menu Saves, deletes and displays buffers - -Emacs Info Reader - Menu Entry or Cross Ref Jumps to referent <- same - Up, Next or Prev Header Jumps to referent Jumps to prior node - File entry of Header Jumps to top node Jumps to (DIR) node - End of current node Jumps to next node Jumps to prev node - Anywhere else Scrolls up a windowful Scrolls down a wind - -Subsystems - Calendar Scrolls or shows appts Scrolls/marks dates - Dired Mode Views and deletes files from directory listing - GNUS News Reader Toggles group subscriptions, gets new news, - and browses articles - Mail reader and Summaries Browses, deletes and expunges messages - OO-Browser Browses classes and elements - Tar Mode Views and edits files from tar archive files - -Any other context (defaults) Hyperbole top menu Smart Key summary -==============================================================================
--- a/man/internals/Makefile Mon Aug 13 08:54:52 2007 +0200 +++ b/man/internals/Makefile Mon Aug 13 08:55:10 2007 +0200 @@ -19,6 +19,7 @@ VERSION=1.0 NAME=internals +MAKEINFO = makeinfo manual = xemacs-internals-manual-19-$(VERSION) # Uncomment this line for permuted index. @@ -32,7 +33,7 @@ info : ../../info/$(NAME).info ../../info/$(NAME).info: $(srcs) index.texi - makeinfo $(NAME).texi + $(MAKEINFO) $(NAME).texi dvi : $(NAME).dvi
--- a/man/internals/internals.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/internals/internals.texi Mon Aug 13 08:55:10 2007 +0200 @@ -7,7 +7,7 @@ @ifinfo Copyright @copyright{} 1992 - 1996 Ben Wing. -Copyright @copyright{} 1996 Sun Microsystems. +Copyright @copyright{} 1996, 1997 Sun Microsystems. Copyright @copyright{} 1994, 1995 Free Software Foundation. Copyright @copyright{} 1994, 1995 Board of Trustees, University of Illinois. @@ -59,9 +59,10 @@ @titlepage @title XEmacs Internals Manual -@subtitle Version 1.0, March 1996 +@subtitle Version 1.1, March 1997 @author Ben Wing +@author Martin Buchholz @page @vskip 0pt plus 1fill @@ -72,8 +73,8 @@ Copyright @copyright{} 1994, 1995 Board of Trustees, University of Illinois. @sp 2 -Version 1.0 @* -March, 1996.@* +Version 1.1 @* +March, 1997.@* Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -870,7 +871,7 @@ operations that make XEmacs useful as an editor as well as just a Lisp environment, and also contains many add-on packages that allow XEmacs to browse directories, act as a mail and Usenet news reader, -compile Lisp code, etc. There is actually a lot more Lisp code than +compile Lisp code, etc. There is actually more Lisp code than C code associated with XEmacs, but much of the Lisp code is peripheral to the actual operation of the editor. The Lisp code all lies in subdirectories underneath the @file{lisp/} directory. @@ -889,15 +890,15 @@ programs that are used in connection with XEmacs. Some of them are used during the build process; others are used to perform certain functions that cannot conveniently be placed in the XEmacs executable (e.g. the -@file{movemail} program for fetching mail out of /var/spool/mail, which -must be setgid to @file{mail} on many systems; and the 'gnuclient' -program, which allows an external script to communicate with a running -XEmacs process). +@file{movemail} program for fetching mail out of @file{/var/spool/mail}, +which must be setgid to @file{mail} on many systems; and the +@file{gnuclient} program, which allows an external script to communicate +with a running XEmacs process). The @file{man/} directory contains the sources for the XEmacs documentation. It is mostly in a form called Texinfo, which can be -converted into either a printed document (by passing it through TeX) or -into on-line documentation called @dfn{info files}. +converted into either a printed document (by passing it through @TeX{}) +or into on-line documentation called @dfn{info files}. The @file{info/} directory contains the results of formatting the XEmacs documentation as @dfn{info files}, for on-line use. These files @@ -940,13 +941,12 @@ cause it to initialize itself, read in a number of basic Lisp files, and then dump itself out into a new executable called @file{xemacs}. This new executable has been pre-initialized and contains pre-digested Lisp -code that is necessary for the editor to function (this includes some -extremely basic Lisp functions, e.g. @code{not}, that can be defined in -terms of other Lisp primitives; some initialization code that is called -when certain objects, such as frames, are created; and all of the -standard keybindings and code for the actions they result in). This -executable, @file{xemacs}, is the executable that you run to use the -XEmacs editor. +code that is necessary for the editor to function (this includes most +basic Lisp functions, e.g. @code{not}, that can be defined in terms of +other Lisp primitives; some initialization code that is called when +certain objects, such as frames, are created; and all of the standard +keybindings and code for the actions they result in). This executable, +@file{xemacs}, is the executable that you run to use the XEmacs editor. @node XEmacs From the Inside, The XEmacs Object System (Abstractly Speaking), XEmacs From the Perspective of Building, Top @chapter XEmacs From the Inside @@ -954,7 +954,7 @@ Internally, XEmacs is quite complex, and can be very confusing. To simplify things, it can be useful to think of XEmacs as containing an event loop that ``drives'' everything, and a number of other subsystems, -such as a Lisp engine and a redisplay mechanism. Each of these others +such as a Lisp engine and a redisplay mechanism. Each of these other subsystems exists simultaneously in XEmacs, and each has a certain state. The flow of control continually passes in and out of these different subsystems in the course of normal operation of the editor. @@ -986,8 +986,8 @@ The buffer mechanism is responsible for keeping track of what buffers exist and what text is in them. It is periodically given commands (usually from the user) to insert or delete text, create a buffer, etc. -When it receives a textual-change command, it tells the redisplay -mechanism about this. +When it receives a text-change command, it notifies the redisplay +mechanism. @item The redisplay mechanism is responsible for making sure that windows and @@ -1183,7 +1183,7 @@ XEmacs Lisp also contains numerous specialized objects used to implement the editor: -@table @asis +@table @code @item buffer Stores text like a string, but is optimized for insertion and deletion and has certain other properties that can be set. @@ -1232,7 +1232,7 @@ There are some other, less-commonly-encountered general objects: -@table @asis +@table @code @item hashtable An object that maps from an arbitrary Lisp object to another arbitrary Lisp object, using hashing for fast lookup. @@ -1256,7 +1256,7 @@ And some strange special-purpose objects: -@table @asis +@table @code @item charset @itemx coding-system Objects used when MULE, or multi-lingual/Asian-language, support is @@ -1370,17 +1370,18 @@ @end example (where @samp{^[} actually is an @samp{ESC} character) converts to a -particular Kanji character. (To decode this gook: @samp{ESC} begins an -escape sequence; @samp{ESC $ (} is a class of escape sequences meaning -``switch to a 94x94 character set''; @samp{ESC $ ( B} means ``switch to -Japanese Kanji''; @samp{#} and @samp{&} collectively index into a -94-by-94 array of characters [subtract 33 from the ASCII value of each -character to get the corresponding index]; @samp{ESC (} is a class of -escape sequences meaning ``switch to a 94 character set''; @samp{ESC (B} -means ``switch to US ASCII''. It is a coincidence that the letter -@samp{B} is used to denote both Japanese Kanji and US ASCII. If the -first @samp{B} were replaced with an @samp{A}, you'd be requesting a -Chinese Hanzi character from the GB2312 character set.) +particular Kanji character when using an ISO2022-based coding system for +input. (To decode this gook: @samp{ESC} begins an escape sequence; +@samp{ESC $ (} is a class of escape sequences meaning ``switch to a +94x94 character set''; @samp{ESC $ ( B} means ``switch to Japanese +Kanji''; @samp{#} and @samp{&} collectively index into a 94-by-94 array +of characters [subtract 33 from the ASCII value of each character to get +the corresponding index]; @samp{ESC (} is a class of escape sequences +meaning ``switch to a 94 character set''; @samp{ESC (B} means ``switch +to US ASCII''. It is a coincidence that the letter @samp{B} is used to +denote both Japanese Kanji and US ASCII. If the first @samp{B} were +replaced with an @samp{A}, you'd be requesting a Chinese Hanzi character +from the GB2312 character set.) @example "foobar" @@ -1513,7 +1514,7 @@ @cindex record type Note that there are only eight types that the tag can represent, but many more actual types than this. This is handled by having -one of the tag types specify a meta-object called a @dfn{record}; +one of the tag types specify a meta-type called a @dfn{record}; for all such objects, the first four bytes of the pointed-to structure indicate what the actual type is. @@ -1537,10 +1538,11 @@ the proper mask. Then, pointers retrieved from Lisp objects are automatically OR'ed with this value prior to being used. - A corollary of the previous paragraph is that @strong{stack-allocated -structures cannot be put into Lisp objects}. The stack is generally -located near the top of memory; if you put such a pointer into a Lisp -object, it will get its top bits chopped off, and you will lose. + A corollary of the previous paragraph is that @strong{(pointers to) +stack-allocated structures cannot be put into Lisp objects}. The stack +is generally located near the top of memory; if you put such a pointer +into a Lisp object, it will get its top bits chopped off, and you will +lose. Various macros are used to construct Lisp objects and extract the components. Macros of the form @code{XINT()}, @code{XCHAR()}, @@ -1565,17 +1567,17 @@ in a pointer being dereferenced as the wrong type of structure, with unpredictable (and sometimes not easily traceable) results. - There are similar @code{XSET()} macros that construct a Lisp object. -These macros are of the form @code{XSET (@var{lvalue}, @var{result})}, + There are similar @code{XSET@var{TYPE}()} macros that construct a Lisp object. +These macros are of the form @code{XSET@var{TYPE} (@var{lvalue}, @var{result})}, i.e. they have to be a statement rather than just used in an expression. The reason for this is that standard C doesn't let you ``construct'' a structure (but GCC does). Granted, this sometimes isn't too convenient; for the case of integers, at least, you can use the function @code{make_number()}, which constructs and @emph{returns} an integer -Lisp object. Note that the @code{XSET()} macros are also affected by -@code{ERROR_CHECK_TYPECHECK} and make sure that the structure is of the right -type in the case of record types, where the type is contained in -the structure. +Lisp object. Note that the @code{XSET@var{TYPE}()} macros are also +affected by @code{ERROR_CHECK_TYPECHECK} and make sure that the +structure is of the right type in the case of record types, where the +type is contained in the structure. @node Rules When Writing New C Code, A Summary of the Various XEmacs Modules, How Lisp Objects Are Represented in C, Top @chapter Rules When Writing New C Code @@ -1603,9 +1605,9 @@ declares any global Lisp variables you have added and initializes global C variables in the module. For each such function, declare it in @file{symsinit.h} and make sure it's called in the appropriate place in -@code{main()}. @strong{Important}: There are stringent requirements on +@file{emacs.c}. @strong{Important}: There are stringent requirements on exactly what can go into these functions. See the comment in -@code{main()}. The reason for this is to avoid obscure unwanted +@file{emacs.c}. The reason for this is to avoid obscure unwanted interactions during initialization. If you don't follow these rules, you'll be sorry! If you want to do anything that isn't allowed, create a @code{complex_vars_of_*()} function for it. Doing this is tricky, @@ -1613,7 +1615,8 @@ so that all the initialization dependencies work out. Every module includes @file{<config.h>} (angle brackets so that -@samp{--srcdir} works correctly) and @file{lisp.h}. @file{config.h} +@samp{--srcdir} works correctly; @file{config.h} may or may not be in +the same directory as the C sources) and @file{lisp.h}. @file{config.h} should always be included before any other header files (including system header files) to ensure that certain tricks played by various @file{s/} and @file{m/} files work out correctly. @@ -1672,42 +1675,33 @@ @cindex garbage collection protection @smallexample @group -DEFUN ("or", For, Sor, 0, UNEVALLED, 0 /* +DEFUN ("or", For, 0, UNEVALLED, 0, /* Eval args until one of them yields non-nil, then return that value. The remaining args are not evalled at all. -@end group -@group If all args return nil, return nil. -*/ ) - (args) - Lisp_Object args; +*/ + (args)) @{ /* This function can GC */ REGISTER Lisp_Object val; Lisp_Object args_left; struct gcpro gcpro1; -@end group - -@group + if (NILP (args)) return Qnil; args_left = args; GCPRO1 (args_left); -@end group - -@group + do @{ val = Feval (Fcar (args_left)); if (!NILP (val)) - break; + break; args_left = Fcdr (args_left); @} while (!NILP (args_left)); -@end group - -@group + UNGCPRO; return val; @} @@ -1718,23 +1712,25 @@ @code{DEFUN} macro. Here is a template for them: @example -DEFUN (@var{lname}, @var{fname}, @var{sname}, @var{min}, @var{max}, @var{interactive} /* @var{doc} */ ) +DEFUN (@var{lname}, @var{fname}, @var{min}, @var{max}, @var{interactive}, /* +@var{docstring} +*/ + (@var{arglist}) ) @end example @table @var @item lname -This is the name of the Lisp symbol to define as the function name; in -the example above, it is @code{or}. +This string is the name of the Lisp symbol to define as the function +name; in the example above, it is @code{"or"}. @item fname -This is the C function name for this function. This is -the name that is used in C code for calling the function. The name is, -by convention, @samp{F} prepended to the Lisp name, with all dashes -(@samp{-}) in the Lisp name changed to underscores. Thus, to call this -function from C code, call @code{For}. Remember that the arguments must -be of type @code{Lisp_Object}; various macros and functions for creating -values of type @code{Lisp_Object} are declared in the file -@file{lisp.h}. +This is the C function name for this function. This is the name that is +used in C code for calling the function. The name is, by convention, +@samp{F} prepended to the Lisp name, with all dashes (@samp{-}) in the +Lisp name changed to underscores. Thus, to call this function from C +code, call @code{For}. Remember that the arguments are of type +@code{Lisp_Object}; various macros and functions for creating values of +type @code{Lisp_Object} are declared in the file @file{lisp.h}. Primitives whose names are special characters (e.g. @code{+} or @code{<}) are named by spelling out, in some fashion, the special @@ -1743,13 +1739,13 @@ characters are spelled out in some creative way, e.g. @code{let*} becomes @code{FletX()}. -@item sname -This is a C variable name to use for a structure that holds the data for +Each function also has an associated structure that holds the data for the subr object that represents the function in Lisp. This structure conveys the Lisp symbol name to the initialization routine that will -create the symbol and store the subr object as its definition. By -convention, this name is always @var{fname} with @samp{F} replaced with -@samp{S}. +create the symbol and store the subr object as its definition. The C +variable name of this structure is always @samp{S} prepended to the +@var{fname}. You hardly ever need to be aware of the existence of this +structure. @item min This is the minimum number of arguments that the function requires. The @@ -1762,8 +1758,8 @@ @code{MANY}, indicating an unlimited number of evaluated arguments (the equivalent of @code{&rest}). Both @code{UNEVALLED} and @code{MANY} are macros. If @var{max} is a number, it may not be less than @var{min} and -it may not be greater than 12. (If you need to add a function with -more than 12 arguments, either use the @code{MANY} form or edit the +it may not be greater than 8. (If you need to add a function with +more than 8 arguments, either use the @code{MANY} form or edit the definition of @code{DEFUN} in @file{lisp.h}. If you do the latter, make sure to also add another clause to the switch statement in @code{primitive_funcall().}) @@ -1775,46 +1771,51 @@ called interactively. A value of @code{""} indicates a function that should receive no arguments when called interactively. -@item doc +@item docstring This is the documentation string. It is written just like a -documentation string for a function defined in Lisp; in particular, -the first line should be a single sentence. Note how the documentation -string is enclosed in a comment, none of the documentation is placed -on the same lines as the comment-start and comment-end characters, and -the comment-start characters are on the same line as the interactive +documentation string for a function defined in Lisp; in particular, the +first line should be a single sentence. Note how the documentation +string is enclosed in a comment, none of the documentation is placed on +the same lines as the comment-start and comment-end characters, and the +comment-start characters are on the same line as the interactive specification. @file{make-docfile}, which scans the C files for -documentation strings, is very particular about what it looks for, -and will not properly note the doc string if it's not in this exact -format. -@end table - - You are free to put the various arguments to @code{DEFUN} on separate +documentation strings, is very particular about what it looks for, and +will not properly extract the doc string if it's not in this exact format. + +You are free to put the various arguments to @code{DEFUN} on separate lines to avoid overly long lines. However, make sure to put the comment-start characters for the doc string on the same line as the -interactive specification, and put a newline directly after them -(and before the comment-end characters). - - After the call to the @code{DEFUN} macro, you must write the argument -name list that every C function must have, followed by ordinary C -declarations for the arguments. For a function with a fixed maximum -number of arguments, declare a C argument for each Lisp argument, and -give them all type @code{Lisp_Object}. When a Lisp function has no -upper limit on the number of arguments, its implementation in C actually -receives exactly two arguments: the first is the number of Lisp -arguments, and the second is the address of a block containing their -values. They have types @code{int} and @w{@code{Lisp_Object *}}. - - The names of the C arguments will be used as the names of the arguments -to the Lisp primitive as displayed in its documentation, modulo the -same concerns described above for @code{F...} names (in particular, +interactive specification, and put a newline directly after them (and +before the comment-end characters). + +@item arglist +This is the comma-separated list of arguments to the C function. For a +function with a fixed maximum number of arguments, provide a C argument +for each Lisp argument. In this case, unlike regular C functions, the +types of the arguments are not declared; they are simply always of type +@code{Lisp_Object}. + +The names of the C arguments will be used as the names of the arguments +to the Lisp primitive as displayed in its documentation, modulo the same +concerns described above for @code{F...} names (in particular, underscores in the C arguments become dashes in the Lisp arguments). There is one additional kludge: A C argument called @code{defalt} becomes the Lisp argument @code{default}. This deliberate misspelling is done because @code{default} is a reserved word in the C language. - Note that you @emph{must} use old-style prototypes for the arguments -to @code{DEFUN}, even though all other functions in the C code use -new-style prototypes. +A Lisp function with @w{@var{max} = @code{UNEVALLED}} is a +@w{@dfn{special form}}; its arguments are not evaluated. Instead it +receives one argument of type @code{Lisp_Object}, a (Lisp) list of the +unevaluated arguments, conventionally named @code{(args)}. + +When a Lisp function has no upper limit on the number of arguments, +specify @w{@var{max} = @code{MANY}}. In this case its implementation in +C actually receives exactly two arguments: the number of Lisp arguments +(an @code{int}) and the address of a block containing their values (a +@w{@code{Lisp_Object *}}). In this case only are the C types specified +in the @var{arglist}: @w{@code{(int nargs, Lisp_Object *args)}}. + +@end table Within the function @code{For} itself, note the use of the macros @code{GCPRO1} and @code{UNGCPRO}. @code{GCPRO1} is used to ``protect'' @@ -1851,14 +1852,14 @@ @xref{GCPROing, ,@code{GCPRO}ing}, for full details on how to do this. What @code{DEFUN} actually does is declare a global structure of -type @code{Lisp_Subr} whose name begins with a capital @samp{S} and +type @code{Lisp_Subr} whose name begins with capital @samp{SF} and which contains information about the primitive (e.g. a pointer to the function, its minimum and maximum allowed arguments, a string describing its Lisp name); @code{DEFUN} then begins a normal C function declaration using the @code{F...} name. The Lisp subr object that is the function definition of a primitive (i.e. the object in the function slot of the symbol that names the primitive) actually points to this -@samp{S} structure; when @code{Feval} encounters a subr, it looks in the +@samp{SF} structure; when @code{Feval} encounters a subr, it looks in the structure to find out how to call the C function. Defining the C function is not enough to make a Lisp primitive @@ -1868,21 +1869,21 @@ be seen by Lisp code.) The code looks like this: @example -defsubr (&@var{subr-structure-name}); +DEFSUBR (@var{fname}); @end example -@noindent -Here @var{subr-structure-name} is the name you used as the third -argument to @code{DEFUN}. - - This call to @code{defsubr} should go in the @code{syms_of_*()} +@noindent +Here @var{fname} is the name you used as the second argument to +@code{DEFUN}. + + This call to @code{DEFSUBR} should go in the @code{syms_of_*()} function at the end of the module. If no such function exists, create it and make sure to also declare it in @file{symsinit.h} and call it from the appropriate spot in @code{main()}. @xref{General Coding Rules}. Note that C code cannot call functions by name unless they are defined -in C. The way to call a function written in Lisp is to use +in C. The way to call a function written in Lisp from C is to use @code{Ffuncall}, which embodies the Lisp function @code{funcall}. Since the Lisp function @code{funcall} accepts an unlimited number of arguments, in C it takes two: the number of Lisp-level arguments, and a @@ -2108,7 +2109,7 @@ after @file{lastfile.c} because they contain various structures that must be statically initialized and into which Xt writes at various times.) @file{pre-crt0.c} and @file{lastfile.c} contain exported symbols -that are used to determine the start and end of XEmacs's initialized +that are used to determine the start and end of XEmacs' initialized data space when dumping. @@ -3092,13 +3093,13 @@ 9918 casetab.c @end example -@file{chartab.c} and @file{chartab.h} implement the char table Lisp -object type, which maps from characters or certain sorts of character -ranges to Lisp objects. The implementation of this object is optimized -for the internal representation of characters. Char tables come in -different types, which affect the allowed object types to which a -character can be mapped and also dictate certain other properties of the -char table. +@file{chartab.c} and @file{chartab.h} implement the @dfn{char table} +Lisp object type, which maps from characters or certain sorts of +character ranges to Lisp objects. The implementation of this object +type is optimized for the internal representation of characters. Char +tables come in different types, which affect the allowed object types to +which a character can be mapped and also dictate certain other +properties of the char table. @cindex case table @file{casetab.c} implements one sort of char table, the @dfn{case @@ -3114,13 +3115,13 @@ @end example @cindex scanner -This module implements syntax tables, another sort of char table that -maps characters into syntax classes that define the syntax of these -characters (e.g. a parenthesis belongs to a class of @samp{open} characters -that have corresponding @samp{close} characters and can be nested). -This module also implements the Lisp @dfn{scanner}, a set of primitives -for scanning over text based on syntax tables. This is used, for -example, to find the matching parenthesis in a command such as +This module implements @dfn{syntax tables}, another sort of char table +that maps characters into syntax classes that define the syntax of these +characters (e.g. a parenthesis belongs to a class of @samp{open} +characters that have corresponding @samp{close} characters and can be +nested). This module also implements the Lisp @dfn{scanner}, a set of +primitives for scanning over text based on syntax tables. This is used, +for example, to find the matching parenthesis in a command such as @code{forward-sexp}, and by @file{font-lock.c} to locate quoted strings, comments, etc. @@ -3682,9 +3683,9 @@ @file{mule-coding.*} implements the @dfn{coding-system} Lisp object type, which encapsulates a method of converting between different -encodings. An encoding is a representation of a stream of characters -from multiple character sets using a stream of bytes or words and -defines (e.g.) which escape sequences are used to specify particular +encodings. An encoding is a representation of a stream of characters, +possibly from multiple character sets, using a stream of bytes or words, +and defines (e.g.) which escape sequences are used to specify particular character sets, how the indices for a character are converted into bytes (sometimes this involves setting the high bit; sometimes complicated rearranging of the values takes place, as in the Shift-JIS encoding), @@ -3696,11 +3697,14 @@ @file{mule-canna.c} and @file{mule-wnnfns.c} implement interfaces to external programs used to implement the Canna and WNN input methods, -respectively. This is currently broken. - -@file{mule-mcpatch.c} provides some functions to allow for pathnames -containing extended characters. This code is fragmentary and completely -non-working. +respectively. This is currently in beta. + +@file{mule-mcpath.c} provides some functions to allow for pathnames +containing extended characters. This code is fragmentary, obsolete, and +completely non-working. Instead, @var{pathname-coding-system} is used +to specify conversions of names of files and directories. The standard +C I/O functions like @samp{open()} are wrapped so that conversion occurs +automatically. @file{mule.c} provides a few miscellaneous things that should probably be elsewhere. @@ -3779,7 +3783,8 @@ (a) Those for whom the value directly represents the contents of the Lisp object. Only two types are in this category: integers and characters. No special allocation or garbage collection is necessary -for such objects. +for such objects. Lisp objects of these types do not need to be +@code{GCPRO}ed. @end itemize In the remaining three categories, the value is a pointer to a @@ -3949,7 +3954,7 @@ @item Any shadowed bindings that are sitting on the specpdl stack. @item -Any objects sitting in currently active stack frames, +Any objects sitting in currently active (Lisp) stack frames, catches, and condition cases. @item A couple of special-case places where active objects are @@ -3998,7 +4003,7 @@ @item @strong{Strings are relocated.} What this means in practice is that the -pointer obtained using @code{string_data()} is liable to change at any +pointer obtained using @code{XSTRING_DATA()} is liable to change at any time, and you should never keep it around past any function call, or pass it as an argument to any function that might cause a garbage collection. This is why a number of functions accept either a @@ -4039,7 +4044,7 @@ @item Beware of @code{GCPRO}ing something that is uninitialized. If you have -any shade of doubt about this, initialize all your variables to Qnil. +any shade of doubt about this, initialize all your variables to @code{Qnil}. @item Be careful of traps, like calling @code{Fcons()} in the argument to @@ -4448,10 +4453,10 @@ As mentioned above, each vector is @code{malloc()}ed individually, and all are threaded through the variable @code{all_vectors}. Vectors are marked strangely during garbage collection, by kludging the size field. -Note that the @code{struct Lisp_Vector} is declared with its contents -being an array of one element. It is actually @code{malloc()}ed with -the right size, however, and access to any element through the contents -array works fine. +Note that the @code{struct Lisp_Vector} is declared with its +@code{contents} field being a @emph{stretchy} array of one element. It +is actually @code{malloc()}ed with the right size, however, and access +to any element through the @code{contents} array works fine. @node Bit Vector @section Bit Vector @@ -4934,20 +4939,22 @@ @code{next-command-event} and @code{read-char} are higher-level interfaces to @code{next-event}. @code{next-command-event} gets the -next @dfn{command} event (i.e. keypress, mouse event, or menu -selection), calling dispatch-event on any others. @code{read-char} -calls @code{next-command-event} and uses @code{event_to_character()} to -return the ASCII equivalent. +next @dfn{command} event (i.e. keypress, mouse event, menu selection, +or scrollbar action), calling @code{dispatch-event} on any others. +@code{read-char} calls @code{next-command-event} and uses +@code{event_to_character()} to return the character equivalent. With +the right kind of input method support, it is possible for (read-char) +to return a Kanji character. @node Converting Events @section Converting Events @code{character_to_event()}, @code{event_to_character()}, @code{event-to-character}, and @code{character-to-event} convert between -ASCII characters and keypresses corresponding to the characters. If the +characters and keypress events corresponding to the characters. If the event was not a keypress, @code{event_to_character()} returns -1 and @code{event-to-character} returns @code{nil}. These functions convert -between ASCII representation and the split-up event representation +between character representation and the split-up event representation (keysym plus mod keys). @node Dispatching Events; The Command Builder @@ -4993,21 +5000,21 @@ At this point, the function to be called is determined by looking at the car of the cons (if this is a symbol, its function definition is retrieved and the process repeated). The function should then consist -of either a Lisp_Subr (built-in function), a Lisp_Compiled object, or a -cons whose car is the symbol @code{autoload}, @code{macro}, -@code{lambda}, or @code{mocklisp}. - - If the function is a Lisp_Subr, the lisp object points to a struct -Lisp_Subr (created by @code{DEFUN()}), which contains a pointer to the C -function, a minimum and maximum number of arguments (possibly the -special constants @code{MANY} or @code{UNEVALLED}), a pointer to the -symbol referring to that subr, and a couple of other things. If the -subr wants its arguments @code{UNEVALLED}, they are passed raw as a -list. Otherwise, an array of evaluated arguments is created and put -into the backtrace structure, and either passed whole (@code{MANY}) or -each argument is passed as a C argument. - - If the function is a Lisp_Compiled object or a lambda, +of either a @code{Lisp_Subr} (built-in function), a +@code{Lisp_Compiled_Function} object, or a cons whose car is the symbol +@code{autoload}, @code{macro}, @code{lambda}, or @code{mocklisp}. + +If the function is a @code{Lisp_Subr}, the lisp object points to a +@code{struct Lisp_Subr} (created by @code{DEFUN()}), which contains a +pointer to the C function, a minimum and maximum number of arguments +(possibly the special constants @code{MANY} or @code{UNEVALLED}), a +pointer to the symbol referring to that subr, and a couple of other +things. If the subr wants its arguments @code{UNEVALLED}, they are +passed raw as a list. Otherwise, an array of evaluated arguments is +created and put into the backtrace structure, and either passed whole +(@code{MANY}) or each argument is passed as a C argument. + + If the function is a @code{Lisp_Compiled_Function} object or a lambda, @code{apply_lambda()} is called. If the function is a macro, [..... fill in] is done. If the function is an autoload, @code{do_autoload()} is called to load the definition and then eval @@ -5027,8 +5034,8 @@ function and binds them to the actual arguments, checking for @code{&rest} and @code{&optional} symbols in the formal arguments and making sure the number of actual arguments is correct. Then either -progn or byte-code is called to actually execute the body and return a -value. +@code{progn} or @code{byte-code} is called to actually execute the body +and return a value. @code{Ffuncall()} implements Lisp @code{funcall}. @code{(funcall fun x1 x2 x3 ...)} is equivalent to @code{(eval (list fun (quote x1) (quote @@ -5076,27 +5083,27 @@ @code{record_unwind_protect()} implements an @dfn{unwind-protect}, which, when placed around a section of code, ensures that some specified cleanup routine will be executed even if the code exits abnormally -(e.g. through a throw or quit). @code{record_unwind_protect()} simply -adds a new specbinding to the specpdl array and stores the appropriate -information in it. The cleanup routine can either be a C function, -which is stored in the @code{func} field, or a progn form, which is stored in -the @code{old_value} field. +(e.g. through a @code{throw} or quit). @code{record_unwind_protect()} +simply adds a new specbinding to the specpdl array and stores the +appropriate information in it. The cleanup routine can either be a C +function, which is stored in the @code{func} field, or a @code{progn} +form, which is stored in the @code{old_value} field. @code{unbind_to()} removes specbindings from the specpdl array until -the specified position is reached. The specbinding can be one of three +the specified position is reached. Each specbinding can be one of three types: @enumerate @item -an unwind-protect with a C cleanup function (@code{func} is not 0 -- +an unwind-protect with a C cleanup function (@code{func} is not 0, and @code{old_value} holds an argument to be passed to the function); @item -an unwind-protect with a Lisp form (@code{func} is 0 and @code{symbol} -is @code{nil} -- @code{old_value} holds the form to be executed with +an unwind-protect with a Lisp form (@code{func} is 0, @code{symbol} +is @code{nil}, and @code{old_value} holds the form to be executed with @code{Fprogn()}); or @item -a local-variable binding (@code{func} is 0 and @code{symbol} is not -@code{nil} -- @code{old_value} holds the old value, which is stored as +a local-variable binding (@code{func} is 0, @code{symbol} is not +@code{nil}, and @code{old_value} holds the old value, which is stored as the symbol's value). @end enumerate @@ -5257,8 +5264,9 @@ you can explicitly create a symbol using @code{make-symbol}, giving it some name. The resulting symbol is not in any obarray (i.e. it is @dfn{uninterned}), and you can't add it to any obarray. Therefore its -primary purpose is as a carrier of information. (Cons cells could -probably be used just as well.) +primary purpose is as a symbol to use in macros to avoid namespace +pollution. It can also be used as a carrier of information, but cons +cells could probably be used just as well. You can also use @code{intern-soft} to look up a symbol but not create a new one, and @code{unintern} to remove a symbol from an obarray. This @@ -5330,7 +5338,7 @@ @enumerate @item -Buffers are @dfn{permanent} objects, i.e. one you create them, they +Buffers are @dfn{permanent} objects, i.e. once you create them, they remain around, and need to be explicitly deleted before they go away. @item Each buffer has a unique name, which is a string. Buffers are @@ -5364,8 +5372,8 @@ gets restored when the code is finished). However, calling @code{set-buffer} will NOT cause a permanent change in the current buffer. The reason for this is that the top-level event loop sets -current buffer to the buffer of the selected window, each time it -finishes executing a user command. +@code{current_buffer} to the buffer of the selected window, each time +it finishes executing a user command. @end enumerate Make sure you understand the distinction between @dfn{current buffer} @@ -5388,10 +5396,10 @@ For now, we can view a character as some non-negative integer that has some shape that defines how it typically appears (e.g. as an -uppercase A). (The exact way in which a character appears depends -on the font of the character.) The internal type of characters in -the C code is an Emchar; this is just an int, but using a symbolic -type makes the code clearer. +uppercase A). (The exact way in which a character appears depends on the +font used to display the character.) The internal type of characters in +the C code is an @code{Emchar}; this is just an @code{int}, but using a +symbolic type makes the code clearer. Between every character in a buffer is a @dfn{buffer position} or @dfn{character position}. We can speak of the character before or after @@ -5447,7 +5455,7 @@ heap, taking up virtual memory, and will not be released back to the operating system. (However, if you have compiled XEmacs with rel-alloc, the situation is different. In this case, the space @emph{will} be -released back to the operating system. However, this tends to effect a +released back to the operating system. However, this tends to result in a noticeable speed penalty.) Astute readers may notice that the text in a buffer is represented as @@ -5500,7 +5508,7 @@ @dfn{memory indices}, typedef @code{Memind} @end enumerate - All three typedefs are just ints, but defining them this way makes + All three typedefs are just @code{int}s, but defining them this way makes things a lot clearer. Most code works with buffer positions. In particular, all Lisp code @@ -5511,7 +5519,7 @@ @code{Bufbyte}, which is an unsigned char. Referring to them as Bufbytes underscores the fact that we are working with a string of bytes in the internal Emacs buffer representation rather than in one of a -number of possible alternative representations (e.g. EUC-coded text, +number of possible alternative representations (e.g. EUC-encoded text, etc.). @node Buffer Lists @@ -5825,33 +5833,34 @@ @node Japanese EUC (Extended Unix Code) @subsection Japanese EUC (Extended Unix Code) - This encompasses the character sets Printing-ASCII, Japanese (aka -JISX0208), and Japanese-Kana (half-width katakana, the right half of +This encompasses the character sets Printing-ASCII, Japanese-JISSX0201, +and Japanese-JISX0208-Kana (half-width katakana, the right half of JISX0201). It uses 8-bit bytes. - Note that Printing-ASCII and Japanese-Kana are 94-character charsets, -while Japanese is a 94x94-character charset. - - The encoding is as follows: +Note that Printing-ASCII and Japanese-JISX0201-Kana are 94-character +charsets, while Japanese-JISX0208 is a 94x94-character charset. + +The encoding is as follows: @example -Character set Representation (PC=position-code) -------------- -------------- -Printing-ASCII PC1 -Japanese PC1 + 0x80 | PC2 + 0x80 -Japanese-Kana 0x8E | PC1 + 0x80 +Character set Representation (PC=position-code) +------------- -------------- +Printing-ASCII PC1 +Japanese-JISX0201-Kana 0x8E | PC1 + 0x80 +Japanese-JISX0208 PC1 + 0x80 | PC2 + 0x80 +Japanese-JISX0212 PC1 + 0x80 | PC2 + 0x80 @end example @node JIS7 @subsection JIS7 - This encompasses the character sets Printing-ASCII, -Japanese-Roman (the left half of JISX0201; this character -set is very similar to Printing-ASCII and is a 94-character -charset), Japanese, and Japanese-Kana. It uses 7-bit bytes. - - Unlike Japanese EUC, this is a @dfn{modal} encoding, which +This encompasses the character sets Printing-ASCII, +Japanese-JISX0201-Roman (the left half of JISX0201; this character set +is very similar to Printing-ASCII and is a 94-character charset), +Japanese-JISX0208, and Japanese-JISX0201-Kana. It uses 7-bit bytes. + +Unlike Japanese EUC, this is a @dfn{modal} encoding, which means that there are multiple states that the encoding can be in, which affect how the bytes are to be interpreted. Special sequences of bytes (called @dfn{escape sequences}) @@ -5860,19 +5869,19 @@ The encoding is as follows: @example -Character set Representation (PC=position-code) -------------- -------------- -Printing-ASCII PC1 -Japanese-Roman PC1 -Japanese PC1 PC2 -Japanese-Kana PC1 +Character set Representation (PC=position-code) +------------- -------------- +Printing-ASCII PC1 +Japanese-JISX0201-Roman PC1 +Japanese-JISX0201-Kana PC1 +Japanese-JISX0208 PC1 PC2 Escape sequence ASCII equivalent Meaning --------------- ---------------- ------- -0x1B 0x28 0x4A ESC ( J invoke Japanese-Roman -0x1B 0x24 0x42 ESC $ B invoke Japanese -0x1B 0x28 0x49 ESC ( I invoke Japanese-Kana +0x1B 0x28 0x4A ESC ( J invoke Japanese-JISX0201-Roman +0x1B 0x28 0x49 ESC ( I invoke Japanese-JISX0201-Kana +0x1B 0x24 0x42 ESC $ B invoke Japanese-JISX0208 0x1B 0x28 0x42 ESC ( B invoke Printing-ASCII @end example @@ -5881,16 +5890,15 @@ @node Internal Mule Encodings @section Internal Mule Encodings - In XEmacs/Mule, each character set is assigned a unique number, -called a @dfn{leading byte}. This is used in the encodings of a -character. Leading bytes are in the range 0x80 - 0xFF -(except for ASCII, which has a leading byte of 0), although -some leading bytes are reserved. - - Charsets whose leading byte is in the range 0x80 - 0x9F are -called @dfn{official} and are used for built-in charsets. -Other charsets are called @dfn{private} and have leading bytes -in the range 0xA0 - 0xFF; these are user-defined charsets. +In XEmacs/Mule, each character set is assigned a unique number, called a +@dfn{leading byte}. This is used in the encodings of a character. +Leading bytes are in the range 0x80 - 0xFF (except for ASCII, which has +a leading byte of 0), although some leading bytes are reserved. + +Charsets whose leading byte is in the range 0x80 - 0x9F are called +@dfn{official} and are used for built-in charsets. Other charsets are +called @dfn{private} and have leading bytes in the range 0xA0 - 0xFF; +these are user-defined charsets. More specifically: @@ -5909,16 +5917,16 @@ Dimension-2 Private 0xF0 - 0xFF @end example - There are two internal encodings for characters in XEmacs/Mule. One -is called @dfn{string encoding} and is an 8-bit encoding that is used -for representing characters in a buffer or string. It uses 1 to 4 bytes -per character. The other is called @dfn{character encoding} and is a -19-bit encoding that is used for representing characters individually in -a variable. - - (In the following descriptions, we'll ignore composite -characters for the moment. We also give a general (structural) -overview first, followed later by the exact details.) +There are two internal encodings for characters in XEmacs/Mule. One is +called @dfn{string encoding} and is an 8-bit encoding that is used for +representing characters in a buffer or string. It uses 1 to 4 bytes per +character. The other is called @dfn{character encoding} and is a 19-bit +encoding that is used for representing characters individually in a +variable. + +(In the following descriptions, we'll ignore composite characters for +the moment. We also give a general (structural) overview first, +followed later by the exact details.) @menu * Internal String Encoding:: @@ -5928,12 +5936,12 @@ @node Internal String Encoding @subsection Internal String Encoding - ASCII characters are encoded using their position code directly. -Other characters are encoded using their leading byte followed -by their position code(s) with the high bit set. Characters -in private character sets have their leading byte prefixed with -a @dfn{leading byte prefix}, which is either 0x9E or 0x9F. (No -character sets are ever assigned these leading bytes.) Specifically: +ASCII characters are encoded using their position code directly. Other +characters are encoded using their leading byte followed by their +position code(s) with the high bit set. Characters in private character +sets have their leading byte prefixed with a @dfn{leading byte prefix}, +which is either 0x9E or 0x9F. (No character sets are ever assigned these +leading bytes.) Specifically: @example Character set Encoding (PC=position-code, LB=leading-byte)
--- a/man/lispref/intro.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/lispref/intro.texi Mon Aug 13 08:55:10 2007 +0200 @@ -612,9 +612,9 @@ evaluation of the expanded form. @example -(third '(a b c)) - @expansion{} (car (cdr (cdr '(a b c)))) - @result{} c +(news-cadr '(a b c)) + @expansion{} (car (cdr '(a b c))) + @result{} b @end example Sometimes to help describe one form we show another form that @@ -622,7 +622,7 @@ indicated with @samp{@equiv{}}. @example -(make-sparse-keymap) @equiv{} (list 'keymap) +(cons 'a nil) @equiv{} (list 'a) @end example @node Printing Notation
--- a/man/message.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/message.texi Mon Aug 13 08:55:10 2007 +0200 @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Message 5.4.36 Manual +@settitle Message 5.4.37 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -39,7 +39,7 @@ @tex @titlepage -@title Message 5.4.36 Manual +@title Message 5.4.37 Manual @author by Lars Magne Ingebrigtsen @page @@ -79,7 +79,7 @@ * Key Index:: List of Message mode keys. @end menu -This manual corresponds to Message 5.4.36. Message is distributed with +This manual corresponds to Message 5.4.37. Message is distributed with the Gnus distribution bearing the same version number as this manual has.
--- a/man/w3.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/w3.texi Mon Aug 13 08:55:10 2007 +0200 @@ -12,7 +12,7 @@ @c site: http://www.cs.indiana.edu/elisp/w3/docs.html @c @setfilename w3.info -@settitle Emacs-W3 User's Manual +@settitle Emacs/W3 User's Manual @iftex @finalout @end iftex @@ -27,10 +27,10 @@ @dircategory World Wide Web @dircategory GNU Emacs Lisp @direntry -* W3: (w3). Emacs-W3 World Wide Web browser. +* W3: (w3). Emacs/W3 World Wide Web browser. @end direntry @ifinfo -This file documents the Emacs-W3 World Wide Web browser. +This file documents the Emacs/W3 World Wide Web browser. Copyright (C) 1993, 1994, 1995, 1996 William M. Perry Copyright (C) 1996, 1997 Free Software Foundation @@ -50,10 +50,10 @@ @c @titlepage @sp 6 -@center @titlefont{Emacs-W3} +@center @titlefont{Emacs/W3} @center @titlefont{User's Manual} @sp 4 -@center Third Edition, Emacs-W3 Version 3.0 +@center Third Edition, Emacs/W3 Version 3.0 @sp 1 @center February 1997 @sp 5 @@ -74,25 +74,25 @@ @node Top, Getting Started, (dir), (dir) @top W3 -Users can browse the World Wide Web from within Emacs by using Emacs-W3. +Users can browse the World Wide Web from within Emacs by using Emacs/W3. All of the widely used (and even some not very widely used) @sc{url} schemes are supported, and it is very easy to add new methods as the need arises. -Emacs-W3 provides some core functionality that can be readily re-used +Emacs/W3 provides some core functionality that can be readily re-used from any program in Emacs. Users and other package writers are encouraged to @i{Web-enable} their applications and daily work routines with the library. -Emacs-W3 is completely customizable, both from Emacs-Lisp and from -stylesheets @xref{Stylesheets} If there is any aspect of Emacs-W3 that +Emacs/W3 is completely customizable, both from Emacs-Lisp and from +stylesheets @xref{Stylesheets} If there is any aspect of Emacs/W3 that cannot be modified to your satisfaction, please send mail to the @t{w3-beta@@indiana.edu} mailing list with any suggestions. @xref{Reporting Bugs} @menu -* Getting Started:: Getting up and running with Emacs-W3 -* Basic Usage:: Basic movement and usage of Emacs-W3. +* Getting Started:: Getting up and running with Emacs/W3 +* Basic Usage:: Basic movement and usage of Emacs/W3. * Compatibility:: Explanation of compatibility with other browsers. * Stylesheets:: How to control the look of web pages @@ -109,9 +109,9 @@ * Future Directions:: Plans for future revisions Appendices: -* Reporting Bugs:: How to report a bug in Emacs-W3. +* Reporting Bugs:: How to report a bug in Emacs/W3. * Dealing with Firewalls:: How to get around your firewall. -* Proxy Gateways:: Using a proxy gateway with Emacs-W3. +* Proxy Gateways:: Using a proxy gateway with Emacs/W3. * Installing SSL:: Turning on @sc{ssl} support. * Mailcap Files:: An explanation of Mailcap files. * Down with DoubleClick:: Annoyed by advertisements? Read this! @@ -129,10 +129,10 @@ @kindex M-x w3 @vindex w3-default-homepage @findex w3 -If installed correctly, starting Emacs-W3 is quite painless. Just type +If installed correctly, starting Emacs/W3 is quite painless. Just type @kbd{M-x w3} in a running Emacs session. This will retrieve the default page that has been configured (@pxref{Preferences Panel}) - by default the -documentation for Emacs-W3 at Indiana University. +documentation for Emacs/W3 at Indiana University. If the default page is not retrieved correctly at startup, you will have to do some customization (@pxref{Preferences Panel}). @@ -174,7 +174,7 @@ @end table @menu -* Downloading:: Where to download Emacs-W3. +* Downloading:: Where to download Emacs/W3. * Building and Installing:: Compiling and installing from source. * Startup Files:: What is where, and why. * Preferences Panel:: Quick configuration of common options. @@ -185,7 +185,7 @@ :: WORK :: What you need, and why :: WORK :: Where to download Emacs, XEmacs, various platforms -:: WORK :: Where to download Emacs-W3 +:: WORK :: Where to download Emacs/W3 :: WORK :: Where to download related utilities (netpbm, xv, gimp, etc.) @node Building and Installing, Startup Files, Downloading, Getting Started @@ -200,7 +200,7 @@ @cindex Default stylesheet :: WORK :: startup files -This section should document where emacs-w3 looks for its startup files, +This section should document where Emacs/W3 looks for its startup files, and what each one does. 'profile' 'stylesheet' 'hotlist' 'history' etc. @node Preferences Panel, , Startup Files, Getting Started @@ -219,14 +219,14 @@ @kindex return @kindex tab @kindex M-tab -Emacs-W3 is similar to the Info package all Emacs users hold near and +Emacs/W3 is similar to the Info package all Emacs users hold near and dear to their hearts (@xref{Top,,Info,info, The Info Manual}, for a description of Info). Basically, @kbd{space} and @kbd{backspace} control scrolling, and @kbd{return} or the middle mouse button follows a hypertext link. The @kbd{tab} and @kbd{Meta-tab} keys maneuver around the various links on the page. -@b{NOTE:} Starting with Emacs-W3 3.0, form entry areas in a page can be +@b{NOTE:} Starting with Emacs/W3 3.0, form entry areas in a page can be typed directly into. This is one of the main differences in navigation from version 2.0. If you are used to using the @kbd{f} and @kbd{b} keys to navigate around a buffer, I suggest training yourself to always use @@ -238,8 +238,8 @@ terminal, the links are in shown in different colors. @xref{Stylesheets} for information on how to change this. -There are approximately 50 keys bound to special Emacs-W3 functions. -The basic rule of thumb regarding keybindings in Emacs-W3 is that a +There are approximately 50 keys bound to special Emacs/W3 functions. +The basic rule of thumb regarding keybindings in Emacs/W3 is that a lowercase key takes an action on the @b{current document}, and an uppercase key takes an action on the document pointed to by the hypertext link @b{under the cursor}. @@ -438,7 +438,7 @@ @findex w3-fetch @item C-o Prompts for a @sc{url} in the minibuffer, and attempts to fetch -it. If there are any errors, or Emacs-W3 cannot understand the type of link +it. If there are any errors, or Emacs/W3 cannot understand the type of link requested, the errors are displayed in a hypertext buffer. @kindex o @findex w3-open-local @@ -447,7 +447,7 @@ Opens a local file, interactively. This prompts for a local file name to open. The file must exist, and may be a directory. If the requested file is a directory and @code{url-use-hypertext-dired} is @code{nil}, -then a dired-mode buffer is displayed. If non@code{nil}, then Emacs-W3 +then a dired-mode buffer is displayed. If non@code{nil}, then Emacs/W3 automatically generates a hypertext listing of the directory. The hypertext mode is the default, so that all the keys and functions remain the same. @@ -462,14 +462,14 @@ @findex w3-show-history-list @vindex w3-keep-history @item Hv -If @code{url-keep-history} is non-@code{nil}, then Emacs-W3 keeps track +If @code{url-keep-history} is non-@code{nil}, then Emacs/W3 keeps track of all the @sc{url}s visited in an Emacs session. This function takes all the links that are in that internal list, and formats them as hypertext links in a list. @end table @cindex Buffer movement -And here are the commands to move around between Emacs-W3 buffers: +And here are the commands to move around between Emacs/W3 buffers: @table @kbd @kindex l @@ -610,13 +610,13 @@ @node Compatibility, Stylesheets, Basic Usage, Top @chapter Compatibility with other Browsers -Due to the popularity of several other browsers, Emacs-W3 offers an easy +Due to the popularity of several other browsers, Emacs/W3 offers an easy transition to its much better way of life. This ranges from being able to share the same preferences files and disk cache to actually emulating the keybindings used in other browsers. @menu -* Emulation:: Emacs-W3 can emulate the keybindings and +* Emulation:: Emacs/W3 can emulate the keybindings and other behaviours of other browsers. * Hotlist Handling:: A hotlist is an easy way to keep track of interesting Web pages without having to @@ -773,7 +773,7 @@ :: WORK :: Document that it supports different types of hotlist formats :: WORK :: Make sure everything hotlist related can be accessed via 'h' In order to avoid having to traverse many documents to get to the same -document over and over, Emacs-W3 supports a ``hotlist'' like Mosaic. This is +document over and over, Emacs/W3 supports a ``hotlist'' like Mosaic. This is a file that contains @sc{url}s and aliases. Hotlists allow quick access to any document in the Web, providing it has been visited and added to the hotlist. The variable @code{w3-hotlist-file} determines where this information @@ -844,12 +844,12 @@ of @sc{url}s that can be traversed easily. @vindex url-keep-history -If the variable @code{url-keep-history} is @code{t}, then Emacs-W3 +If the variable @code{url-keep-history} is @code{t}, then Emacs/W3 keeps a list of all the @sc{url}s visited in a session. @findex w3-show-history -To view a listing of the history for this session of Emacs-W3, use -@code{M-x w3-show-history} from any buffer, and Emacs-W3 generates an +To view a listing of the history for this session of Emacs/W3, use +@code{M-x w3-show-history} from any buffer, and Emacs/W3 generates an @sc{html} document showing every @sc{url} visited since Emacs started (or cleared the history list), and then format it. Any of the links can be chosen and followed to the original document. To clear the history @@ -859,7 +859,7 @@ @findex w3-backward-in-history @findex w3-fetch Another twist on the history list mechanism is the fact that all -Emacs-W3 buffers remember what @sc{url}, buffer, and buffer position of the +Emacs/W3 buffers remember what @sc{url}, buffer, and buffer position of the last document, and also keeps track of the next location jumped @b{to} from that buffer. This means that the user can go forwards and backwards very easily along the path taken to reach a particular @@ -876,7 +876,7 @@ @vindex url-keep-history @vindex url-global-history-file -If the variable @code{url-keep-history} is @code{t}, then Emacs-W3 +If the variable @code{url-keep-history} is @code{t}, then Emacs/W3 keeps a list of all the @sc{url}s visited in a session. The file is automatically written to disk when exiting emacs. The list is added to those already in the file specified by @code{url-global-history-file}, @@ -886,12 +886,12 @@ ones are added at the end of the file. The function that saves the global history list is smart enough to -notice what style of history list is being used (Netscape, Emacs-W3, or +notice what style of history list is being used (Netscape, Emacs/W3, or XMosaic), and writes out the new additions appropriately. @cindex Completion of URLs @cindex Usefulness of global history -One of the nice things about keeping a global history files is that Emacs-W3 +One of the nice things about keeping a global history files is that Emacs/W3 can use it as a completion table. When doing @kbd{M-x w3-fetch}, pressing the @kbd{tab} or @kbd{space} key will show all completions for a partial @sc{url}. This is very useful, especially for very long @sc{url}s that @@ -900,12 +900,12 @@ @node Stylesheets, Supported URLs, Compatibility, Top @chapter Stylesheets -The way in which Emacs-W3 formats a document is very customizable. All +The way in which Emacs/W3 formats a document is very customizable. All formatting is now controlled by a default stylesheet set by the user -with the @code{w3-default-stylesheet} variable. Emacs-W3 currently +with the @code{w3-default-stylesheet} variable. Emacs/W3 currently supports the @sc{W3C} recommendation for Cascading Style Sheets, Level 1 (commonly known as @sc{CSS1}) with a few experimental items from other -W3C proposals. Wherever Emacs-W3 diverges from the specification, it +W3C proposals. Wherever Emacs/W3 diverges from the specification, it will be clearly documented, and will be changed once a full standard is available. @@ -913,7 +913,7 @@ low. If anyone would like to help, please contact the author. The following sections closely parallel the @sc{CSS1} specification so -it should be very easy to look up what Emacs-W3 supports when browsing +it should be very easy to look up what Emacs/W3 supports when browsing through the @sc{CSS1} specification. Please note that a lot of the text in the following sections comes directly from the specification as well. @@ -1068,7 +1068,7 @@ pseudo-classes allow style sheets to differentiate between different element types. -The only support pseudo-classes in Emacs-W3 are on the anchor tag +The only support pseudo-classes in Emacs/W3 are on the anchor tag (<a>...</a>). User agents commonly display newly visited anchors differently from @@ -1309,9 +1309,9 @@ @multitable @columnfractions .20 .8 @item Supported Values: @tab If this is present, it lists the parts of -the specification that Emacs-W3 currently supports. +the specification that Emacs/W3 currently supports. @item Unsupported Values: @tab If this is present, it represents the -parts of the specifcation that Emacs-W3 does not support. +parts of the specifcation that Emacs/W3 does not support. @item Initial: @tab The default value for the property, unless explicitly set in a stylesheet. @item Applies to: @tab What type of elements this property can be attached to. @@ -1648,7 +1648,7 @@ default because of the initial 'transparent' value on 'background-color'. -NOTE: Currently, Emacs-W3 can only show background images under XEmacs. +NOTE: Currently, Emacs/W3 can only show background images under XEmacs. Emacs 19 doesn't have the support in its display code yet. @menu @@ -1723,17 +1723,17 @@ @node background-repeat, background-attachment, background-image, Colors and Backgrounds @subsubsection background-repeat -This property is not supported at all under Emacs-W3. +This property is not supported at all under Emacs/W3. @node background-attachment, background-position, background-repeat, Colors and Backgrounds @subsubsection background-attachment -This property is not supported at all under Emacs-W3. +This property is not supported at all under Emacs/W3. @node background-position, background, background-attachment, Colors and Backgrounds @subsubsection background-position -This property is not supported at all under Emacs-W3. +This property is not supported at all under Emacs/W3. @node background, , background-position, Colors and Backgrounds @subsubsection background @@ -1804,7 +1804,7 @@ Here, the word-spacing between each word in 'H1' elements would be increased by '1em'. -NOTE: Emacs-W3 cannot currently support this, due to limitations in +NOTE: Emacs/W3 cannot currently support this, due to limitations in Emacs. It may be implemented in the future. @node letter-spacing, text-decoration, word-spacing, Text Properties @@ -1832,7 +1832,7 @@ Here, the letter-spacing between each character in 'BLOCKQUOTE' elements would be increased by '0.1em'. -NOTE: Emacs-W3 cannot currently support this, due to limitations in +NOTE: Emacs/W3 cannot currently support this, due to limitations in Emacs. It may be implemented in the future. @node text-decoration, vertical-align, letter-spacing, Text Properties @@ -1875,7 +1875,7 @@ @node vertical-align, text-transform, text-decoration, Text Properties @subsubsection vertical-align -This is currently unsupported in Emacs-W3. +This is currently unsupported in Emacs/W3. @node text-transform, text-align, vertical-align, Text Properties @subsubsection text-transform @@ -1908,7 +1908,7 @@ The example above would put 'H1' elements in uppercase text. -NOTE: This capability was in the previous version of Emacs-W3, but has +NOTE: This capability was in the previous version of Emacs/W3, but has not been reimplemented in the new display code yet. Please feel free to send me patches. @@ -1938,12 +1938,12 @@ @node text-indent, line-height, text-align, Text Properties @subsubsection text-indent -Not currently implemented in Emacs-W3. +Not currently implemented in Emacs/W3. @node line-height, , text-indent, Text Properties @subsubsection line-height -Not currently implemented in Emacs-W3. +Not currently implemented in Emacs/W3. @node Box Properties, Classification, Text Properties, Properties @subsection Box Properties @@ -2008,11 +2008,11 @@ The last rule turns off the display of images. -A value of 'line' results in a single line break. Emacs-W3 needs this +A value of 'line' results in a single line break. Emacs/W3 needs this extension to be able to fully specify the behaviour of @sc{br} and @sc{hr} elements within a stylesheet. -NOTE: Emacs-W3 defaults to using 'inline' for this property, which is a +NOTE: Emacs/W3 defaults to using 'inline' for this property, which is a slight deviation from the specification. @node white-space, list-style-type, display, Classification @@ -2073,7 +2073,7 @@ marker. When the image is available it will replace the marker set with the 'list-style-type' marker. -NOTE: This is currently unimplemented in Emacs-W3. +NOTE: This is currently unimplemented in Emacs/W3. @example UL @{ list-style-image: url(http://png.com/ellipse.png) @} @@ -2691,7 +2691,7 @@ types (e.g., @samp{.png -> image/png)}. * Specifying Viewers:: How to specify external and internal viewers - for files that Emacs-W3 cannot handle natively. + for files that Emacs/W3 cannot handle natively. @end menu @node Adding MIME types based on file extensions, Specifying Viewers, MIME Support, MIME Support @@ -2718,14 +2718,14 @@ @cindex mime-types file @findex mm-parse-mimetypes Both Mosaic and the NCSA @sc{http} daemon rely on a separate file for mapping -file extensions to MIME types. Instead of having the users of Emacs-W3 +file extensions to MIME types. Instead of having the users of Emacs/W3 duplicate this in lisp, this file can be parsed using the @code{url-parse-mimetypes} function. This function is called each time w3 is loaded. It tries to locate mimetype files in several places. If the environment variable @code{MIMETYPES} is nonempty, then this is assumed to specify a UNIX-like path of mimetype files (this is a colon separated string of pathnames). If the @code{MIMETYPES} environment -variable is empty, then Emacs-W3 looks for these files: +variable is empty, then Emacs/W3 looks for these files: @enumerate @item @@ -2777,7 +2777,7 @@ @cindex Security @cindex Paranoia There are an increasing number of ways to authenticate a user to a web -service. Emacs-W3 tries to support as many as possible. Emacs-W3 +service. Emacs/W3 tries to support as many as possible. Emacs/W3 currently supports: @table @b @@ -2806,7 +2806,7 @@ @cindex Exportability @cindex Export Restrictions SSL is the @code{Secure Sockets Layer} interface developed by Netscape -Communications @footnote{http://www.netscape.com/}. Emacs-W3 supports +Communications @footnote{http://www.netscape.com/}. Emacs/W3 supports @sc{http} transfers over an SSL encrypted channel, if the appropriate files have been installed.@xref{Installing SSL} @end table @@ -2867,11 +2867,11 @@ @menu * Disk Caching:: Improving performance by using a local disk cache * Interfacing to Mail/News:: How to make VM understand hypertext links -* Debugging HTML:: How to make Emacs-W3 display warnings about invalid +* Debugging HTML:: How to make Emacs/W3 display warnings about invalid @sc{html}/@sc{html}+ constructs. -* Hooks:: Various hooks to use throughout Emacs-W3 +* Hooks:: Various hooks to use throughout Emacs/W3 * Other Variables:: Miscellaneous variables that control the real - guts of Emacs-W3. + guts of Emacs/W3. @end menu @node Disk Caching, Interfacing to Mail/News, Advanced Features, Advanced Features @@ -2881,13 +2881,13 @@ @cindex Disk Cache A cache stores the information on a page on the local machine. When -requesting a page that is in the cache, Emacs-W3 can retrieve the page +requesting a page that is in the cache, Emacs/W3 can retrieve the page from the cache more quickly than retrieving the page again from its location out on the network. With a well-populated cache, browsing the web is dramatically faster. -The first time a page is requested, Emacs-W3 retrieves the page from the -network. When requesting a page that is in the cache, Emacs-W3 checks +The first time a page is requested, Emacs/W3 retrieves the page from the +network. When requesting a page that is in the cache, Emacs/W3 checks to see if the page has changed since it was last retrieved from the remote machine. If it has not changed, the local copy is used, saving the transmission of the file over the network. @@ -2916,7 +2916,7 @@ @vindex url-standalone-mode With a large cache of documents on the local disk, it can be very handy when traveling, or any other time the network connection is not active -(a laptop with a dial-on-demand PPP connection, etc). Emacs-W3 can rely +(a laptop with a dial-on-demand PPP connection, etc). Emacs/W3 can rely solely on its cache, and avoid checking to see if the page has changed on the remote server. In the case of a dial-on-demand PPP connection, this will keep the phone line free as long as possible, only bringing up @@ -2930,11 +2930,11 @@ @section Interfacing to Mail/News @cindex Interfacing to Mail/News @cindex VM -@cindex Using Emacs-W3 with VM +@cindex Using Emacs/W3 with VM @cindex GNUS -@cindex Using Emacs-W3 with Gnus +@cindex Using Emacs/W3 with Gnus @cindex RMAIL -@cindex Using Emacs-W3 with RMAIL +@cindex Using Emacs/W3 with RMAIL More and more people are including @sc{url}s in their signatures, and within the body of mail messages. It can get quite tedious to type these into @@ -2970,7 +2970,7 @@ @code{t} and see what happens. -If a Emacs-W3 thinks it has encountered invalid @sc{html}, then a debugging +If a Emacs/W3 thinks it has encountered invalid @sc{html}, then a debugging message is displayed. :: WORK :: Need to list the different values w3-debug-html can have, and @@ -2981,7 +2981,7 @@ @cindex Hooks These are the various hooks that can be used to customize some of -Emacs-W3's behavior. They are arranged in the order in which they would +Emacs/W3's behavior. They are arranged in the order in which they would happen when retrieving a document. These are all 'normal hooks' in standard Emacs-terminology, meaning they are functions (or lists of functions) that are called consecutively. @@ -2990,7 +2990,7 @@ @vindex w3-load-hook @item w3-load-hook These hooks are run the first time a @sc{url} is fetched. All the -Emacs-W3 variables are initialized before this hook is run. +Emacs/W3 variables are initialized before this hook is run. @item w3-mode-hook These hooks are run after a buffer has been parsed and displayed, but before any inlined images are downloaded and converted. @@ -3001,7 +3001,7 @@ @node Other Variables, , Hooks, Advanced Features @section Miscellaneous variables -There are lots of variables that control the real nitty-gritty of Emacs-W3 +There are lots of variables that control the real nitty-gritty of Emacs/W3 that the beginning user probably shouldn't mess with. Here they are. @table @code @@ -3020,7 +3020,7 @@ @vindex w3-default-action A lisp symbol specifying what action to take for files with extensions that are not in the @code{mm-mime-extensions} assoc list. This is -useful in case Emacs-W3 ever run across files with weird extensions +useful in case Emacs/W3 ever run across files with weird extensions (.foo, .README, .READMEFIRST, etc.). In most circumstances, this should not be required anymore. @@ -3055,7 +3055,7 @@ Determines what happens when @code{w3-fetch} is called on a document that has already been loaded into another buffer. Possible values are: @code{nil}, @code{yes}, and @code{no}. @code{nil} will ask the user if -Emacs-W3 should reuse the buffer (this is the default value). A value of +Emacs/W3 should reuse the buffer (this is the default value). A value of @code{yes} means assume the user wants to always reuse the buffer. A value of @code{no} means assume the user always wants to re-fetch the document. @@ -3105,9 +3105,9 @@ @cindex Relevant Newsgroups @cindex Newsgroups @cindex Support -For more help on Emacs-W3, please send me mail +For more help on Emacs/W3, please send me mail (@i{wmperry@@cs.indiana.edu}). Several discussion lists have also been -created for Emacs-W3. To subscribe, send mail to +created for Emacs/W3. To subscribe, send mail to @i{majordomo@@indiana.edu}, with the body of the message 'subscribe @var{listname} @var{<email addres>}'. All other mail should go to @i{<listname>@@indiana.edu}. @@ -3115,17 +3115,17 @@ @itemize @bullet @item -w3-announce -- this list is for anyone interested in Emacs-W3, and +w3-announce -- this list is for anyone interested in Emacs/W3, and should in general only be used by me. The gnu.emacs.sources newsgroup and a few other mailing lists are included on this. Please only use -this list for major package releases related to Emacs-W3. +this list for major package releases related to Emacs/W3. (@i{www-announce@@w3.org} is included on this list). @item -w3-beta -- this list is for beta testers of Emacs-W3. These brave souls test +w3-beta -- this list is for beta testers of Emacs/W3. These brave souls test out not-quite stable code. @item w3-dev -- a list consisting of myself and a few other people who are -interested in the internals of Emacs-W3, and doing active development work. +interested in the internals of Emacs/W3, and doing active development work. Pretty dead right now, but I hope it will grow. @end itemize @@ -3163,15 +3163,15 @@ @cindex Bugs @cindex Contacting the author -If any bugs are discovered in Emacs-W3, please report them to the +If any bugs are discovered in Emacs/W3, please report them to the mailing list @t{w3-beta@@indiana.edu} - this is where the brave souls -who beta test the latest versions of Emacs-W3 reside, and are generally +who beta test the latest versions of Emacs/W3 reside, and are generally very responsive to bug reports. @kindex w -Please make sure to use the bug submission feature of Emacs-W3, so that +Please make sure to use the bug submission feature of Emacs/W3, so that all relevant information will be sent along with your bug report. By -default this is bound to the `@key{w}' key when in an Emacs-W3 buffer, +default this is bound to the `@key{w}' key when in an Emacs/W3 buffer, or you can use @key{M-x w3-submit-bug} from anywhere within Emacs. For problems that are causing emacs to signal and error, please send a @@ -3215,7 +3215,7 @@ It is becoming more and more common to be behind a firewall or some other system that restricts your outbound network activity, especially if you are like me and away from the wonderful world of academia. -Emacs-W3 has several different methods to get around firewalls (not to +Emacs/W3 has several different methods to get around firewalls (not to worry though - none of them should get you in trouble with the local @sc{mis} department.) @@ -3271,7 +3271,7 @@ @end table @vindex url-gateway-local-host-regexp -Emacs-W3 has support for using the gateway mechanism for certain +Emacs/W3 has support for using the gateway mechanism for certain domains, and directly connecting to others. The variable @code{url-gateway-local-host-regexp} controls this behaviour. This is a regular expression @footnote{Please see the full Emacs distribution for @@ -3280,7 +3280,7 @@ are made through the gateway. @vindex url-gateway-method -Emacs-W3 supports several methods of getting around gateways. The +Emacs/W3 supports several methods of getting around gateways. The variable @code{url-gateway-method} controls which of these methods is used. This variable can have several values (use these as symbol names, not strings), ie: @samp{(setq url-gateway-method 'telnet)}. Possible @@ -3346,12 +3346,12 @@ @c This probably shouldn't be documented @item native -This means that Emacs-W3 should use the builtin networking code of +This means that Emacs/W3 should use the builtin networking code of Emacs. This should be used only if there is no firewall, or the Emacs source has already been hacked to get around the firewall. @end table -Emacs-W3 should now be able to get outside the local network. If none +Emacs/W3 should now be able to get outside the local network. If none of this makes sense, its probably my fault. Please check with the network administrators to see if they have a program that does most of this already, since somebody somewhere at the company has probably been @@ -3389,7 +3389,7 @@ NO_PROXY=*.aventail.com,home.com,*.seanet.com @end example -tells Emacs-W3 to contact all machines in the @b{aventail.com} and +tells Emacs/W3 to contact all machines in the @b{aventail.com} and @b{seanet.com} domains directly, as well as the machine named @b{home.com}. @@ -3417,7 +3417,7 @@ @cindex Gag Puke Retch @cindex Exportability @cindex Export Restrictions -In order to use SSL in Emacs-W3, an implementation of SSL is necessary. +In order to use SSL in Emacs/W3, an implementation of SSL is necessary. These are the implementations that I am aware of: @table @code @@ -3432,7 +3432,7 @@ ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/ @end table -Currently, an external in order to use SSL from within Emacs-W3. This +Currently, an external in order to use SSL from within Emacs/W3. This program should be able to take command line parameters for the hostname and port number to connect to, and read/write to standard input/output (similar to telnet, but without the annoying status messages). @@ -3470,13 +3470,13 @@ for mapping MIME types to external viewing programs. This takes some of the burden off of browser developers, so each browser does not have to support all image formats, or postscript, etc. Instead of having the -users of Emacs-W3 duplicate this in lisp, this file can be parsed using +users of Emacs/W3 duplicate this in lisp, this file can be parsed using the @code{mm-parse-mailcaps} function. This function is called each -time Emacs-W3 is loaded. It tries to locate mimetype files in several +time Emacs/W3 is loaded. It tries to locate mimetype files in several places. If the environment variable @code{MAILCAPS} is nonempty, then this is assumed to specify a UNIX-like path of mimetype files (this is a colon separated string of pathnames). If the @code{MAILCAPS} -environment variable is empty, then Emacs-W3 looks for these +environment variable is empty, then Emacs/W3 looks for these files: @enumerate
--- a/man/widget.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/widget.texi Mon Aug 13 08:55:10 2007 +0200 @@ -1,6 +1,6 @@ \input texinfo.tex -@c $Id: widget.texi,v 1.10 1997/03/19 06:12:09 steve Exp $ +@c $Id: widget.texi,v 1.11 1997/03/26 04:34:28 steve Exp $ @c %**start of header @setfilename widget @@ -15,7 +15,7 @@ @comment node-name, next, previous, up @top The Emacs Widget Library -Version: 1.65 +Version: 1.67 @menu * Introduction::
--- a/man/xemacs-faq.texi Mon Aug 13 08:54:52 2007 +0200 +++ b/man/xemacs-faq.texi Mon Aug 13 08:55:10 2007 +0200 @@ -126,11 +126,11 @@ @node Q1.0.2, Q1.0.3, Q1.0.1, Introduction @section What is the current version of XEmacs? -The current version is 19.15, released in January, 1997. +The current version is 19.15, released in March, 1997. It has been decided that XEmacs 19.15 will be the final release of v19. -XEmacs 19.15 is scheduled for release in mid January. After a brief -period of further testing, XEmacs v20 will be released shortly after +XEmacs 19.15 is scheduled for release in late March. After a brief +period of further testing, XEmacs v20.1 will be released shortly after that. @node Q1.0.3, Q1.0.4, Q1.0.2, Introduction @@ -277,9 +277,20 @@ @section Is there a port of XEmacs to Microsoft ('95 or NT)? The closest is @dfn{Win-Emacs}, which is based on Lucid Emacs 19.6. -Available from <URL:http://www.pearlsoft.com/>. Someone at Microsoft -expressed some interest in working on a port of 19.14 to NT, but never -went any farther. +Available from <URL:http://www.pearlsoft.com/>. + +There are some people actively working on a NT port of v20.1: David +Hobley started the port. Marc Paquette +@example +<marcpa@@cam.org> +@end example +has also became part of this effort. + +Email the beta list +@example +<xemacs-beta@@xemacs.org> +@end example +if you are interested in helping. There's a port of GNU Emacs (not XEmacs) at @example
--- a/src/buffer.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/buffer.c Mon Aug 13 08:55:10 2007 +0200 @@ -1210,7 +1210,7 @@ */ (bufname)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object buf; REGISTER struct buffer *b; struct gcpro gcpro1, gcpro2; @@ -1378,7 +1378,26 @@ && BUF_SAVE_MODIFF (b) < b->auto_save_modified) { if (!NILP (Vdelete_auto_save_files)) - internal_delete_file (b->auto_save_file_name); + { + /* deleting the auto save file might kill b! */ + /* #### dmoore - fix this crap, we do this same gcpro and + buffer liveness check multiple times. Let's get a + macro or something for it. */ + GCPRO1 (buf); + internal_delete_file (b->auto_save_file_name); + UNGCPRO; + b = XBUFFER (buf); + + if (!BUFFER_LIVE_P (b)) + return Qnil; + + if (b == current_buffer) + { + Fset_buffer (Fother_buffer (buf, Qnil, Qnil)); + if (b == current_buffer) + return Qnil; + } + } } uninit_buffer_markers (b);
--- a/src/callproc.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/callproc.c Mon Aug 13 08:55:10 2007 +0200 @@ -184,6 +184,7 @@ char *bufptr = buf; int bufsize = 16384; int speccount = specpdl_depth (); + struct gcpro gcpro1; char **new_argv = (char **) alloca ((max (2, nargs - 2)) * sizeof (char *)); @@ -223,8 +224,8 @@ GCPRO2 (current_dir, path); /* Caller gcprotects args[] */ current_dir = current_buffer->directory; - current_dir = expand_and_dir_to_file - (Funhandled_file_name_directory (current_dir), Qnil); + current_dir = Funhandled_file_name_directory (current_dir); + current_dir = expand_and_dir_to_file (current_dir, Qnil); #if 0 /* I don't know how RMS intends this crock of shit to work, but it breaks everything in the presence of ange-ftp-visited files, so @@ -238,12 +239,17 @@ if (nargs >= 2 && ! NILP (args[1])) { + struct gcpro gcpro1; + GCPRO1 (current_buffer->directory); infile = Fexpand_file_name (args[1], current_buffer->directory); + UNGCPRO; CHECK_STRING (infile); } else infile = build_string (NULL_DEVICE); + GCPRO1 (infile); /* Fexpand_file_name might trash it */ + if (nargs >= 3) { buffer = args[2]; @@ -281,6 +287,8 @@ else buffer = Qnil; + UNGCPRO; + display = ((nargs >= 4) ? args[3] : Qnil); /* From here we assume we won't GC (unless an error is signaled). */
--- a/src/dired.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/dired.c Mon Aug 13 08:55:10 2007 +0200 @@ -615,7 +615,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object values[12]; Lisp_Object dirname = Qnil; struct stat s;
--- a/src/eval.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/eval.c Mon Aug 13 08:55:10 2007 +0200 @@ -41,6 +41,16 @@ struct backtrace *backtrace_list; +/* Note you must always fill all of the fields in a backtrace structure + before pushing them on the backtrace_list. The profiling code depends + on this. */ + +#define PUSH_BACKTRACE(bt) \ + do { (bt).next = backtrace_list; backtrace_list = &(bt); } while (0) + +#define POP_BACKTRACE(bt) \ + do { backtrace_list = (bt).next; } while (0) + /* This is the list of current catches (and also condition-cases). This is a stack: the most recent catch is at the head of the list. Catches are created by declaring a 'struct catchtag' @@ -2582,18 +2592,17 @@ #ifdef EMACS_BTL backtrace.id_number = 0; #endif - backtrace.next = backtrace_list; - backtrace_list = &backtrace; backtrace.function = &Qcall_interactively; backtrace.args = &cmd; backtrace.nargs = 1; backtrace.evalargs = 0; backtrace.pdlcount = specpdl_depth (); backtrace.debug_on_exit = 0; + PUSH_BACKTRACE (backtrace); final = Fcall_interactively (cmd, record, keys); - backtrace_list = backtrace.next; + POP_BACKTRACE (backtrace); return (final); } else if (STRINGP (final) || VECTORP (final)) @@ -2917,13 +2926,12 @@ backtrace.id_number = 0; #endif backtrace.pdlcount = specpdl_depth_counter; - backtrace.next = backtrace_list; - backtrace_list = &backtrace; backtrace.function = &original_fun; /* This also protects them from gc */ backtrace.args = &original_args; backtrace.nargs = UNEVALLED; backtrace.evalargs = 1; backtrace.debug_on_exit = 0; + PUSH_BACKTRACE (backtrace); if (debug_on_next_call) do_debug_on_call (Qt); @@ -2999,7 +3007,7 @@ #endif if (backtrace.debug_on_exit) val = do_debug_on_exit (val); - backtrace_list = backtrace.next; + POP_BACKTRACE (backtrace); UNGCPRO; return (val); } @@ -3072,7 +3080,7 @@ #endif if (backtrace.debug_on_exit) val = do_debug_on_exit (val); - backtrace_list = backtrace.next; + POP_BACKTRACE (backtrace); return (val); } @@ -3107,15 +3115,12 @@ backtrace.id_number = 0; #endif backtrace.pdlcount = specpdl_depth_counter; - backtrace.next = backtrace_list; backtrace.function = &args[0]; backtrace.args = &args[1]; backtrace.nargs = nargs; backtrace.evalargs = 0; backtrace.debug_on_exit = 0; - /* XEmacs: make sure this is done last so we don't get race - conditions in the profiling code. */ - backtrace_list = &backtrace; + PUSH_BACKTRACE (backtrace); if (debug_on_next_call) do_debug_on_call (Qlambda); @@ -3204,7 +3209,7 @@ lisp_eval_depth--; if (backtrace.debug_on_exit) val = do_debug_on_exit (val); - backtrace_list = backtrace.next; + POP_BACKTRACE (backtrace); return val; }
--- a/src/event-stream.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/event-stream.c Mon Aug 13 08:55:10 2007 +0200 @@ -762,7 +762,7 @@ static void maybe_do_auto_save (void) { - /* This function can GC */ + /* This function can call lisp */ keystrokes_since_auto_save++; if (auto_save_interval > 0 && keystrokes_since_auto_save > max (auto_save_interval, 20) && @@ -1968,7 +1968,7 @@ */ (event, prompt)) { - /* This function can GC */ + /* This function can call lisp */ /* #### We start out using the selected console before an event is received, for echoing the partially completed command. This is most definitely wrong -- there needs to be a separate
--- a/src/fileio.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/fileio.c Mon Aug 13 08:55:10 2007 +0200 @@ -339,6 +339,7 @@ */ (filename, operation)) { + /* This function does not GC */ /* This function must not munge the match data. */ Lisp_Object chain, inhibited_handlers; @@ -373,7 +374,7 @@ static Lisp_Object call2_check_string (Lisp_Object fn, Lisp_Object arg0, Lisp_Object arg1) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object result = call2 (fn, arg0, arg1); CHECK_STRING (result); return (result); @@ -382,7 +383,7 @@ static Lisp_Object call2_check_string_or_nil (Lisp_Object fn, Lisp_Object arg0, Lisp_Object arg1) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object result = call2 (fn, arg0, arg1); if (!NILP (result)) CHECK_STRING (result); @@ -393,7 +394,7 @@ call3_check_string (Lisp_Object fn, Lisp_Object arg0, Lisp_Object arg1, Lisp_Object arg2) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object result = call3 (fn, arg0, arg1, arg2); CHECK_STRING (result); return (result); @@ -409,7 +410,7 @@ */ (file)) { - /* This function can GC */ + /* This function can call lisp */ Bufbyte *beg; Bufbyte *p; Lisp_Object handler; @@ -477,7 +478,7 @@ */ (file)) { - /* This function can GC */ + /* This function can call lisp */ Bufbyte *beg, *p, *end; Lisp_Object handler; @@ -513,7 +514,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; /* If the file name has special constructs in it, @@ -613,7 +614,7 @@ */ (file)) { - /* This function can GC */ + /* This function can call lisp */ char *buf; Lisp_Object handler; @@ -799,7 +800,7 @@ */ (directory)) { - /* This function can GC */ + /* This function can call lisp */ char *buf; Lisp_Object handler; @@ -867,7 +868,7 @@ */ (name, defalt)) { - /* This function can GC */ + /* This function can call lisp */ Bufbyte *nm; Bufbyte *newdir, *p, *o; @@ -1397,7 +1398,7 @@ */ (filename, defalt)) { - /* This function can GC */ + /* This function can call lisp */ struct gcpro gcpro1; Lisp_Object expanded_name; Lisp_Object handler; @@ -1524,6 +1525,7 @@ */ (string)) { + /* This function can call lisp */ Bufbyte *nm; Bufbyte *s, *p, *o, *x, *endp; @@ -1734,12 +1736,12 @@ Lisp_Object expand_and_dir_to_file (Lisp_Object filename, Lisp_Object defdir) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; struct gcpro gcpro1; - GCPRO1 (filename); abspath = Fexpand_file_name (filename, defdir); + GCPRO1 (abspath); #ifdef VMS { Bufbyte c = @@ -1772,6 +1774,7 @@ barf_or_query_if_file_exists (Lisp_Object absname, CONST char *querystring, int interactive, struct stat *statptr) { + /* This function can call lisp */ struct stat statbuf; /* stat is a good way to tell whether the file exists, @@ -1779,19 +1782,24 @@ if (stat ((char *) XSTRING_DATA (absname), &statbuf) >= 0) { Lisp_Object tem; - struct gcpro gcpro1; - - GCPRO1 (absname); + if (interactive) - tem = call1 - (Qyes_or_no_p, - (emacs_doprnt_string_c + { + Lisp_Object prompt; + struct gcpro gcpro1; + + prompt = emacs_doprnt_string_c ((CONST Bufbyte *) GETTEXT ("File %s already exists; %s anyway? "), Qnil, -1, XSTRING_DATA (absname), - GETTEXT (querystring)))); + GETTEXT (querystring)); + + GCPRO1 (prompt); + tem = call1 (Qyes_or_no_p, prompt); + UNGCPRO; + } else tem = Qnil; - UNGCPRO; + if (NILP (tem)) Fsignal (Qfile_already_exists, list2 (build_translated_string ("File already exists"), @@ -1820,7 +1828,7 @@ */ (filename, newname, ok_if_already_exists, keep_time)) { - /* This function can GC */ + /* This function can call lisp */ int ifd, ofd, n; char buf[16 * 1024]; struct stat st, out_st; @@ -1986,7 +1994,7 @@ */ (dirname)) { - /* This function can GC */ + /* This function can call lisp */ char dir [MAXPATHLEN]; Lisp_Object handler; struct gcpro gcpro1; @@ -2030,7 +2038,7 @@ */ (dirname)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; struct gcpro gcpro1; @@ -2057,7 +2065,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; struct gcpro gcpro1; @@ -2086,6 +2094,7 @@ int internal_delete_file (Lisp_Object filename) { + /* This function can call lisp */ return NILP (condition_case_1 (Qt, Fdelete_file, filename, internal_delete_file_1, Qnil)); } @@ -2101,7 +2110,7 @@ */ (filename, newname, ok_if_already_exists)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; struct gcpro gcpro1, gcpro2; @@ -2194,7 +2203,7 @@ */ (filename, newname, ok_if_already_exists)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; struct gcpro gcpro1, gcpro2; @@ -2251,7 +2260,7 @@ */ (filename, linkname, ok_if_already_exists)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; struct gcpro gcpro1, gcpro2; @@ -2359,6 +2368,7 @@ */ (filename)) { + /* This function does not GC */ Bufbyte *ptr; CHECK_STRING (filename); @@ -2438,16 +2448,14 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; Lisp_Object handler; struct stat statbuf; struct gcpro gcpro1; - GCPRO1 (filename); CHECK_STRING (filename); abspath = Fexpand_file_name (filename, Qnil); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -2469,7 +2477,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; Lisp_Object handler; struct gcpro gcpro1; @@ -2497,16 +2505,14 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; Lisp_Object handler; int desc; struct gcpro gcpro1; - GCPRO1 (filename); CHECK_STRING (filename); abspath = Fexpand_file_name (filename, Qnil); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -2530,16 +2536,14 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath, dir; Lisp_Object handler; struct stat statbuf; struct gcpro gcpro1; - GCPRO1 (filename); CHECK_STRING (filename); abspath = Fexpand_file_name (filename, Qnil); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -2577,7 +2581,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ #ifdef S_IFLNK char *buf; int bufsize; @@ -2586,14 +2590,14 @@ Lisp_Object handler; struct gcpro gcpro1; - GCPRO1 (filename); CHECK_STRING (filename); filename = Fexpand_file_name (filename, Qnil); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ + GCPRO1 (filename); handler = Ffind_file_name_handler (filename, Qfile_symlink_p); + UNGCPRO; if (!NILP (handler)) return call2 (handler, Qfile_symlink_p, filename); @@ -2629,7 +2633,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; struct stat st; Lisp_Object handler; @@ -2663,9 +2667,8 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object handler; - struct gcpro gcpro1; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -2674,17 +2677,10 @@ return call2 (handler, Qfile_accessible_directory_p, filename); - /* #### dmoore - this gcpro on filename should be unneccesary since - the caller should ahve already protected it. */ - GCPRO1 (filename); if (NILP (Ffile_directory_p (filename))) - { - UNGCPRO; return (Qnil); - } - handler = Ffile_executable_p (filename); - UNGCPRO; - return (handler); + else + return Ffile_executable_p (filename); } DEFUN ("file-regular-p", Ffile_regular_p, 1, 1, 0, /* @@ -2693,6 +2689,7 @@ */ (filename)) { + /* This function can call lisp */ Lisp_Object abspath; struct stat st; Lisp_Object handler; @@ -2720,7 +2717,7 @@ */ (filename)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; struct stat st; Lisp_Object handler; @@ -2755,15 +2752,16 @@ */ (filename, mode)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath; Lisp_Object handler; struct gcpro gcpro1; GCPRO1 (current_buffer->directory); abspath = Fexpand_file_name (filename, current_buffer->directory); + UNGCPRO; + CHECK_INT (mode); - UNGCPRO; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -2830,7 +2828,7 @@ */ (file1, file2)) { - /* This function can GC */ + /* This function can call lisp */ Lisp_Object abspath1, abspath2; struct stat st; int mtime1; @@ -2897,7 +2895,8 @@ */ (filename, visit, beg, end, replace)) { - /* This function can GC */ + /* This function can call lisp */ + /* #### dmoore - this function hasn't been checked for gc recently */ struct stat st; int fd; int saverrno = 0; @@ -3347,7 +3346,7 @@ */ (start, end, filename, append, visit, lockname)) { - /* This function can GC */ + /* This function can call lisp */ int desc; int failure; int save_errno = 0; @@ -3974,7 +3973,7 @@ */ (buf)) { - /* This function can GC */ + /* This function can call lisp */ struct buffer *b; struct stat st; Lisp_Object handler; @@ -4040,7 +4039,7 @@ */ (time_list)) { - /* This function can GC */ + /* This function can call lisp */ if (!NILP (time_list)) { time_t the_time; @@ -4079,7 +4078,7 @@ */ (buf, in_time)) { - /* This function can GC */ + /* This function can call lisp */ unsigned long time_to_use = 0; int set_time_to_use = 0; struct stat st; @@ -4153,7 +4152,7 @@ static Lisp_Object auto_save_error (Lisp_Object condition_object, Lisp_Object ignored) { - /* This function can GC */ + /* This function can call lisp */ if (gc_in_progress) return Qnil; /* Don't try printing an error message after everything is gone! */ @@ -4173,7 +4172,8 @@ static Lisp_Object auto_save_1 (Lisp_Object ignored) { - /* This function can GC */ + /* This function can call lisp */ + /* #### I think caller is protecting current_buffer? */ struct stat st; Lisp_Object fn = current_buffer->filename; Lisp_Object a = current_buffer->auto_save_file_name; @@ -4196,6 +4196,26 @@ Fwrite_region_internal (Qnil, Qnil, a, Qnil, Qlambda, Qnil); } +static Lisp_Object +auto_save_expand_name_error (Lisp_Object condition_object, Lisp_Object ignored) +{ + /* #### this function should spew an error message about not being + able to open the .saves file. */ + return Qnil; +} + +static Lisp_Object +auto_save_expand_name (Lisp_Object name) +{ + struct gcpro gcpro1; + + /* note that caller did NOT gc protect name, so we do it. */ + /* #### dmoore - this might not be neccessary, if condition_case_1 + protects it. but I don't think it does. */ + GCPRO1 (name); + RETURN_UNGCPRO (Fexpand_file_name (name, Qnil)); +} + static Lisp_Object do_auto_save_unwind (Lisp_Object fd) @@ -4233,7 +4253,7 @@ */ (no_message, current_only)) { - /* This function can GC */ + /* This function can call lisp */ struct buffer *b; Lisp_Object tail, buf; int auto_saved = 0; @@ -4262,7 +4282,10 @@ run_hook (Qauto_save_hook); if (GC_STRINGP (Vauto_save_list_file_name)) - listfile = Fexpand_file_name (Vauto_save_list_file_name, Qnil); + listfile = condition_case_1 (Qt, + auto_save_expand_name, + Vauto_save_list_file_name, + auto_save_expand_name_error, Qnil); /* Make sure auto_saving is reset. */ record_unwind_protect (do_auto_save_unwind_2, make_int (auto_saving));
--- a/src/glyphs-x.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/glyphs-x.c Mon Aug 13 08:55:10 2007 +0200 @@ -387,6 +387,7 @@ simple_image_type_normalize (Lisp_Object inst, Lisp_Object console_type, Lisp_Object image_type_tag) { + /* This function can call lisp */ Lisp_Object file = Qnil; struct gcpro gcpro1, gcpro2; Lisp_Object alist = Qnil; @@ -2974,6 +2975,7 @@ static Lisp_Object xface_normalize (Lisp_Object inst, Lisp_Object console_type) { + /* This funcation can call lisp */ Lisp_Object file = Qnil, mask_file = Qnil; struct gcpro gcpro1, gcpro2, gcpro3; Lisp_Object alist = Qnil;
--- a/src/glyphs.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/glyphs.c Mon Aug 13 08:55:10 2007 +0200 @@ -386,6 +386,7 @@ Lisp_Object make_string_from_file (Lisp_Object file) { + /* This function can call lisp */ int count = specpdl_depth (); Lisp_Object temp_buffer; struct gcpro gcpro1;
--- a/src/minibuf.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/minibuf.c Mon Aug 13 08:55:10 2007 +0200 @@ -22,6 +22,9 @@ /* Synched up with: Mule 2.0, FSF 19.28. Mule-ized except as noted. Substantially different from FSF. */ +/* #### dmoore - All sorts of things in here can call lisp, like message. + Track all this stuff. */ + #include <config.h> #include "lisp.h" @@ -624,6 +627,7 @@ clear_echo_area_internal (struct frame *f, Lisp_Object label, int from_print, int no_restore) { + /* This function can call lisp */ if (!NILP (Ffboundp (Qclear_message))) { Lisp_Object frame; @@ -643,12 +647,14 @@ Lisp_Object clear_echo_area (struct frame *f, Lisp_Object label, int no_restore) { + /* This function can call lisp */ return clear_echo_area_internal (f, label, 0, no_restore); } Lisp_Object clear_echo_area_from_print (struct frame *f, Lisp_Object label, int no_restore) { + /* This function can call lisp */ return clear_echo_area_internal (f, label, 1, no_restore); } @@ -657,6 +663,7 @@ Bytecount offset, Bytecount length, Lisp_Object label) { + /* This function can call lisp */ Lisp_Object obj; struct gcpro gcpro1; Lisp_Object frame; @@ -704,6 +711,7 @@ Lisp_Object reloc, Bytecount offset, Bytecount length, Lisp_Object label) { + /* This function can call lisp */ clear_echo_area (f, label, 1); echo_area_append (f, nonreloc, reloc, offset, length, label); } @@ -721,6 +729,7 @@ Lisp_Object echo_area_status (struct frame *f) { + /* This function can call lisp */ if (!NILP (Ffboundp (Qcurrent_message_label))) { Lisp_Object frame; @@ -746,7 +755,7 @@ message_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc, Bytecount offset, Bytecount length) { - /* This can GC! */ + /* This function can call lisp */ if (NILP (Vexecuting_macro)) echo_area_message (selected_frame (), nonreloc, reloc, offset, length, Qmessage); @@ -756,7 +765,7 @@ message_append_internal (CONST Bufbyte *nonreloc, Lisp_Object reloc, Bytecount offset, Bytecount length) { - /* This can GC! */ + /* This function can call lisp */ if (NILP (Vexecuting_macro)) echo_area_append (selected_frame (), nonreloc, reloc, offset, length, Qmessage); @@ -769,6 +778,7 @@ static void message_1 (CONST char *fmt, va_list args) { + /* This function can call lisp */ if (fmt) { struct gcpro gcpro1; @@ -787,6 +797,7 @@ static void message_append_1 (CONST char *fmt, va_list args) { + /* This function can call lisp */ if (fmt) { struct gcpro gcpro1; @@ -805,12 +816,14 @@ void clear_message (void) { + /* This function can call lisp */ message_internal (0, Qnil, 0, 0); } void message (CONST char *fmt, ...) { + /* This function can call lisp */ /* I think it's OK to pass the data of Lisp strings as arguments to this function. No GC'ing will occur until the data has already been copied. */ @@ -826,6 +839,7 @@ void message_append (CONST char *fmt, ...) { + /* This function can call lisp */ va_list args; va_start (args, fmt); @@ -838,6 +852,7 @@ void message_no_translate (CONST char *fmt, ...) { + /* This function can call lisp */ /* I think it's OK to pass the data of Lisp strings as arguments to this function. No GC'ing will occur until the data has already been copied. */
--- a/src/process.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/process.c Mon Aug 13 08:55:10 2007 +0200 @@ -1191,6 +1191,8 @@ } else { + /* #### dmoore - file-directory-p can call lisp, make sure everything + here protects itself. */ if (!NILP (Ffile_directory_p (program))) error ("Specified program for new process is a directory"); }
--- a/src/profile.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/profile.c Mon Aug 13 08:55:10 2007 +0200 @@ -63,38 +63,63 @@ Lisp_Object QSprocessing_events_at_top_level; Lisp_Object QSunknown; +/* We use inside_profiling to prevent the handler from writing to + the table while another routine is operating on it. We also set + inside_profiling in case the timeout between signal calls is short + enough to catch us while we're already in there. */ +volatile static int inside_profiling; + static SIGTYPE sigprof_handler (int signo) { - Lisp_Object fun; + /* Don't do anything if we are shutting down, or are doing a maphash + or clrhash on the table. */ + if (!inside_profiling && !preparing_for_armageddon) + { + Lisp_Object fun; + + /* If something below causes an error to be signaled, we'll + not correctly reset this flag. But we'll be in worse shape + than that anyways, since we'll longjmp back to the last + condition case. */ + inside_profiling = 1; + + if (profiling_redisplay_flag) + fun = QSin_redisplay; + else if (gc_in_progress) + fun = QSin_garbage_collection; + else if (backtrace_list) + { + fun = *backtrace_list->function; - if (profiling_redisplay_flag) - fun = QSin_redisplay; - else if (gc_in_progress) - fun = QSin_garbage_collection; - else if (backtrace_list) - { - fun = *backtrace_list->function; + /* #### dmoore - why do we need to unmark it, we aren't in GC. */ + XUNMARK (fun); + if (!GC_SYMBOLP (fun) && !GC_COMPILED_FUNCTIONP (fun)) + fun = QSunknown; + } + else + fun = QSprocessing_events_at_top_level; - XUNMARK (fun); - if (!GC_SYMBOLP (fun) && !GC_COMPILED_FUNCTIONP (fun)) - fun = QSunknown; + { + /* #### see comment about memory allocation in start-profiling. + Allocating memory in a signal handler is BAD BAD BAD. + If you are using the non-mmap rel-alloc code, you might + lose because of this. Even worse, if the memory allocation + fails, the `error' generated whacks everything hard. */ + long count; + CONST void *vval; + + if (gethash (LISP_TO_VOID (fun), big_profile_table, &vval)) + count = (long) vval; + else + count = 0; + count++; + vval = (CONST void *) count; + puthash (LISP_TO_VOID (fun), (void *) vval, big_profile_table); + } + + inside_profiling = 0; } - else - fun = QSprocessing_events_at_top_level; - - { - long count; - CONST void *vval; - - if (gethash (LISP_TO_VOID (fun), big_profile_table, &vval)) - count = (long) vval; - else - count = 0; - count++; - vval = (CONST void *) count; - puthash (LISP_TO_VOID (fun), (void *) vval, big_profile_table); - } } DEFUN ("start-profiling", Fstart_profiling, 0, 1, 0, /* @@ -110,6 +135,7 @@ */ (microsecs)) { + /* This function can GC */ int msecs; struct itimerval foo; @@ -136,6 +162,7 @@ EMACS_NORMALIZE_TIME (foo.it_value); foo.it_interval = foo.it_value; profiling_active = 1; + inside_profiling = 0; setitimer (ITIMER_PROF, &foo, 0); return Qnil; } @@ -145,6 +172,7 @@ */ ()) { + /* This function does not GC */ struct itimerval foo; foo.it_value.tv_sec = 0; @@ -156,6 +184,13 @@ return Qnil; } +static Lisp_Object +profile_lock_unwind (Lisp_Object ignore) +{ + inside_profiling = 0; + return Qnil; +} + struct get_profiling_info_closure { Lisp_Object accum; @@ -166,7 +201,7 @@ void *void_val, void *void_closure) { - /* This function can GC */ + /* This function does not GC */ Lisp_Object key; struct get_profiling_info_closure *closure = void_closure; EMACS_INT val; @@ -183,11 +218,18 @@ */ ()) { + /* This function does not GC */ struct get_profiling_info_closure closure; closure.accum = Qnil; if (big_profile_table) - maphash (get_profiling_info_maphash, big_profile_table, &closure); + { + int count = specpdl_depth (); + record_unwind_protect (profile_lock_unwind, Qnil); + inside_profiling = 1; + maphash (get_profiling_info_maphash, big_profile_table, &closure); + unbind_to (count, Qnil); + } return closure.accum; } @@ -201,7 +243,6 @@ void *void_val, void *void_closure) { - /* This function can GC */ Lisp_Object key; struct mark_profiling_info_closure *closure = void_closure; @@ -212,11 +253,16 @@ void mark_profiling_info (void (*markfun) (Lisp_Object)) { + /* This function does not GC (if markfun doesn't) */ struct mark_profiling_info_closure closure; closure.markfun = markfun; if (big_profile_table) - maphash (mark_profiling_info_maphash, big_profile_table, &closure); + { + inside_profiling = 1; + maphash (mark_profiling_info_maphash, big_profile_table, &closure); + inside_profiling = 0; + } } DEFUN ("clear-profiling-info", Fclear_profiling_info, 0, 0, 0, /* @@ -224,8 +270,13 @@ */ ()) { + /* This function does not GC */ if (big_profile_table) - clrhash (big_profile_table); + { + inside_profiling = 1; + clrhash (big_profile_table); + inside_profiling = 0; + } return Qnil; } @@ -258,6 +309,8 @@ */ ); default_profiling_interval = 1000; + inside_profiling = 0; + QSin_redisplay = build_string ("(in redisplay)"); staticpro (&QSin_redisplay); QSin_garbage_collection = build_string ("(in garbage collection)");
--- a/src/ralloc.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/ralloc.c Mon Aug 13 08:55:10 2007 +0200 @@ -757,7 +757,11 @@ static int MHASH (VM_ADDR addr) { +#if (LONGBITS == 64) + unsigned long int addr_shift = (unsigned long int)(addr) >> USELESS_LOWER_ADDRESS_BITS; +#else unsigned int addr_shift = (unsigned int)(addr) >> USELESS_LOWER_ADDRESS_BITS; +#endif int hval = addr_shift % MHASH_PRIME; /* We could have addresses which are -ve when converted to signed ints */ return ((hval >= 0) ? hval : MHASH_PRIME + hval);
--- a/src/s/linux.h Mon Aug 13 08:54:52 2007 +0200 +++ b/src/s/linux.h Mon Aug 13 08:55:10 2007 +0200 @@ -289,3 +289,8 @@ #endif /* XEmacs: removed setpgrp() definition because we use setpgid() when it's available, and autodetect it. */ + +/* glibc fuckage */ +#if defined __GLIBC__ && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || __GLIBC__ > 2) +# define GETPGRP_NEEDS_ARG +#endif
--- a/src/signal.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/signal.c Mon Aug 13 08:55:10 2007 +0200 @@ -376,7 +376,9 @@ static SIGTYPE interrupt_signal (int sig) { - /* This function can GC (?!) */ + /* This function can call lisp */ + /* #### we should NOT be calling lisp from a signal handler, boys + and girls */ /* Must preserve main program's value of errno. */ int old_errno = errno;
--- a/src/sound.c Mon Aug 13 08:54:52 2007 +0200 +++ b/src/sound.c Mon Aug 13 08:55:10 2007 +0200 @@ -75,11 +75,13 @@ */ (file, volume, device)) { - /* This function can GC */ + /* This function can call lisp */ int vol; #if defined (HAVE_NATIVE_SOUND) || defined (HAVE_NAS_SOUND) struct device *d = decode_device (device); #endif + struct gcpro gcpro1; + CHECK_STRING (file); if (NILP (volume)) vol = bell_volume; @@ -89,12 +91,14 @@ vol = XINT (volume); } + GCPRO1 (file); file = Fexpand_file_name (file, Qnil); if (NILP (Ffile_readable_p (file))) if (NILP (Ffile_exists_p (file))) error ("file does not exist."); else error ("file is unreadable."); + UNGCPRO; #ifdef HAVE_NAS_SOUND if (DEVICE_CONNECTED_TO_NAS_P (d))