Initial revision
authorJohn Ellis <johne@verizon.net>
Mon, 3 Apr 2000 18:24:05 +0000 (18:24 +0000)
committerJohn Ellis <johne@verizon.net>
Mon, 3 Apr 2000 18:24:05 +0000 (18:24 +0000)
60 files changed:
.cvsignore [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
BUGS [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
HACKING [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
acconfig.h [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
configure.in [new file with mode: 0644]
gqview.desktop [new file with mode: 0644]
gqview.png [new file with mode: 0644]
gqview.spec.in [new file with mode: 0644]
po/.cvsignore [new file with mode: 0644]
po/ChangeLog [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
src/.cvsignore [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/config.c [new file with mode: 0644]
src/dnd.c [new file with mode: 0644]
src/filelist.c [new file with mode: 0644]
src/fileops.c [new file with mode: 0644]
src/globals.c [new file with mode: 0644]
src/gqview.h [new file with mode: 0644]
src/icons/.cvsignore [new file with mode: 0644]
src/icons/Makefile.am [new file with mode: 0644]
src/icons/icon_config.xpm [new file with mode: 0644]
src/icons/icon_float.xpm [new file with mode: 0644]
src/icons/icon_home.xpm [new file with mode: 0644]
src/icons/icon_reload.xpm [new file with mode: 0644]
src/icons/icon_thumb.xpm [new file with mode: 0644]
src/icons/icon_zoom_fit.xpm [new file with mode: 0644]
src/icons/icon_zoom_in.xpm [new file with mode: 0644]
src/icons/icon_zoom_norm.xpm [new file with mode: 0644]
src/icons/icon_zoom_out.xpm [new file with mode: 0644]
src/icons/img_unknown.xpm [new file with mode: 0644]
src/image.c [new file with mode: 0644]
src/image.h [new file with mode: 0644]
src/img-main.c [new file with mode: 0644]
src/img-view.c [new file with mode: 0644]
src/intl.h [new file with mode: 0644]
src/logo.h [new file with mode: 0644]
src/main.c [new file with mode: 0644]
src/menu.c [new file with mode: 0644]
src/pathsel.c [new file with mode: 0644]
src/rcfile.c [new file with mode: 0644]
src/slideshow.c [new file with mode: 0644]
src/tabcomp.c [new file with mode: 0644]
src/tabcomp.xpm [new file with mode: 0644]
src/thumb.c [new file with mode: 0644]
src/utildlg.c [new file with mode: 0644]
src/utildlg.h [new file with mode: 0644]
src/utilops.c [new file with mode: 0644]
src/window.c [new file with mode: 0644]

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..e73b322
--- /dev/null
@@ -0,0 +1,22 @@
+Makefile
+Makefile.in
+aclocal.m4
+config.cache
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+configure.scan
+missing
+mkinstalldirs
+COPYING
+install-sh
+stamp-h
+stamp-h.in
+INSTALL
+gqview.spec
+intl
+ABOUT-NLS
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..ceae3fa
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+johne@bellatlantic.net
diff --git a/BUGS b/BUGS
new file mode 100644 (file)
index 0000000..3841700
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,2 @@
+ >drag and drop bug with GTK+-1.2.3, endless loops, see TODO for more.
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..1366bb0
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,375 @@
+Thu Mar 16 17:04:24 2000  John Ellis  <johne@bellatlantic.net>
+
+       * pathsel.c, tabcomp.c: Fix memory leaks.
+
+Fri Oct  1 17:17:21 1999  John Ellis  <johne@bellatlantic.net>
+
+       * po/ru.po: Added Russian translation
+       from Oleg Andrjushenko <oandr@itec.cn.ua>
+       * po/pt_BR.po: Added Brazilian Portuguese translation
+       from Vitor Fernandes <vitor_fernandes@SoftHome.net>
+       * po/ja/po: Added Japanese translation
+       from Shingo Akagaki <akagaki@ece.numazu-ct.ac.jp>
+       * configure.in: Updated ALL_LINGUAS.
+
+Mon Sep  6 06:25:38 1999  John Ellis  <johne@bellatlantic.net>
+
+       * image.c, img-main.c, img-view.c, window.c: Remove warnings for
+       gtk+-1.2.5-pre1. I think there are still realize issues with that
+       version of GTK+, however.
+
+Wed Aug 18 21:03:05 1999  John Ellis  <johne@bellatlantic.net>
+
+       * filelist.c: Fix reversal of calculating column width of the files
+       list for icons vs. no icons.
+       * pathsel.c, utilops.c: Set teh clist columns to autosize, so that
+       horizontal scrollbar is accurate (and usually not there ;)
+
+Wed Aug 18 20:35:07 1999  John Ellis  <johne@bellatlantic.net>
+
+       * gqview.h, tabcomp.c, utilops.c: Move and copy dialogs now have a
+       history. This was done by adding a combo widget option to the tab
+       completion routines.
+
+Wed Aug 18 17:37:48 1999  John Ellis  <johne@bellatlantic.net>
+
+       * config.c: Fix 'fall back to 48x48 icon size' bug.
+
+Mon Aug 16 13:25:29 1999  John Ellis  <johne@bellatlantic.net>
+
+       * po/de.po: Added german translation
+       by mawarkus@t-online.de (Matthias Warkus)
+       * configure.in (ALL_LINGUAS): Added de.
+
+Mon Aug 16 12:44:56 1999  John Ellis  <johne@bellatlantic.net>
+
+       * utilops.c: Make it easier for translators.
+
+Mon Aug 16 12:09:53 1999  John Ellis  <johne@bellatlantic.net>
+
+       * thumb.c: Regenerate thumbnails whent the preferred size changes.
+
+Mon Aug 16 11:56:29 1999  John Ellis  <johne@bellatlantic.net>
+
+       * config.c, globals.c, gqview.h, main.c, rcfile.c: Removed the
+       'save settings on exit' option and always save one exit, this was
+       leading to confusion as to why settings are not always saved.
+       * menus.: Removed the save settings menu line, no longer needed.
+
+Tue Aug 10 07:03:44 1999  John Ellis  <johne@bellatlantic.net>
+
+       * main.c(main): Use gtk_set_locale();
+       * window.c: Use gqview instead of main for wmhints.
+
+Tue Aug 10 06:55:48 1999  John Ellis  <johne@bellatlantic.net>
+
+       * filelist.c: Update the file count when files are removed.
+       * dnd.c: When a drag and drop results in a GDK_ACTION_MOVE, refresh
+       the lists to account for possibly deleted files.
+
+Fri Jul 23 17:09:02 1999  John Ellis  <johne@bellatlantic.net>
+
+       * window.c: Fix hang bug when dragging a file after starting with tools
+       floating, then unfloating the window. (don't use gtk_widget_reparent
+       for this).
+       * dnd.c: Properly add "\r\n" to the end of all files for URI types, now
+       all drags to Gimp 1.1.6 works.
+
+Tue Jul 20 20:37:03 1999  John Ellis  <johne@bellatlantic.net>
+
+       * configure.in, Makefile.am: Added localedir definition.
+       * src/main.c: Added locale and i18n initialization.
+
+Tue Jul 20 20:03:18 1999  John Ellis  <johne@bellatlantic.net>
+
+       * configure.in, Makefile.am, autogen.sh: Add gettext calls, simplify
+       gtk/imlib checks.
+       * po/POTFILES.in: Created for gettext.
+       * src/intl.h, gqmpeg.h, *.c: Added intl stuff, marked strings for
+       translation.
+
+Sat Jul 10 15:12:13 1999  John Ellis  <johne@bellatlantic.net>
+
+       * all files: Moved to autoconf and automake.
+
+Sat Jul  3 08:23:59 1999  John Ellis  <johne@bellatlantic.net>
+
+       * gqview.h, README, gqview.spec: Release 0.7.0
+
+Fri Jul  2 13:00:21 1999  John Ellis  <johne@bellatlantic.net>
+
+       * img-view.c: Added a 'close window' option to pop up dialog.
+
+Fri Jul  2 09:11:02 1999  John Ellis  <johne@bellatlantic.net>
+
+       * main.c (main): Fix so that window does not expand to image size when
+       strting up with an image (from command line).
+       * img-view.c (view_window_new): Follow the limit window size option,
+       if enabled.
+
+Thu Jul  1 20:13:31 1999  John Ellis  <johne@bellatlantic.net>
+
+       * main.c: Setup random seed, for better random slideshows.
+
+Sun Jun 27 15:17:10 1999  John Ellis  <johne@bellatlantic.net>
+
+       * img-main.c: Use black background for full screen.
+       * menu.c: Keep keyboard grab when full screen menu closes.
+
+Sun Jun 27 14:07:05 1999  John Ellis  <johne@bellatlantic.net>
+
+       * img-main.c: Keyboard now works with full screen.
+       * main.c: Drop out of full screen before exiting.
+
+Sun Jun 27 06:57:22 1999  John Ellis  <johne@bellatlantic.net>
+
+       * image.c: Fix image snapping to uppper left when resizing window.
+       * main.c: Increase progressive scrolling rate.
+
+Fri Jun 25 15:22:32 1999  John Ellis  <johne@bellatlantic.net>
+
+       * config.c, globals.c, gqview.h, img-view.c, main.c, rcfile.c: Added
+       progressive key scrolling option.
+
+Fri Jun 25 14:06:12 1999  John Ellis  <johne@bellatlantic.net>
+
+       * image.c, img-main.c, gqview.h: A few api changes with regard to image
+       auto-sizing and zooming.
+       * dnd.c: Made image dnd more generic to work with separate views.
+       * img-view.c: Added  dnd and keyboard support.
+
+Fri Jun 25 11:00:38 1999  John Ellis  <johne@bellatlantic.net>
+
+       * image.c, img-view.c, window.c: Fixups for window resizing and initial
+       size setting.
+
+Fri Jun 18 13:42:35 1999  John Ellis  <johne@bellatlantic.net>
+
+       * dnd.c, filelist.c, gqview.h, menu.c: Dragging and right clicking on
+       file list no longer displays image, but correctly, only displays
+       action/popup menu.
+       * globals.c, gqview.h, img-main.c, main.c, menu.c, window.c: Add full
+       screen option.
+
+Fri Jun 18 04:24:51 1999  John Ellis  <johne@bellatlantic.net>
+
+       * image.[ch], img-main.c, gqview.h: Beginnings of adding capability to
+       view images in a new window. ImageWindow functions are now completely
+       generic (save one spot).
+
+Wed Jun 16 03:47:36 1999  John Ellis  <johne@bellatlantic.net>
+
+       * slideshow.c, filelist.c: Make slideshow work correctly.
+       * config.c, rcfile.c: Add saving and adjustment of slide show options.
+
+Wed Jun 16 00:46:09 1999  John Ellis  <johne@bellatlantic.net>
+
+       * slideshow.c, globals.c, gqview.h: Begin slideshow ability.
+       * menu.c: Add 'Toggle slideshow' so view menu, may not stay here.
+       * filelist.c: Made a few functions needed for slideshow public.
+
+Tue Jun 15 19:21:26 1999  John Ellis  <johne@bellatlantic.net>
+
+       * filelist.c, pathsel.c, tabcomp.c: Small speed improvements in
+       handling (creating) GLists.
+
+Sat Jun 12 23:17:34 1999  John Ellis  <johne@bellatlantic.net>
+
+       * rcfile.c (load_options): Fix memory leak, patch submitted by
+       F. Petitjean <fpetitje@bureauveritas.com>
+
+Thu May 27 14:32:22 1999  John Ellis  <johne@bellatlantic.net>
+
+       * gqmpeg.h, README, gqmpeg.spec: Release 0.6.1
+
+Thu May 27 13:10:02 1999  John Ellis  <johne@bellatlantic.net>
+
+       * filelist.c: Generate thumbnails for visible files first. Thumbnails
+       are now kept when renaming.
+
+Thu May 27 11:54:09 1999  John Ellis  <johne@bellatlantic.net>
+
+       * pathsel.c: Merge improvements from gqmpeg version.
+       * tabcomp.c, tabcomp.xpm: ditto.
+       * utildlg.c: ditto.
+       * config.c, utilops.c, window.c: Use newer features of above.
+
+Thu May 27 11:44:00 1999  John Ellis  <johne@bellatlantic.net>
+
+       * filelist.c, image.c, gqmpeg.h: Properly update the image window when
+       viewed files are moved, renamed, or deleted.
+
+Thu May 27 11:01:31 1999  John Ellis  <johne@bellatlantic.net>
+
+       * main.c (main): Push correct visual and colormap to fix 8 but psuedo
+       color displays.
+
+Sun May 23 09:21:50 1999  John Ellis  <johne@bellatlantic.net>
+
+       * Makefile: Added static build target, some cleanup.
+
+Sat Apr 10 19:01:33 1999  John Ellis  <johne@bellatlantic.net>
+
+       * window.c(toolwindow_create): Use gtk_window_set_policy on toolwindow
+       so it can be resized smaller.
+
+0.6.0 (3-5-98)
+  > Major rewrite (60-70%), now requires gtk+-1.2.0
+  > Multiple file selection.
+  > Drag and drop.
+  > Better keyboard support.
+  > xvpics thumbnail support (read only), optional.
+  - Add command line options to force show and hide of tools.
+  * Fix tab completion bug.
+  * Fix gtk 1.2.0 related bugs.
+
+0.5.1 (12-8-98)
+  - Should compile now without editing the Makefile with any gtk through 1.1.5
+  * Fix file highlight bug when user tab completes to currently displayed dir.
+  * Fix for FreeBSD.
+
+0.5.0  (11-11-98)
+  > Add path entry window with tab completion.
+  > Add tab completion to all areas where a path can be typed.
+  > Add option to save window positions.
+  - Pressing '+' zooms image. Previously only '=' was bound, causing problems
+    for some keyboard layouts.
+  - Add border to floating tools window for better appearance on some WM's.
+
+0.4.3  (10-09-98)
+  * Fix bug when 'fit window to image' is on, tools float/hide, and the next
+    image selected has the same dimensions, it would not display.
+  * More fixes dealing with 'fit window to image'
+
+0.4.2  (10-07-98)
+  > Add 'fit window to image' option when tools float or hide.
+  > Add copy and move dialogs.
+  > Add option to hide the tools completely.
+  > Save settings on exit option added, and option to restore tool state.
+  - Pressing the [ESC] key will now stop loading of thumbnails.
+  - [CTRL] - M is now moves files, purging old thumbnails is now [CTRL] - T.
+  - Add save button to config dialog.
+  - New configuration tab: image, moved relevent options there.
+
+0.4.1  (9-11-98)
+  > Scrollbars removed, now you can pan the image by pressing and dragging the
+    mouse on the image. The arrow keys will pan too (use [Ctrl] to pan faster)
+  > The file selection area and status line can be 'floated' into a separate
+    window, this allows the image window to display more of the image.
+  > The file delete confirmation dialog can now be disabled in the options
+    window.
+  > The beginnings of keyboard support ( see the keyboard chart, above )
+  - Now if a thumbnail is older than it's parent image, the thumbnail is
+    recreated, so that changed images have their thumbnail properly updated.
+  - While loading thumbnails GQview is now responsive to commands, slowly, but
+    it works. You can now load images, delete files, etc. while the thumbnails
+    are being generated. The thumbnail generation can be interrupted too by
+    simply turning them off.
+  * The code that determines the user's HOME directory has been rewritten, now
+    hopefully users of nis will be happy. If the directory is not found or
+    cannot be determined, GQview exits semi-gracefully.
+  * Fixed some bugs here and there.
+
+0.4.0  (8-15-98)
+  > Thumbnail caching added ($HOME/.gqview_thmb).
+  - patch from Joshua Thomas Green applied for those that want to compile
+    with GTK 1.1.x (the development version), just uncomment one line in the
+    Makefile.
+  - patch from Joel Young applied to the .spec file of the RPM version.
+
+0.3.4  (7-30-98)
+  * Fixed problem loading files into external editors when a space was in the
+    pathname.
+
+0.3.3  (5-15-98)
+  - Changes to file listing code for speed improvement in large directories.
+  * Fixed a bug that would cause a thumbnail's height or width to be zero when
+    an image has a large aspect ratio.
+  * Fixed some memory leaks in the file listing code.
+  - Other small changes including source re-organization.
+  - Added a pixmap file to use as an icon (gqview.xpm).
+
+0.3.2  (5-7-98)
+  * Fixed a bug which made the first editor slot useless from config dialog.
+
+0.3.1  (5-4-98)
+  - Changed filelist code to properly implement Glist.
+  - Moved definitions of variables and #includes to better places.
+
+0.3.0  (4-24-98)
+  > New feature! Thumbnails displayed in the file list(us 't' to toggle).
+  > Thumbnails size can be selected (General Options).
+  > Rewrite (again) of the file list (to support adding/removing entries
+    without re-reading the entire directory listing, [still need to convert
+    the directory list, however]).
+  - minor display layout changes (to accomodate the progress bar).
+  - if a file format cannot be determined, a generic 'unknown image' picture
+    is displayed.
+  - added display for the number of files listed.
+  - added '-debug' command line option for debug output (preliminary)
+
+0.2.1  (4-8-98)
+  > Added a handle, now the file lists are sizeable.
+  - renamed menu item Exit to Quit.
+  - Added missing file includes that were exposed with GTK+ 0.99.10 release.
+
+0.2.0  (3-19-98)
+  > External editors can be specified in the configuration window (max 8).
+      Under the "external editors" tab.
+  - Popup menu for filelist (delete, rename, and edit).
+  - Filelist highlight now follows currently viewed image.
+  - A few minor fixes.
+
+0.1.1  (3-3-98)
+  > Updated code to compile with GTK+-0.99.4
+     (will not work with previous versions of GTK)
+  - Command line no longer requires a complete path to a file if it is in
+    the current working directory. (or must be relative to it)
+  - When moving to the next (or previous) image, the file list
+    scrolls to include the current image's name.
+
+0.1.0  (2-28-98)
+  > Added menu bar.
+  > Added keyboard shorcuts.
+  > Configuration can be saved (to .gqviewrc in user's home dir)
+  > Command line support. (specify startup directory or file to view)
+  > Can set startup directory in options window (can be disabled)
+  > Added custom filtering options to support more formats
+     (Imlib supports almost anything your system can read using
+      ImageMagick or Netpbm, if available).
+  > File operations: create directory, rename file, delete file.
+  > clicking mouse on image:
+      button one: next image
+      button two: previous image
+      button three: popup menu (zoom, file operations, edit image)
+  > Added option to load image into The Gimp.
+  - Fixed a bug in the history list truncating routine. (GQview would crash)
+  - Other minor improvements and fixes.
+
+0.0.3  (2-18-98)
+  > Source code clean up! The source code has been organized
+    and is now readable (some code still needs organizing, but
+    at least now the code can be followed).
+  > Makefile rewritten, it may still need editing for some systems.
+    The '-g' gcc option was removed for the released code, this makes
+    the binary about 1/3 smaller (it removes some debugging facilities)
+  - Fixed the transparency problem. This removes the garbage displayed
+    where an image is transparent, unfortunately for now it is set to purple.
+
+0.0.2  (2-14-98)
+  > Rewrote directory and file list handling, the lists
+    can now be of any length.
+  > Lists are now sorted.
+  > History list no longer expands out of control as the
+    directory path gets longer, entries are truncated at
+    32 characters and '/...' is prepended.
+  > Added configuration window, including:
+    - show or hide dot files
+    - select default zoom mode for new image
+    - disable file filtering
+    - choose file types to filter
+    - about tab for version and contact info
+
+0.0.1  (2-10-98)
+  > No history, first release!
+
diff --git a/HACKING b/HACKING
new file mode 100644 (file)
index 0000000..5ffd6d6
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,14 @@
+A brief overview for those that wish to work with the source.
+
+The Makefiles and configure script are generated by the autogen.sh script, usually
+only distributed with snapshot releases. Running autogen.sh requires automake
+and autoconf. GNU gettext may also be needed by autogen.sh.
+
+CVS commits _require_ a ChangeLog entry, commits without a ChangeLog will be reverted.
+
+Translators create a translation by creating the appropriate .po file in the /po
+directory. Please see the gettext info pages for an overview and instructions.
+Basically: Add your language code to the   ALL_LINGUAS=   line in configure.in,
+then get started translating the strings in your ??.po file.
+Note: The strings for debug output is intentionally not marked for translation.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..8a6e380
--- /dev/null
@@ -0,0 +1,15 @@
+## Process this file with automake to produce Makefile.in.
+
+SUBDIRS = src intl po
+DIST_SUBDIRS = src intl po
+
+EXTRA_DIST = gqview.desktop gqview.png gqview.spec BUGS ChangeLog
+
+if HAVE_GNOME
+desktopdir = $(GNOME_DATADIR)/gnome/apps/Graphics
+desktop_DATA = gqview.desktop
+
+icondir = $(GNOME_DATADIR)/pixmaps
+icon_DATA = gqview.png
+endif
+
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..4e5c3c9
--- /dev/null
+++ b/README
@@ -0,0 +1,118 @@
+###################################################################
+##                          GQview 0.7.0      (07/03/99)         ##
+##      This software is Copyright (C) 1999 by John Ellis.       ##
+##  Use this software at your own risk. I am not responsible for ##
+##        anything this software may do to your computer.        ##
+## This software falls under the GNU Public License. Please read ##
+##              the COPYING file for more information            ##
+###################################################################
+
+Author: John Ellis
+e-mail: gqview@email.com
+homepage: gqview.netpedia.net
+          www.geocities.com/SiliconValley/Haven/5235/ (mirror always up to date)
+
+======== Requirements
+
+  GTK+-1.2.0: ftp://ftp.gtk.org/pub/gtk
+  Imlib 1.9: ftp://ftp.labs.redhat.com/pub/imlib
+
+======== Notes and changes for this release
+
+  Changes:
+    > Now use autoconf/make, resulting in a configure script.
+    > Now supports i18n, added translations: de ja pt_BR ru
+    > Remove 'save settings on exit', they are now always saved.
+    > Copy/move dialogs now include drop down history.
+    - Icons now update when size is configured.
+    - When dragging files, and the action was a move, refresh the filelist.
+    * Icons sizes are now properly remembered when the config dialog is opened
+      then closed without re-selecting the size.
+
+  Notes:
+   known bug: When starting up with tools floating, then unfloat the tools and
+              attempt to do drag and drop, BOOM! endless loop of errors on
+              GTK+-1.2.3 (hint: could use a little help figuring this out)
+
+======== Installation
+
+  Compilation: ./configure ; make
+  General install: make install
+  GNOME install: make gnome-install is deprecated!, configure finds gnome for
+                 you now. 
+  Removal: make uninstall
+
+======== Description / Features
+
+  GQview is a graphics file viewer. Basic features:
+    - Single click image viewing / navigation.
+    - Zoom functions.
+    - Thumbnails, with optional caching and .xvpics support.
+    - Multiple file selection for move, copy, delete, rename, drag and drop.
+    - Drag and drop.
+    - Slideshow.
+    - Full screen.
+    - Ability to open images in external editors (configurable).
+
+======== Documentation (brief)
+
+  Keyboard commands:
+    [PageDown]                         next image
+    [PageUp]                           previous image
+    [Home]                             first image in list
+    [End]                              last image in list
+    [Tab]                              tab completion in path entry window
+    [Escape],                          cancel completion in path entry window
+    [Escape]                           stop generating thumbnails
+
+  Keyboard commands valid when image has focus (image has black rectangle)
+    arrow keys                         pan image
+    [Shift] - arrow keys               pan image faster
+    [Space]                            next image
+    [Backspace]                        previous image
+
+  File menu related:
+    [Ctrl] - N                         New directory
+    [Ctrl] - C                         Copy file
+    [Ctrl] - M                         Move file
+    [Ctrl] - R                         Rename file
+    [Ctrl] - D, [Delete]               Delete file
+    [Ctrl] - Q, Q                      Exit
+
+  Edit menu related:
+    [Ctrl] - 1 .. 8                    run external editor
+    [Ctrl] - O                         configure Options
+    [Ctrl] - S                         Save options
+    [Ctrl] - T                         Maintain thumbnails
+
+  View menu related:
+    +, =                               zoom in
+    -                                  zoom out
+    Z                                  zoom to original size
+    X                                  zoom to fit
+    T                                  toggle thumbnail display
+    R                                  refresh list
+    F                                  (Un)float file selection area
+    H                                  (Un)hide file selection area
+    [Ctrl] = F                         Toggle full screen
+    S                                  Toggle slide show
+
+======== Thanks go to the following for fixes, additions, and patches:
+
+  Oleg Andrjushenko <oandr@itec.cn.ua>
+      for Russian translation
+
+  Vitor Fernandes <vitor_fernandes@SoftHome.net>
+      for Brazilian Portuguese translation
+
+  Shingo Akagaki <akagaki@ece.numazu-ct.ac.jp>a
+      for Japanese translation
+
+  Matthias Warkus <mawarkus@t-online.de>
+      for German translation.
+
+  Diederen Damien <D.Diederen@student.ulg.ac.be>
+      for .xvpics thumbnail reading support.
+
+========
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..6e6d328
--- /dev/null
+++ b/TODO
@@ -0,0 +1,40 @@
+TODO key: d = done, w = work in progress, ? = possibly fixed, * = wt? - how?
+
+d>try gtk_container_remove instead of reparent, to try to fix dragging hang.
+d>After dragging files, check if they are now gone (moved).
+ >Remember previous directory used in move/copy dialogs.
+
+Major:
+----------------------------------------------
+d>Fix window resizing to start-up size when window is made smaller, then an
+  image is changed, or widget is 'operated'.
+d>Fix hang (endless gtk loop on drags in GTK+ 1.2.3) bah, in gdb its a pain,
+  breaking it within the error causes a stuck pointer grab :-/
+  HOW TO REPEAT:
+   enable 'save tool state'
+   set the tools to float
+   exit
+   restart
+   unfloat tools
+   try to do drag and drop -> BOOM!
+  UPDATE: I dunno, this still looks like a gtk bug?
+
+Minor:
+----------------------------------------------
+ >add a read-ahead buffer for next image, note that this will not be threaded.
+ >add command line option to invoke full screen and slideshow on startup
+ >make *'s const, where appropriate ()
+ >make Escape cancel dialogs.
+
+ >add progress dialog when moving/copying/deleting multiple files.
+ >.xbm file format not listed by default? .pnm, more?
+
+ >ability to specify view window background color
+ >show wait cursor during image load
+
+Wishlist?:
+----------------------------------------------
+ >image list, like playlist in sound players
+ >add vert drag bar
+ >make *.jpg on command line show only jpg files, for ex.
+
diff --git a/acconfig.h b/acconfig.h
new file mode 100644 (file)
index 0000000..83c904d
--- /dev/null
@@ -0,0 +1,9 @@
+#undef ENABLE_NLS
+#undef HAVE_CATGETS
+#undef HAVE_GETTEXT
+#undef HAVE_LC_MESSAGES
+#undef HAVE_STPCPY
+
+#undef PACKAGE
+#undef VERSION
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..4b1ca7c
--- /dev/null
@@ -0,0 +1,115 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+#this was originally taken from the gnome macros/autogen.sh scripts
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+(test -f $srcdir/configure.in \
+  && test -f $srcdir/src/main.c \
+  && test -f $srcdir/src/gqview.h) || {
+    echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+    echo " top-level gqview directory"
+    exit 1
+}
+
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+  echo
+  echo "**Error**: You must have \`autoconf' installed."
+  echo "Download the appropriate package for your distribution,"
+  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+  DIE=1
+}
+
+grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
+  grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+  (gettext --version) < /dev/null > /dev/null 2>&1 || {
+    echo
+    echo "**Error**: You must have \`gettext' installed."
+    echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
+    echo "(or a newer version if it is available)"
+    DIE=1
+  }
+}
+
+# if no automake, don't bother testing for aclocal
+test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
+  echo
+  echo "**Error**: Missing \`aclocal'.  The version of \`automake'"
+  echo "installed doesn't appear recent enough."
+  echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
+  echo "(or a newer version if it is available)"
+  DIE=1
+}
+
+if test "$DIE" -eq 1; then
+  exit 1
+fi
+
+if test -z "$*"; then
+  echo "**Warning**: I am going to run \`configure' with no arguments."
+  echo "If you wish to pass any to it, please specify them on the"
+  echo \`$0\'" command line."
+  echo
+fi
+
+case $CC in
+xlc )
+  am_opt=--include-deps;;
+esac
+
+for coin in `find $srcdir -name configure.in -print`
+do 
+  dr=`dirname $coin`
+  if test -f $dr/NO-AUTO-GEN; then
+    echo skipping $dr -- flagged as no auto-gen
+  else
+    echo processing $dr
+    macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
+    ( cd $dr
+      aclocalinclude="$ACLOCAL_FLAGS"
+      for k in $macrodirs; do
+       if test -d $k; then
+          aclocalinclude="$aclocalinclude -I $k"
+       ##else 
+       ##  echo "**Warning**: No such directory \`$k'.  Ignored."
+        fi
+      done
+      if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
+       if grep "sed.*POTFILES" configure.in >/dev/null; then
+         : do nothing -- we still have an old unmodified configure.in
+       else
+         echo "Creating $dr/aclocal.m4 ..."
+         test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
+         echo "Running gettextize...  Ignore non-fatal messages."
+         echo "no" | gettextize --force --copy
+         echo "Making $dr/aclocal.m4 writable ..."
+         test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
+        fi
+      fi
+      echo "Running aclocal $aclocalinclude ..."
+      aclocal $aclocalinclude
+      if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
+       echo "Running autoheader..."
+       autoheader
+      fi
+      echo "Running automake --gnu $am_opt ..."
+      automake --add-missing --gnu $am_opt
+      echo "Running autoconf ..."
+      autoconf
+    )
+  fi
+done
+
+conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
+
+if test x$NOCONFIGURE = x; then
+  echo Running $srcdir/configure $conf_flags "$@" ...
+  $srcdir/configure $conf_flags "$@" \
+  && echo Now type \`make\' to compile $PKG_NAME
+else
+  echo Skipping configure process.
+fi
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..c932ecf
--- /dev/null
@@ -0,0 +1,55 @@
+AC_INIT(src/main.c)
+AM_CONFIG_HEADER(config.h)
+
+AM_INIT_AUTOMAKE(gqview, 0.7.0f)
+
+AM_MAINTAINER_MODE
+
+AC_ISC_POSIX
+AC_PROG_CC
+AC_STDC_HEADERS
+AC_ARG_PROGRAM
+
+dnl reasonable guesses for where stuff is installed
+if test "x$prefix" = "xNONE"; then
+  prefix="/usr/local"
+else
+  prefix=$prefix
+fi
+
+AM_PATH_GTK(1.2.0,,AC_MSG_ERROR(GTK+ >= 1.2.0 not installed.))
+AM_PATH_GDK_IMLIB(1.9,,AC_MSG_ERROR(Imlib >= 1.9 not installed.))
+
+dnl CHECK_GNOME
+  AC_PATH_PROG(GNOME_CONFIG,gnome-config,no)
+  AM_CONDITIONAL(HAVE_GNOME, test $GNOME_CONFIG != no)
+  if test "$GNOME_CONFIG" = no; then
+    AC_MSG_RESULT(GNOME icon and menu entry will NOT be installed)
+  else
+    AC_MSG_RESULT(will install a GNOME icon and menu entry)
+    AC_SUBST(GNOME_DATADIR)
+    GNOME_DATADIR="`$GNOME_CONFIG --datadir`"
+  fi
+
+dnl utility conditional
+AM_CONDITIONAL(FALSE, test "x" = "y")
+
+dnl locale location for po
+localedir='${prefix}/share/locale'
+AC_SUBST(localedir)
+
+ALL_LINGUAS="de ja pt_BR ru"
+AM_GNU_GETTEXT
+
+AC_SUBST(CFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(LDFLAGS)
+
+AC_OUTPUT([
+Makefile
+intl/Makefile
+po/Makefile.in
+gqview.spec
+src/Makefile
+src/icons/Makefile
+])
diff --git a/gqview.desktop b/gqview.desktop
new file mode 100644 (file)
index 0000000..015ded6
--- /dev/null
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=GQview
+Comment=Image Viewer
+Exec=gqview
+Icon=gqview.png
+Terminal=0
+Type=Application
diff --git a/gqview.png b/gqview.png
new file mode 100644 (file)
index 0000000..88801e0
Binary files /dev/null and b/gqview.png differ
diff --git a/gqview.spec.in b/gqview.spec.in
new file mode 100644 (file)
index 0000000..fa10f4a
--- /dev/null
@@ -0,0 +1,53 @@
+%define ver      @VERSION@
+%define rel      1
+%define prefix   /usr
+
+Summary: Graphics file browser utility.
+Name: gqview
+Version: %ver
+Release: %rel
+Copyright: GPL
+Group: Applications/Multimedia
+Source: http://gqview.netpedia.net/gqview-%{ver}.tar.gz
+BuildRoot: /var/tmp/%{name}-%{version}-root
+
+URL: http://gqview.netpedia.net/index.html
+
+Requires: gtk+ >= 1.2
+Requires: imlib >= 1.9
+
+%description
+GQview is a browser for graphics files.
+Offering single click viewing of your graphics files.
+Includes thumbnail view, zoom and filtering features.
+And external editor support.
+
+%prep
+%setup
+
+%build
+if [ ! -f configure ]; then
+  CFLAGS="$MYCFLAGS" ./autogen.sh $MYARCH_FLAGS --prefix=%prefix
+else
+  CFLAGS="$MYCFLAGS" ./configure $MYARCH_FLAGS --prefix=%prefix
+fi
+
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make GNOME_DATADIR=$RPM_BUILD_ROOT%{prefix}/share prefix=$RPM_BUILD_ROOT%{prefix} install
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+
+%doc README COPYING TODO
+%{prefix}/bin/gqview
+@HAVE_GNOME_TRUE@%{prefix}/share/gnome/apps/Graphics/gqview.desktop
+@HAVE_GNOME_TRUE@%{prefix}/share/pixmaps/gqview.png
+
+
diff --git a/po/.cvsignore b/po/.cvsignore
new file mode 100644 (file)
index 0000000..2229300
--- /dev/null
@@ -0,0 +1,9 @@
+Makefile
+Makefile.in
+Makefile.in.in
+POTFILES
+cat-id-tbl.c
+gqview.pot
+stamp-cat-id
+*.gmo
+gqview.pot
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..c7d1d08
--- /dev/null
@@ -0,0 +1,16 @@
+./src/config.c
+./src/dnd.c
+./src/filelist.c
+./src/fileops.c
+./src/image.c
+./src/img-main.c
+./src/img-view.c
+./src/main.c
+./src/menu.c
+./src/pathsel.c
+./src/rcfile.c
+./src/tabcomp.c
+./src/thumb.c
+./src/utildlg.c
+./src/utilops.c
+./src/window.c
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..8178218
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,852 @@
+# gqmpeg de.po file.
+# Copyright (C) 1999 John Ellis.
+# Matthias Warkus <mawa@iname.com>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gqmpeg-0.6.3a\n"
+"POT-Creation-Date: 1999-08-21 14:22-0400\n"
+"PO-Revision-Date: 1999-08-15 23:47+02:00\n"
+"Last-Translator: Matthias Warkus <mawa@iname.com>\n"
+"Language-Team: Me and my monkey <mawa@iname.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/config.c:303
+msgid "GQview configuration"
+msgstr "GQview-Konfiguration"
+
+#: src/config.c:315
+msgid "Ok"
+msgstr "OK"
+
+#: src/config.c:320
+msgid "Apply"
+msgstr ""
+
+#: src/config.c:325 src/utildlg.c:140 src/utilops.c:414 src/utilops.c:722
+#: src/utilops.c:851 src/utilops.c:949
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: src/config.c:339
+msgid "General"
+msgstr "Allgemein"
+
+#: src/config.c:347
+msgid "Initial directory"
+msgstr "Anfängliches Verzeichnis"
+
+#: src/config.c:357
+msgid "On startup, change to this directory:"
+msgstr "Beim Start in dieses Verzeichnis wechseln:"
+
+#: src/config.c:369
+msgid "Use current"
+msgstr "Aktuelle benutzen"
+
+#: src/config.c:375
+msgid "Confirm file delete"
+msgstr "Dateilöschung bestätigen"
+
+#: src/config.c:377
+msgid "Remember tool state (float/hidden)"
+msgstr "An Werkzeugstatus erinnern (schwebend/verborgen)"
+
+#: src/config.c:379
+msgid "Remember window positions"
+msgstr "An Fensterpositionen erinnern"
+
+#: src/config.c:381
+msgid "Slide show"
+msgstr "Diavorführung"
+
+#: src/config.c:394
+msgid "Delay before image change (seconds):"
+msgstr "Verzögerung vor Bildwechsel (Sekunden):"
+
+#: src/config.c:407
+msgid "Random"
+msgstr "Zufall"
+
+#: src/config.c:409
+msgid "Repeat"
+msgstr "Wiederholung"
+
+#: src/config.c:416
+msgid "Image"
+msgstr "Bild"
+
+#: src/config.c:424
+msgid "When new image is selected:"
+msgstr "Wenn neues Bild ausgewählt wird:"
+
+#: src/config.c:434
+msgid "Zoom to original size"
+msgstr "Zu Ausgangsgröße zoomen"
+
+#: src/config.c:440 src/img-view.c:283 src/menu.c:458 src/menu.c:531
+#: src/menu.c:571 src/menu.c:661
+msgid "Fit image to window"
+msgstr "Bild in Fenster einpassen"
+
+#: src/config.c:446
+msgid "Leave Zoom at previous setting"
+msgstr "Zoom bei vorheriger Einstellung belassen"
+
+#: src/config.c:453
+msgid "Fit window to image when tools are hidden/floating"
+msgstr "Bild in Fenster einpassen wenn Werkzeuge verborgen sind / schweben"
+
+#: src/config.c:460
+msgid "Limit size when auto-sizing window"
+msgstr "Größe begrenzen bei der automatischen Fenstergrößenanpassung"
+
+#: src/config.c:470 src/menu.c:462
+msgid "Thumbnails"
+msgstr "Indexbilder"
+
+#: src/config.c:486
+msgid "Size:"
+msgstr "Größe:"
+
+#: src/config.c:515
+msgid "Cache thumbnails"
+msgstr "Indexbilder cachen"
+
+#: src/config.c:517
+msgid "Use xvpics thumbnails when found (read only)"
+msgstr "xvpics-Indexbilder benutzen, wenn gefunden (nur Lesezugriff)"
+
+#: src/config.c:520
+msgid "Progressive keyboard scrolling"
+msgstr "Gleichmäßiges Tastaturrollen"
+
+#: src/config.c:527
+msgid "Filtering"
+msgstr "Filtern"
+
+#: src/config.c:536
+msgid "Show entries that begin with a dot"
+msgstr "Einträge zeigen, die mit einem Punkt beginnen"
+
+#: src/config.c:538
+msgid "Disable File Filtering"
+msgstr "Dateifiltern abschalten"
+
+#: src/config.c:540
+msgid "Include files of type:"
+msgstr "Dateien dieses Typ einschließen:"
+
+#: src/config.c:590
+msgid "Custom file types:"
+msgstr "Selbstdefinierte Dateitypen::"
+
+#: src/config.c:603
+msgid "format: [.foo;.bar]"
+msgstr "Format: [.foo;.bar]"
+
+#: src/config.c:612
+msgid "External Editors"
+msgstr "Externe Editoren:"
+
+#: src/config.c:624
+msgid "#"
+msgstr "Nr. "
+
+#: src/config.c:627
+msgid "Menu name"
+msgstr "Menüname"
+
+#: src/config.c:630
+msgid "Command Line"
+msgstr "Kommandozeile"
+
+#: src/config.c:660 src/menu.c:484
+msgid "About"
+msgstr "Info"
+
+#: src/config.c:676
+#, c-format
+msgid ""
+"GQview %s\n"
+"\n"
+"Copyright (c) 1999 by John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Released under the GNU Public License"
+msgstr ""
+"QGview %s\n"
+"\n"
+"Copyright (C) 1999 by John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Freigegeben unter der GNU General Public License"
+
+#: src/filelist.c:51
+msgid " Slideshow"
+msgstr " Diavorführung"
+
+#: src/filelist.c:55
+#, c-format
+msgid "%d files (%d)%s"
+msgstr "%d Dateien (%d)%s"
+
+#: src/filelist.c:57
+#, c-format
+msgid "%d files%s"
+msgstr "%d Dateien%s"
+
+#: src/filelist.c:960
+msgid "Loading thumbs..."
+msgstr "Lade Indexbilder..."
+
+#: src/image.c:65
+#, c-format
+msgid "( ? x ? ) %d bytes"
+msgstr "( ? x ? ) %d Bytes"
+
+#: src/image.c:67
+#, c-format
+msgid "( %d x %d ) %d bytes"
+msgstr "( %d x %d ) %d Bytes"
+
+#: src/img-main.c:230
+msgid "GQview full screen"
+msgstr "GQview Vollbild"
+
+#: src/img-view.c:280 src/menu.c:455 src/menu.c:528 src/menu.c:568
+#: src/menu.c:657
+msgid "Zoom in"
+msgstr "Einzoomen"
+
+#: src/img-view.c:281 src/menu.c:456 src/menu.c:529 src/menu.c:569
+#: src/menu.c:659
+msgid "Zoom out"
+msgstr "Wegzoomen"
+
+#: src/img-view.c:282 src/menu.c:457 src/menu.c:530 src/menu.c:570
+msgid "Zoom 1:1"
+msgstr "Zoom 1:1"
+
+#. edit menu
+#: src/img-view.c:286 src/menu.c:442 src/menu.c:503 src/menu.c:534
+#: src/menu.c:574
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: src/img-view.c:291 src/menu.c:431 src/menu.c:510 src/menu.c:541
+#: src/menu.c:579
+msgid "Copy..."
+msgstr "Kopieren..."
+
+#: src/img-view.c:292 src/menu.c:432 src/menu.c:511 src/menu.c:542
+#: src/menu.c:580
+msgid "Move..."
+msgstr "Verschieben..."
+
+#: src/img-view.c:293 src/menu.c:433 src/menu.c:512 src/menu.c:543
+#: src/menu.c:581
+msgid "Rename..."
+msgstr "Umbenennen.."
+
+#: src/img-view.c:294 src/menu.c:434 src/menu.c:513 src/menu.c:544
+#: src/menu.c:582
+msgid "Delete..."
+msgstr "Löschen..."
+
+#: src/img-view.c:297
+msgid "Close window"
+msgstr "Fenster schließen"
+
+#: src/main.c:90 src/main.c:119
+#, c-format
+msgid "GQview running: %s\n"
+msgstr "GQview läuft: %s\n"
+
+#: src/main.c:316
+msgid ""
+"Usage: gqview [options] [path]\n"
+"\n"
+msgstr ""
+"Verwendung: gqview [optionen] [pfad]\n"
+"\n"
+
+#: src/main.c:317
+msgid "valid options are:\n"
+msgstr "Gültige Optionen sind:\n"
+
+#: src/main.c:318
+msgid "  +t, +tools                 force show of tools\n"
+msgstr "  +t, +tools                 Anzeige der Werkzeuge erzwingen\n"
+
+#: src/main.c:319
+msgid "  -t, -tools                 force hide of tools\n"
+msgstr "  -t, -tools                 Verbergen der Werkzeuge erzwingen\n"
+
+#: src/main.c:320
+msgid "  -debug                     turn on debug output\n"
+msgstr "  -debug                     Diagnoseausgabe einschalten\n"
+
+#: src/main.c:321
+msgid ""
+"  -help                      this message\n"
+"\n"
+msgstr ""
+"  -help                Diese Meldung\n"
+"\n"
+
+#: src/main.c:326
+#, c-format
+msgid ""
+"invalid or ignored: %s\n"
+"Use -help for options\n"
+msgstr ""
+"Ungültig oder ignoriert: %s\n"
+"Benutzen Sie -help für Optionen\n"
+
+#: src/main.c:353
+msgid "The Gimp"
+msgstr "The Gimp"
+
+#: src/main.c:356
+msgid "Electric Eyes"
+msgstr "Electric Eyes"
+
+#: src/main.c:359
+msgid "XV"
+msgstr "XV"
+
+#: src/main.c:362
+msgid "Xpaint"
+msgstr "Xpaint"
+
+#: src/menu.c:364
+#, c-format
+msgid "in %s..."
+msgstr "in %s..."
+
+#: src/menu.c:366
+msgid "in (unknown)..."
+msgstr "in (unbekannt)..."
+
+#: src/menu.c:385
+msgid "Options..."
+msgstr "Optionen..."
+
+#: src/menu.c:387
+msgid "Remove old thumbnails"
+msgstr "Alte Indexbilder entfernen"
+
+#. file menu
+#: src/menu.c:425
+msgid "File"
+msgstr "Datei"
+
+#: src/menu.c:429
+msgid "Create Dir..."
+msgstr "Verzeichnis anlegen..."
+
+#: src/menu.c:436
+msgid "Exit"
+msgstr "Beenden"
+
+#. view menu
+#: src/menu.c:451
+msgid "View"
+msgstr "Ansicht"
+
+#: src/menu.c:461 src/menu.c:547
+msgid "Full screen"
+msgstr "Vollbild"
+
+#: src/menu.c:469
+msgid "Refresh Lists"
+msgstr "Listen auffrischen"
+
+#: src/menu.c:470
+msgid "(Un)Float file list"
+msgstr "Dateiliste schweben lassen / einfangen"
+
+#: src/menu.c:471 src/menu.c:546
+msgid "(Un)Hide file list"
+msgstr "Dateiliste verbergen / hervorholen"
+
+#: src/menu.c:474
+msgid "Toggle slideshow"
+msgstr "Diavorführung an/aus"
+
+#. help menu
+#: src/menu.c:480
+msgid "Help"
+msgstr "Hilfe"
+
+#: src/menu.c:507 src/menu.c:538
+msgid "View in new window"
+msgstr "In neuem Fenster anzeigen"
+
+#: src/menu.c:515
+msgid "Refresh"
+msgstr "Auffrischen"
+
+#: src/menu.c:585
+msgid "Exit full screen"
+msgstr "Vollbild verlassen"
+
+#: src/menu.c:644
+msgid "Create thumbnails"
+msgstr "Indexbilder erzeugen"
+
+#: src/menu.c:653
+msgid "Change to home directory"
+msgstr "Ins Heimverzeichnis wechseln"
+
+#: src/menu.c:655
+msgid "Refresh file list"
+msgstr "Dateiliste auffrischen"
+
+#: src/menu.c:663
+msgid "Set zoom 1:1"
+msgstr "Zoom auf 1:1 setzen"
+
+#: src/menu.c:665
+msgid "Configure options"
+msgstr "Optionen konfigurieren"
+
+#: src/menu.c:667
+msgid "Float Controls"
+msgstr "Kontrollen schweben lassen"
+
+#: src/rcfile.c:132
+#, c-format
+msgid "error saving config file: %s\n"
+msgstr "Fehler beim Speichern von Konfigurationsdatei: %s\n"
+
+#: src/thumb.c:127 src/thumb.c:151
+#, c-format
+msgid "create dir failed: %s\n"
+msgstr "Anlegen von Verzeichnis fehlgeschlagen: %s\n"
+
+#: src/thumb.c:233
+#, c-format
+msgid "Unable to delete dir: %s\n"
+msgstr "Kann Verzeichnis nicht löschen: %s\n"
+
+#: src/thumb.c:249
+#, c-format
+msgid "failed to delete:%s\n"
+msgstr "Kann nicht löschen: %s\n"
+
+#: src/utildlg.c:67
+msgid "     Ok     "
+msgstr "     OK     "
+
+#: src/utilops.c:162
+#, fuzzy, c-format
+msgid ""
+"Overwrite file:\n"
+" %s\n"
+" with:\b %s"
+msgstr "Datei überschreiben:\n"
+
+#: src/utilops.c:163 src/utilops.c:262 src/utilops.c:621 src/utilops.c:803
+msgid "Overwrite file"
+msgstr "Datei überschreiben"
+
+#: src/utilops.c:164
+msgid "Skip"
+msgstr "Überspringen"
+
+#: src/utilops.c:165
+msgid "Yes to all"
+msgstr "Ja zu allen"
+
+#: src/utilops.c:166
+msgid "Yes"
+msgstr "Ja"
+
+#: src/utilops.c:200 src/utilops.c:288
+#, fuzzy
+msgid "Error copying file"
+msgstr "Fehler beim Umbenennen von Datei"
+
+#: src/utilops.c:201
+#, c-format
+msgid ""
+"Unable to copy file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file copy."
+msgstr ""
+
+#: src/utilops.c:205 src/utilops.c:293
+#, fuzzy
+msgid "Error moving file"
+msgstr "Fehler beim Umbenennen von Datei"
+
+#: src/utilops.c:206
+#, fuzzy, c-format
+msgid ""
+"Unable to move file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file move."
+msgstr ""
+"\n"
+" während Verschieben mehrerer Dateien."
+
+#: src/utilops.c:209 src/utilops.c:486
+msgid "Continue"
+msgstr "Fortsetzen"
+
+#: src/utilops.c:261
+#, fuzzy, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+" with:\n"
+"%s"
+msgstr "Datei überschreiben:\n"
+
+#: src/utilops.c:263 src/utilops.c:622 src/utilops.c:804
+msgid "Overwrite"
+msgstr "Überschreiben"
+
+#: src/utilops.c:289
+#, fuzzy, c-format
+msgid ""
+"Unable to copy file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr "Kann Datei nicht löschen:\n"
+
+#: src/utilops.c:294
+#, fuzzy, c-format
+msgid ""
+"Unable to move file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr "Kann Datei nicht umbenennen:\n"
+
+#: src/utilops.c:337
+msgid "Invalid destination"
+msgstr "Ungültiges Ziel"
+
+#: src/utilops.c:337
+msgid ""
+"When operating with multiple files, please select\n"
+" a directory, not file."
+msgstr ""
+"Beim Umgang mit mehreren Dateien, bitte ein\n"
+" Verzeichnis, keine Datei wählen."
+
+#: src/utilops.c:339
+msgid "Invalid directory"
+msgstr "Ungültiges Verzeichnis"
+
+#: src/utilops.c:339
+msgid "Please select an existing directory"
+msgstr "Bitte wählen Sie ein existierendes Verzeichnis"
+
+#: src/utilops.c:397
+msgid "GQview - copy"
+msgstr "GQview - Kopieren"
+
+#: src/utilops.c:398
+msgid "Copy"
+msgstr "Kopieren"
+
+#: src/utilops.c:400
+#, c-format
+msgid ""
+"Copy file:\n"
+"%s\n"
+"to:"
+msgstr ""
+
+#: src/utilops.c:402
+#, fuzzy, c-format
+msgid ""
+"Copy multiple files from:\n"
+"%s\n"
+"to:"
+msgstr " mehrere Dateien von:\n"
+
+#: src/utilops.c:406
+msgid "GQview - move"
+msgstr "GQview - Verschieben"
+
+#: src/utilops.c:407
+msgid "Move"
+msgstr "Verschieben"
+
+#: src/utilops.c:409
+#, c-format
+msgid ""
+"Move file:\n"
+"%s\n"
+"to:"
+msgstr ""
+
+#: src/utilops.c:411
+#, fuzzy, c-format
+msgid ""
+"Move multiple files from:\n"
+"%s\n"
+"to:"
+msgstr " mehrere Dateien von:\n"
+
+#: src/utilops.c:484
+#, fuzzy, c-format
+msgid ""
+"Unable to delete file:\n"
+" %s\n"
+" Continue multiple delete operation?"
+msgstr ""
+"\n"
+"Mehrfaches Löschen fortsetzen?"
+
+#: src/utilops.c:485 src/utilops.c:491
+msgid "Delete failed"
+msgstr "Löschen fehlgeschlagen"
+
+#: src/utilops.c:490 src/utilops.c:535
+#, fuzzy, c-format
+msgid ""
+"Unable to delete file:\n"
+"%s"
+msgstr "Kann Datei nicht löschen:\n"
+
+#: src/utilops.c:520
+msgid "Delete files"
+msgstr "Dateien löschen"
+
+#: src/utilops.c:520
+msgid "About to delete multiple files..."
+msgstr "Werde mehrere Dateien löschen..."
+
+#: src/utilops.c:521 src/utilops.c:566
+msgid "Delete"
+msgstr "Löschen"
+
+#: src/utilops.c:536
+msgid "File deletion failed"
+msgstr "Dateilöschen fehlgeschlagen"
+
+#: src/utilops.c:564
+#, fuzzy, c-format
+msgid ""
+"About to delete the file:\n"
+" %s"
+msgstr "Werde Datei löschen:\n"
+
+#: src/utilops.c:565
+msgid "Delete file"
+msgstr "Datei löschen"
+
+#: src/utilops.c:620
+#, fuzzy, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"by renaming:\n"
+"%s"
+msgstr "Datei überschreiben:\n"
+
+#: src/utilops.c:631
+#, fuzzy, c-format
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+" to:\n"
+"%s"
+msgstr "Kann Datei nicht umbenennen:\n"
+
+#: src/utilops.c:632 src/utilops.c:813
+msgid "Error renaming file"
+msgstr "Fehler beim Umbenennen von Datei"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "GQview - rename"
+msgstr "GQview - Umbenennen"
+
+#: src/utilops.c:722
+msgid "Rename multiple files:"
+msgstr "Mehrere Dateien umbenennen:"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: src/utilops.c:758
+msgid "Rename:"
+msgstr "Umbenennen:"
+
+#: src/utilops.c:767
+msgid "to:"
+msgstr "in:"
+
+#: src/utilops.c:802
+#, fuzzy, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"with:\n"
+"%s"
+msgstr "Datei überschreiben:\n"
+
+#: src/utilops.c:812
+#, fuzzy, c-format
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr "Kann Datei nicht umbenennen:\n"
+
+#: src/utilops.c:850
+#, fuzzy, c-format
+msgid ""
+"Rename file:\n"
+"%s\n"
+"to:"
+msgstr "Datei umbenennen:\n"
+
+#: src/utilops.c:894
+#, fuzzy, c-format
+msgid ""
+"The path:\n"
+"%s\n"
+"already exists as a file."
+msgstr ""
+"\n"
+" existiert bereits als Datei."
+
+#: src/utilops.c:895
+msgid "Could not create directory"
+msgstr "Konnte Verzeichnis nicht anlegen"
+
+#: src/utilops.c:900
+#, fuzzy, c-format
+msgid ""
+"The directory:\n"
+"%s\n"
+"already exists."
+msgstr ""
+"\n"
+" existiert bereits"
+
+#: src/utilops.c:901
+msgid "Directory exists"
+msgstr "Verzeichnis existiert"
+
+#: src/utilops.c:908
+#, fuzzy, c-format
+msgid ""
+"Unable to create directory:\n"
+"%s"
+msgstr "Kann Verzeichnis nicht anlegen:\n"
+
+#: src/utilops.c:909
+msgid "Error creating directory"
+msgstr "Fehler beim Anlegen von Verzeichnis"
+
+#: src/utilops.c:948
+#, fuzzy, c-format
+msgid ""
+"Create directory in:\n"
+"%s\n"
+"named:"
+msgstr "Verzeichnis anlegen in:\n"
+
+#: src/utilops.c:949
+msgid "GQview - new directory"
+msgstr "GQview - Neues Verzeichnis"
+
+#: src/utilops.c:949
+msgid "Create"
+msgstr "Erzeugen"
+
+#: src/window.c:151
+msgid "GQview Tools"
+msgstr "GQview-Werkzeuge"
+
+#~ msgid "Save"
+#~ msgstr "Speichern"
+
+#~ msgid "Save settings on exit"
+#~ msgstr "Einstellungen beim Beenden speichern"
+
+#~ msgid "Save options"
+#~ msgstr "Optionen speichern..."
+
+#~ msgid "copy"
+#~ msgstr "Kopieren"
+
+#~ msgid "move"
+#~ msgstr "Verschieben"
+
+#~ msgid ""
+#~ "\n"
+#~ " with:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " mit:\n"
+
+#~ msgid "Error "
+#~ msgstr "Fehler "
+
+#~ msgid "ing file"
+#~ msgstr "von Datei"
+
+#~ msgid "Unable to "
+#~ msgstr "Kann nicht "
+
+#~ msgid " file:\n"
+#~ msgstr " Datei:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " to:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " nach:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "to:"
+#~ msgstr ""
+#~ "\n"
+#~ "nach:"
+
+#~ msgid ""
+#~ "\n"
+#~ " by renaming:\n"
+#~ msgstr ""
+#~ "\n"
+#~ " beim Umbenennen:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " to:"
+#~ msgstr ""
+#~ "\n"
+#~ " in:"
+
+#~ msgid "The path:\n"
+#~ msgstr "Der Pfad:\n"
+
+#~ msgid "The directory:\n"
+#~ msgstr "Das Verzeichnis:\n"
+
+#~ msgid ""
+#~ "\n"
+#~ " named:"
+#~ msgstr ""
+#~ "\n"
+#~ " genannt:"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..177b879
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,855 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 1999-09-27 03:05+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: config.c:295
+msgid "GQview configuration"
+msgstr "GQview¤ÎÀßÄê"
+
+#: config.c:307
+msgid "Ok"
+msgstr "Ok"
+
+#: config.c:312
+msgid "Save"
+msgstr "¥»¡¼¥Ö"
+
+#: config.c:317 utildlg.c:140 utilops.c:401 utilops.c:697 utilops.c:923
+msgid "Cancel"
+msgstr "¥­¥ã¥ó¥»¥ë"
+
+#: config.c:331
+msgid "General"
+msgstr "°ìÈÌ"
+
+#: config.c:339
+msgid "Initial directory"
+msgstr "½é´ü¥Ç¥£¥ì¥¯¥È¥ê:"
+
+#: config.c:349
+msgid "On startup, change to this directory:"
+msgstr "µ¯Æ°»þ¤Ë¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ø°ÜÆ°¤¹¤ë"
+
+#: config.c:361
+msgid "Use current"
+msgstr "¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: config.c:367
+msgid "Confirm file delete"
+msgstr "ºï½ü»þ¤Ë³Îǧ"
+
+#: config.c:369
+msgid "Save settings on exit"
+msgstr "½ªÎ»»þ¤ËÀßÄê¤òÊݸ¤¹¤ë"
+
+#: config.c:371
+msgid "Remember tool state (float/hidden)"
+msgstr "¥Ä¡¼¥ë¥Ð¡¼¤Î¾õÂÖ¤òÊÝ»ý(float¤äÈóɽ¼¨)"
+
+#: config.c:373
+msgid "Remember window positions"
+msgstr "¥¦¥£¥ó¥É¥¦°ÌÃÖ¤òÊÝ»ý"
+
+#: config.c:375
+msgid "Slide show"
+msgstr "¥¹¥é¥¤¥É¥·¥ç¥¦:"
+
+#: config.c:388
+msgid "Delay before image change (seconds):"
+msgstr "¼¡¤Î¥¤¥á¡¼¥¸¤Þ¤Ç¤ÎÉÿô"
+
+#: config.c:401
+msgid "Random"
+msgstr "¥é¥ó¥À¥à"
+
+#: config.c:403
+msgid "Repeat"
+msgstr "·«¤êÊÖ¤¹"
+
+#: config.c:410
+msgid "Image"
+msgstr "¥¤¥á¡¼¥¸"
+
+#: config.c:418
+msgid "When new image is selected:"
+msgstr "¤¢¤¿¤é¤·¤¤¥¤¥á¡¼¥¸¤¬ÁªÂò¤µ¤ì¤¿¤È¤­:"
+
+#: config.c:428
+msgid "Zoom to original size"
+msgstr "¥ª¥ê¥¸¥Ê¥ë¤Î¥µ¥¤¥º¤Ø³ÈÂç"
+
+#: config.c:434 img-view.c:283 menu.c:464 menu.c:537 menu.c:578 menu.c:668
+msgid "Fit image to window"
+msgstr "¥¦¥£¥ó¥É¥¦¤Ë¥Õ¥£¥Ã¥È¤µ¤»¤ë"
+
+#: config.c:440
+msgid "Leave Zoom at previous setting"
+msgstr "ľÁ°¤Î¥º¡¼¥à¤ÎÀßÄê¤ò˺¤ì¤ë"
+
+#: config.c:447
+msgid "Fit window to image when tools are hidden/floating"
+msgstr "¥Ä¡¼¥ë¥Ð¡¼¤Î¾õÂÖÊѹ¹»þ¤Ë¥¤¥á¡¼¥¸¤ò¥¦¥£¥ó¥É¥¦¤Ë¥Õ¥£¥Ã¥È¤µ¤»¤ë"
+
+#: config.c:454
+msgid "Limit size when auto-sizing window"
+msgstr "¥¦¥£¥ó¥É¥¦¤Î¼«Æ°Ä´Àá¤Î¸Â³¦"
+
+#: config.c:464 menu.c:468
+msgid "Thumbnails"
+msgstr "¥µ¥à¥Í¥¤¥ë:"
+
+#: config.c:480
+msgid "Size:"
+msgstr "¥µ¥¤¥º"
+
+#: config.c:484
+msgid "48x48"
+msgstr ""
+
+#: config.c:490
+msgid "64x64"
+msgstr ""
+
+#: config.c:496
+msgid "85x64"
+msgstr ""
+
+#: config.c:502
+msgid "100x100"
+msgstr ""
+
+#: config.c:509
+msgid "Cache thumbnails"
+msgstr "¥µ¥à¥Í¥¤¥ë¤ò¥­¥ã¥Ã¥·¥å¤¹¤ë"
+
+#: config.c:511
+msgid "Use xvpics thumbnails when found (read only)"
+msgstr "xvpics¤¬¤¢¤ë»þ¤Ë»ÈÍѤ¹¤ë(Æɤ߹þ¤ß¤Î¤ß)"
+
+#: config.c:514
+msgid "Progressive keyboard scrolling"
+msgstr "¥­¡¼¥Ü¡¼¥É¤Ë¤è¤ë¥¹¥¯¥í¡¼¥ë"
+
+#: config.c:521
+msgid "Filtering"
+msgstr "¥Õ¥£¥ë¥¿¥ê¥ó¥°"
+
+#: config.c:530
+msgid "Show entries that begin with a dot"
+msgstr "¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤âɽ¼¨¤¹¤ë"
+
+#: config.c:532
+msgid "Disable File Filtering"
+msgstr "¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤Ê¤¤"
+
+#: config.c:534
+msgid "Include files of type:"
+msgstr "ɽ¼¨¤¹¤ë³ÈÄ¥»Ò:"
+
+#: config.c:552
+msgid "JPG / JPEG"
+msgstr ""
+
+#: config.c:554
+msgid "XPM"
+msgstr ""
+
+#: config.c:556
+msgid "TIF / TIFF"
+msgstr ""
+
+#: config.c:563
+msgid "GIF"
+msgstr ""
+
+#: config.c:565
+msgid "PNG"
+msgstr ""
+
+#: config.c:567
+msgid "PPM"
+msgstr ""
+
+#: config.c:574
+msgid "PGM"
+msgstr ""
+
+#: config.c:576
+msgid "PCX"
+msgstr ""
+
+#: config.c:578
+msgid "BMP"
+msgstr ""
+
+#: config.c:584
+msgid "Custom file types:"
+msgstr "¥«¥¹¥¿¥à¥¿¥¤¥×"
+
+#: config.c:597
+msgid "format: [.foo;.bar]"
+msgstr "½ñ¼°: [.foo;.bar]"
+
+#: config.c:606
+msgid "External Editors"
+msgstr "³°Éô¥¨¥Ç¥£¥¿"
+
+#: config.c:618
+msgid "#"
+msgstr ""
+
+#: config.c:621
+msgid "Menu name"
+msgstr "ɽ¼¨Ì¾"
+
+#: config.c:624
+msgid "Command Line"
+msgstr "¥³¥Þ¥ó¥É"
+
+#: config.c:654 menu.c:490
+msgid "About"
+msgstr ""
+
+#: config.c:670
+#, c-format
+msgid ""
+"GQview %d.%d.%d\n"
+"\n"
+"Copyright (c) 1999 by John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Released under the GNU Public License"
+msgstr ""
+
+#: dnd.c:130
+#, c-format
+msgid "dropped: %s\n"
+msgstr ""
+
+#: filelist.c:51
+msgid " Slideshow"
+msgstr "¥¹¥é¥¤¥É¥·¥ç¥¦"
+
+#: filelist.c:55
+#, c-format
+msgid "%d files (%d)%s"
+msgstr ""
+
+#: filelist.c:57
+#, c-format
+msgid "%d files%s"
+msgstr ""
+
+#: filelist.c:221
+#, c-format
+msgid "s = %d\n"
+msgstr ""
+
+#: filelist.c:225
+#, c-format
+msgid "files selected = %d\n"
+msgstr ""
+
+#: filelist.c:466
+#, c-format
+msgid "row = %d, closest is %d\n"
+msgstr ""
+
+#: filelist.c:959
+msgid "Loading thumbs..."
+msgstr ""
+
+#: image.c:50
+#, c-format
+msgid "%d :%s%d"
+msgstr ""
+
+#: image.c:65
+#, c-format
+msgid "( ? x ? ) %d bytes"
+msgstr ""
+
+#: image.c:67
+#, c-format
+msgid "( %d x %d ) %d bytes"
+msgstr ""
+
+#: image.c:127
+#, c-format
+msgid "auto sized to %d x %d\n"
+msgstr ""
+
+#: image.c:282
+#, c-format
+msgid "recalc %d x %d @ %f\n"
+msgstr ""
+
+#: image.c:411
+#, c-format
+msgid "redrawn %d x %d\n"
+msgstr ""
+
+#: image.c:417
+msgid "redraw cancelled\n"
+msgstr ""
+
+#: image.c:494
+#, c-format
+msgid "sized %d x %d (%d x %d)\n"
+msgstr ""
+
+#: image.c:700
+msgid "GQview - "
+msgstr ""
+
+#: img-main.c:230
+msgid "GQview full screen"
+msgstr "GQview ¥Õ¥ë¥¹¥¯¥ê¡¼¥ó"
+
+#: img-view.c:153 window.c:82 window.c:418
+msgid "GQview"
+msgstr ""
+
+#: img-view.c:280 menu.c:461 menu.c:534 menu.c:574 menu.c:664
+msgid "Zoom in"
+msgstr "³ÈÂç"
+
+#: img-view.c:281 menu.c:462 menu.c:535 menu.c:576 menu.c:666
+msgid "Zoom out"
+msgstr "½Ì¾®"
+
+#: img-view.c:282 menu.c:463 menu.c:536 menu.c:577
+msgid "Zoom 1:1"
+msgstr "¸µ¤Î¥µ¥¤¥º"
+
+#: img-view.c:286 menu.c:448 menu.c:509 menu.c:540 menu.c:581
+msgid "Edit"
+msgstr "ÊÔ½¸"
+
+#: img-view.c:291 menu.c:437 menu.c:516 menu.c:547 menu.c:586
+msgid "Copy..."
+msgstr "¥³¥Ô¡¼..."
+
+#: img-view.c:292 menu.c:438 menu.c:517 menu.c:548 menu.c:587
+msgid "Move..."
+msgstr "°ÜÆ°..."
+
+#: img-view.c:293 menu.c:439 menu.c:518 menu.c:549 menu.c:588
+msgid "Rename..."
+msgstr "̾Á°¤ÎÊѹ¹..."
+
+#: img-view.c:294 menu.c:440 menu.c:519 menu.c:550 menu.c:589
+msgid "Delete..."
+msgstr "ºï½ü..."
+
+#: img-view.c:297
+msgid "Close window"
+msgstr "¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë"
+
+#: main.c:89
+#, c-format
+msgid "%s \"%s\" &"
+msgstr ""
+
+#: main.c:90 main.c:119
+#, c-format
+msgid "GQview running: %s\n"
+msgstr ""
+
+#: main.c:300
+msgid "debugging output enabled\n"
+msgstr ""
+
+#: main.c:315
+#, c-format
+msgid "GQview version %d.%d.%d\n"
+msgstr ""
+
+#: main.c:316
+msgid ""
+"Usage: gqview [options] [path]\n"
+"\n"
+msgstr ""
+"»È¤¤Êý: gqview [¥ª¥×¥·¥ç¥ó] [¥Ñ¥¹]\n"
+"\n"
+
+#: main.c:317
+msgid "valid options are:\n"
+msgstr "¥ª¥×¥·¥ç¥ó:\n"
+
+#: main.c:318
+msgid "  +t, +tools                 force show of tools\n"
+msgstr "  +t, +tools                 ¥Ä¡¼¥ë¥Ð¡¼¤òɽ¼¨\n"
+
+#: main.c:319
+msgid "  -t, -tools                 force hide of tools\n"
+msgstr "  -t, -tools                 ¥Ä¡¼¥ë¥Ð¡¼¤òÈóɽ¼¨\n"
+
+#: main.c:320
+msgid "  -debug                     turn on debug output\n"
+msgstr "  -debug                     ¥Ç¥Ð¥Ã¥°ÍѤνÐÎϤòÍ­¸ú¤Ë¤¹¤ë\n"
+
+#: main.c:321
+msgid ""
+"  -help                      this message\n"
+"\n"
+msgstr ""
+"  -help                      ¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨\n"
+"\n"
+
+#: main.c:326
+#, c-format
+msgid ""
+"invalid or ignored: %s\n"
+"Use -help for options\n"
+msgstr ""
+"%s¤ÏÉÔÌÀ¤Ç¤¹¡£\n"
+"¾Ü¤·¤¯¤Ï `gqview -help` ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: main.c:353
+msgid "The Gimp"
+msgstr ""
+
+#: main.c:356
+msgid "Electric Eyes"
+msgstr ""
+
+#: main.c:359
+msgid "XV"
+msgstr ""
+
+#: main.c:362
+msgid "Xpaint"
+msgstr ""
+
+#: menu.c:369
+#, c-format
+msgid "in %s..."
+msgstr ""
+
+#: menu.c:371
+msgid "in (unknown)..."
+msgstr ""
+
+#: menu.c:390
+msgid "Options..."
+msgstr "¥ª¥×¥·¥ç¥ó..."
+
+#: menu.c:391
+msgid "Save options"
+msgstr "ÀßÄê¤òÊݸ"
+
+#: menu.c:393
+msgid "Remove old thumbnails"
+msgstr "¸Å¤¤¥µ¥à¥Í¥¤¥ë¤òÇË´þ"
+
+#: menu.c:431
+msgid "File"
+msgstr "¥Õ¥¡¥¤¥ë"
+
+#: menu.c:435
+msgid "Create Dir..."
+msgstr "¥Ç¥£¥ì¥¯¥È¥êºîÀ®..."
+
+#: menu.c:442
+msgid "Exit"
+msgstr "½ªÎ»"
+
+#: menu.c:457
+msgid "View"
+msgstr "¥Ó¥å¡¼"
+
+#: menu.c:467 menu.c:553
+msgid "Full screen"
+msgstr "¥Õ¥ë¥¹¥¯¥ê¡¼¥ó"
+
+#: menu.c:469
+msgid "activate"
+msgstr ""
+
+#: menu.c:475
+msgid "Refresh Lists"
+msgstr "¥ê¥¹¥È¤Î¹¹¿·"
+
+#: menu.c:476
+msgid "(Un)Float file list"
+msgstr "¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤ò(Èó)¥Õ¥í¡¼¥È¤Ë¤¹¤ë"
+
+#: menu.c:477 menu.c:552
+msgid "(Un)Hide file list"
+msgstr "¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤ò(Èó)ɽ¼¨¤Ë¤¹¤ë"
+
+#: menu.c:480
+msgid "Toggle slideshow"
+msgstr "¥¹¥é¥¤¥É¥·¥ç¥¦"
+
+#: menu.c:486
+msgid "Help"
+msgstr "¥Ø¥ë¥×"
+
+#: menu.c:513 menu.c:544
+msgid "View in new window"
+msgstr "¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç¤ß¤ë"
+
+#: menu.c:521
+msgid "Refresh"
+msgstr "¹¹¿·"
+
+#: menu.c:592
+msgid "Exit full screen"
+msgstr "¥Õ¥ë¥¹¥¯¥ê¡¼¥ó¤ò¤ä¤á¤ë"
+
+#: menu.c:651
+msgid "Create thumbnails"
+msgstr "¥µ¥à¥Í¥¤¥ëºîÀ®"
+
+#: menu.c:660
+msgid "Change to home directory"
+msgstr "¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤Ø°ÜÆ°"
+
+#: menu.c:662
+msgid "Refresh file list"
+msgstr "¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤Î¹¹¿·"
+
+#: menu.c:670
+msgid "Set zoom 1:1"
+msgstr "¸µ¤Î¥µ¥¤¥º¤Ë¤¹¤ë"
+
+#: menu.c:672
+msgid "Configure options"
+msgstr "¥ª¥×¥·¥ç¥óÀßÄê"
+
+#: menu.c:674
+msgid "Float Controls"
+msgstr "¥³¥ó¥È¥í¡¼¥ë¤ò¥Õ¥í¡¼¥È¾õÂ֤ˤ¹¤ë"
+
+#: tabcomp.c:388
+msgid "Tab completion error: entry != NULL\n"
+msgstr ""
+
+#: thumb.c:32
+#, c-format
+msgid "Gen thumbnail:%s\n"
+msgstr "¥µ¥à¥Í¥¤¥ëºîÀ®:%s\n"
+
+#: thumb.c:40
+msgid "XV thumbnail found, loaded\n"
+msgstr "XV¤Î¥µ¥à¥Í¥¤¥ë¤ò¸«¤Ä¤±¤¿¤Î¤Ç¡¢Æɤ߹þ¤ß¤Þ¤·¤¿\n"
+
+#: thumb.c:54
+#, c-format
+msgid "Found in cache:%s\n"
+msgstr "¥­¥ã¥Ã¥·¥å¤ò¸«¤Ä¤±¤Þ¤·¤¿:%s\n"
+
+#: thumb.c:116
+#, c-format
+msgid "creating thumbnail dir:%s\n"
+msgstr "%s¥Ç¥£¥ì¥¯¥È¥ê¤Î¥µ¥à¥Í¥¤¥ë¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: thumb.c:118 thumb.c:142
+#, c-format
+msgid "create dir failed: %s\n"
+msgstr "%s¥Ç¥£¥ì¥¯¥È¥ê¤Ç¼ºÇÔ¤·¤Þ¤·¤¿¡£\n"
+
+#: thumb.c:140
+#, c-format
+msgid "creating sub dir:%s\n"
+msgstr "¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê%s¤Î¥µ¥à¥Í¥¤¥ë¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: thumb.c:151
+#, c-format
+msgid "Saving thumb: %s\n"
+msgstr "¥µ¥à¥Í¥¤¥ë%s¤òÊݸ¤·¤Þ¤·¤¿¡£\n"
+
+#: thumb.c:186
+#, c-format
+msgid "maintainance check: %s\n"
+msgstr "%s¤ò¥á¥ó¥Æ¥Ê¥ó¥¹¤Î¤¿¤á¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: thumb.c:222
+#, c-format
+msgid "Deleting thumb dir: %s\n"
+msgstr "%s¥Ç¥£¥ì¥¯¥È¥ê¤Î¥µ¥à¥Í¥¤¥ë¤òºï½ü¤·¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: thumb.c:224
+#, c-format
+msgid "Unable to delete dir: %s\n"
+msgstr "%s¥Ç¥£¥ì¥¯¥È¥ê¤Çºï½ü¤Ë¼ºÇÔ¡£\n"
+
+#: thumb.c:238
+#, c-format
+msgid "Deleting thumb: %s\n"
+msgstr "¥µ¥à¥Í¥¤¥ë%s¤òºï½ü¤·¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: thumb.c:240
+#, c-format
+msgid "failed to delete:%s\n"
+msgstr "%s¤Îºï½ü¤Ë¼ºÇÔ\n"
+
+#: utildlg.c:67
+msgid "     Ok     "
+msgstr ""
+
+#: utilops.c:112 utilops.c:231
+msgid "copy"
+msgstr "¥³¥Ô¡¼"
+
+#: utilops.c:114 utilops.c:233
+msgid "move"
+msgstr "°ÜÆ°"
+
+#: utilops.c:168 utilops.c:262 utilops.c:595 utilops.c:776
+msgid "Overwrite file:\n"
+msgstr "¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­:\n"
+
+#: utilops.c:168 utilops.c:262 utilops.c:776
+msgid ""
+"\n"
+" with:\n"
+msgstr ""
+"\n"
+"¤ò...\n"
+
+#: utilops.c:169 utilops.c:263 utilops.c:596 utilops.c:777
+msgid "Overwrite file"
+msgstr "¥Õ¥¡¥¤¥ë¤Î¾å½ñ¤­"
+
+#: utilops.c:170
+msgid "Skip"
+msgstr "¥¹¥­¥Ã¥×"
+
+#: utilops.c:171
+msgid "Yes to all"
+msgstr "¤¹¤Ù¤Æ¤Ï¤¤"
+
+#: utilops.c:172
+msgid "Yes"
+msgstr "¤Ï¤¤"
+
+#: utilops.c:202 utilops.c:285
+msgid "Error "
+msgstr "¥¨¥é¡¼"
+
+#: utilops.c:202
+msgid "ing file"
+msgstr ""
+
+#: utilops.c:203 utilops.c:286
+msgid "Unable to "
+msgstr ""
+
+#: utilops.c:203 utilops.c:286 utilops.c:397
+msgid " file:\n"
+msgstr ""
+
+#: utilops.c:203 utilops.c:286 utilops.c:606 utilops.c:786
+msgid ""
+"\n"
+" to:\n"
+msgstr ""
+
+#: utilops.c:203
+msgid ""
+"\n"
+" during multiple file move."
+msgstr ""
+
+#: utilops.c:205 utilops.c:461
+msgid "Continue"
+msgstr ""
+
+#: utilops.c:264 utilops.c:597 utilops.c:778
+msgid "Overwrite"
+msgstr ""
+
+#: utilops.c:328
+msgid "Invalid destination"
+msgstr ""
+
+#: utilops.c:328
+msgid ""
+"When operating with multiple files, please select\n"
+" a directory, not file."
+msgstr ""
+
+#: utilops.c:330
+msgid "Invalid directory"
+msgstr ""
+
+#: utilops.c:330
+msgid "Please select an existing directory"
+msgstr ""
+
+#: utilops.c:387
+msgid "GQview - copy"
+msgstr ""
+
+#: utilops.c:388
+msgid "Copy"
+msgstr ""
+
+#: utilops.c:392
+msgid "GQview - move"
+msgstr ""
+
+#: utilops.c:393
+msgid "Move"
+msgstr ""
+
+#: utilops.c:397 utilops.c:399
+msgid ""
+"\n"
+"to:"
+msgstr ""
+
+#: utilops.c:399
+msgid " multiple files from:\n"
+msgstr ""
+
+#: utilops.c:459 utilops.c:465 utilops.c:510
+msgid "Unable to delete file:\n"
+msgstr ""
+
+#: utilops.c:459
+msgid ""
+"\n"
+"Continue multiple delete operation?"
+msgstr ""
+
+#: utilops.c:460 utilops.c:466
+msgid "Delete failed"
+msgstr ""
+
+#: utilops.c:495
+msgid "Delete files"
+msgstr ""
+
+#: utilops.c:495
+msgid "About to delete multiple files..."
+msgstr ""
+
+#: utilops.c:496 utilops.c:541
+msgid "Delete"
+msgstr ""
+
+#: utilops.c:511
+msgid "File deletion failed"
+msgstr ""
+
+#: utilops.c:539
+msgid "About to delete the file:\n"
+msgstr ""
+
+#: utilops.c:540
+msgid "Delete file"
+msgstr ""
+
+#: utilops.c:595
+msgid ""
+"\n"
+" by renaming:\n"
+msgstr ""
+
+#: utilops.c:606 utilops.c:786
+msgid "Unable to rename file:\n"
+msgstr ""
+
+#: utilops.c:607 utilops.c:787
+msgid "Error renaming file"
+msgstr ""
+
+#: utilops.c:624
+#, c-format
+msgid "r=%d n=%d\n"
+msgstr ""
+
+#: utilops.c:640
+#, c-format
+msgid "closed by #%d\n"
+msgstr ""
+
+#: utilops.c:697 utilops.c:825
+msgid "GQview - rename"
+msgstr ""
+
+#: utilops.c:697
+msgid "Rename multiple files:"
+msgstr ""
+
+#: utilops.c:697
+msgid "Rename"
+msgstr ""
+
+#: utilops.c:732
+msgid "Rename:"
+msgstr ""
+
+#: utilops.c:741
+msgid "to:"
+msgstr ""
+
+#: utilops.c:824
+msgid "Rename file:\n"
+msgstr ""
+
+#: utilops.c:824
+msgid ""
+"\n"
+" to:"
+msgstr ""
+
+#: utilops.c:868
+msgid "The path:\n"
+msgstr ""
+
+#: utilops.c:868
+msgid ""
+"\n"
+" already exists as a file."
+msgstr ""
+
+#: utilops.c:874
+msgid "The directory:\n"
+msgstr ""
+
+#: utilops.c:874
+msgid ""
+"\n"
+" already exists."
+msgstr ""
+
+#: utilops.c:882
+msgid "Unable to create directory:\n"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ÎºîÀ®¤¬¤Ç¤­¤Þ¤»¤ó¡£\n"
+
+#: utilops.c:922
+msgid "Create directory in:\n"
+msgstr "¥Ç¥£¥ì¥¯¥È¥êºîÀ®\n"
+
+#: utilops.c:922
+msgid ""
+"\n"
+" named:"
+msgstr ""
+
+#: utilops.c:923
+msgid "GQview - new directory"
+msgstr "GQview - ¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: utilops.c:923
+msgid "Create"
+msgstr "ºîÀ®"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..56ac695
--- /dev/null
@@ -0,0 +1,798 @@
+# gqview pt_BR.po file.
+# Copyright (C) 1999 Vitor Fernandes.
+# Vitor Fernandes <vitor_fernandes@SoftHome.net>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gqview-0.7.0c\n"
+"POT-Creation-Date: 1999-09-15 15:22-0300\n"
+"PO-Revision-Date: 1999-09-15 16:47-0300\n"
+"Last-Translator: Vitor Fernandes <vitor_fernandes@SoftHome.net>\n"
+"Language-Team: Vitor Fernandes <vitor_fernandes@SoftHome.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=3Diso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+
+#: src/config.c:303
+msgid "GQview configuration"
+msgstr "Configura=E7=E3o do GQview"
+
+#: src/config.c:315
+msgid "Ok"
+msgstr "Ok"
+
+#: src/config.c:320
+msgid "Apply"
+msgstr "Aplicar"
+
+#: src/config.c:325 src/utildlg.c:140 src/utilops.c:414 src/utilops.c:722
+#: src/utilops.c:851 src/utilops.c:949
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/config.c:339
+msgid "General"
+msgstr "Geral"
+
+#: src/config.c:347
+msgid "Initial directory"
+msgstr "Diret=F3rio inicial"
+
+#: src/config.c:357
+msgid "On startup, change to this directory:"
+msgstr "Na abertura, mude para esse diret=F3rio:"
+
+#: src/config.c:369
+msgid "Use current"
+msgstr "Use o atual"
+
+#: src/config.c:375
+msgid "Confirm file delete"
+msgstr "Confirmar exclus=E3o de arquivo"
+
+#: src/config.c:377
+msgid "Remember tool state (float/hidden)"
+msgstr "Lembrar estado da ferramenta (flutuante/escondida)"
+
+#: src/config.c:379
+msgid "Remember window positions"
+msgstr "Lembrar posi=E7=F5es da janela"
+
+#: src/config.c:381
+msgid "Slide show"
+msgstr "Show de slides"
+
+#: src/config.c:394
+msgid "Delay before image change (seconds):"
+msgstr "Demora antes de mudar imagem (segundos):"
+
+#: src/config.c:407
+msgid "Random"
+msgstr "Aleat=F3rio"
+
+#: src/config.c:409
+msgid "Repeat"
+msgstr "Repetir"
+
+#: src/config.c:416
+msgid "Image"
+msgstr "Imagem"
+
+#: src/config.c:424
+msgid "When new image is selected:"
+msgstr "Quando nova imagem =E9 selecionada:"
+
+#: src/config.c:434
+msgid "Zoom to original size"
+msgstr "Zoom para o tamanho original"
+
+#: src/config.c:440 src/img-view.c:283 src/menu.c:458 src/menu.c:531
+#: src/menu.c:571 src/menu.c:661
+msgid "Fit image to window"
+msgstr "Ajustar imagem =E0 janela"
+
+#: src/config.c:446
+msgid "Leave Zoom at previous setting"
+msgstr "Deixar o Zoom na configura=E7=E3o anterior"
+
+#: src/config.c:453
+msgid "Fit window to image when tools are hidden/floating"
+msgstr "Ajustar janela =E0 imagem quando as ferramentas estiverem escondidas/flutuando"
+
+#: src/config.c:460
+msgid "Limit size when auto-sizing window"
+msgstr "Limitar tamanho quando auto-dimensionando janela"
+
+#: src/config.c:470 src/menu.c:462
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
+#: src/config.c:486
+msgid "Size:"
+msgstr "Tamanho:"
+
+#: src/config.c:515
+msgid "Cache thumbnails"
+msgstr "Manter miniaturas"
+
+#: src/config.c:517
+msgid "Use xvpics thumbnails when found (read only)"
+msgstr "Usar miniaturas xvpics quando encontradas (somente leitura)"
+
+#: src/config.c:520
+msgid "Progressive keyboard scrolling"
+msgstr "Rolagem de teclado progressiva"
+
+#: src/config.c:527
+msgid "Filtering"
+msgstr "Filtragem"
+
+#: src/config.c:536
+msgid "Show entries that begin with a dot"
+msgstr "Exibir entradas que iniciam com um ponto"
+
+#: src/config.c:538
+msgid "Disable File Filtering"
+msgstr "Desativar Filtragem de Arquivos"
+
+#: src/config.c:540
+msgid "Include files of type:"
+msgstr "Incluir arquivos do tipo:"
+
+#: src/config.c:590
+msgid "Custom file types:"
+msgstr "Tipos de arquivos personalizados:"
+
+#: src/config.c:603
+msgid "format: [.foo;.bar]"
+msgstr "formato: [.foo;.bar]"
+
+#: src/config.c:612
+msgid "External Editors"
+msgstr "Editores Externos"
+
+#: src/config.c:624
+msgid "#"
+msgstr "#"
+
+#: src/config.c:627
+msgid "Menu name"
+msgstr "Nome no menu"
+
+#: src/config.c:630
+msgid "Command Line"
+msgstr "Linha do comando"
+
+#: src/config.c:660 src/menu.c:484
+msgid "About"
+msgstr "Sobre"
+
+#: src/config.c:676
+msgid ""
+"GQview %s\n"
+"\n"
+"Copyright (c) 1999 by John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Released under the GNU Public License"
+msgstr ""
+"GQview %s\n"
+"\n"
+"Copyright (c) 1999 por John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Lan=E7ado sob a Licensa P=FAblica Geral GNU"
+
+#: src/filelist.c:51
+msgid " Slideshow"
+msgstr "Show de Slides"
+
+#: src/filelist.c:55
+msgid "%d files (%d)%s"
+msgstr "%d arquivos (%d)%s"
+
+#: src/filelist.c:57
+msgid "%d files%s"
+msgstr "%d arquivos%s"
+
+#: src/filelist.c:960
+msgid "Loading thumbs..."
+msgstr "Carregando mini..."
+
+#: src/image.c:65
+msgid "( ? x ? ) %d bytes"
+msgstr ""
+
+#: src/image.c:67
+msgid "( %d x %d ) %d bytes"
+msgstr ""
+
+#: src/img-main.c:230
+msgid "GQview full screen"
+msgstr "GQview tela cheia"
+
+#: src/img-view.c:280 src/menu.c:455 src/menu.c:528 src/menu.c:568
+#: src/menu.c:657
+msgid "Zoom in"
+msgstr "Mais Zoom"
+
+#: src/img-view.c:281 src/menu.c:456 src/menu.c:529 src/menu.c:569 src/menu.c:659
+msgid "Zoom out"
+msgstr "Menos Zoom"
+
+#: src/img-view.c:282 src/menu.c:457 src/menu.c:530 src/menu.c:570
+msgid "Zoom 1:1"
+msgstr ""
+
+#. edit menu
+#: src/img-view.c:286 src/menu.c:442 src/menu.c:503 src/menu.c:534 src/menu.c:574
+msgid "Edit"
+msgstr "Editar"
+
+#: src/img-view.c:291 src/menu.c:431 src/menu.c:510 src/menu.c:541 src/menu.c:579
+msgid "Copy..."
+msgstr "Copiar..."
+
+#: src/img-view.c:292 src/menu.c:432 src/menu.c:511 src/menu.c:542 src/menu.c:580
+msgid "Move..."
+msgstr "Mover..."
+
+#: src/img-view.c:293 src/menu.c:433 src/menu.c:512 src/menu.c:543 src/menu.c:581
+msgid "Rename..."
+msgstr "Renomear..."
+
+#: src/img-view.c:294 src/menu.c:434 src/menu.c:513 src/menu.c:544 src/menu.c:582
+msgid "Delete..."
+msgstr "Excluir..."
+
+#: src/img-view.c:297
+msgid "Close window"
+msgstr "Fechar janela"
+
+#: src/main.c:90 src/main.c:119
+msgid "GQview running: %s\n"
+msgstr "GQview rodando: %s\n"
+
+#: src/main.c:316
+msgid ""
+"Usage: gqview [options] [path]\n"
+"\n"
+msgstr ""
+"Uso: gqview [op=E7=F5es] [caminho]\n"
+"\n"
+
+#: src/main.c:317
+msgid "valid options are:\n"
+msgstr "op=E7=F5es v=E1lidas s=E3o:\n"
+
+#: src/main.c:318
+msgid "  +t, +tools                 force show of tools\n"
+msgstr "  +t, +tools                   for=E7a a exibir as ferramentas\n"
+
+#: src/main.c:319
+msgid "  -t, -tools                 force hide of tools\n"
+msgstr "  -t, -tools                   for=E7a a olcultar as ferramentas\n"
+
+#: src/main.c:320
+msgid "  -debug                     turn on debug output\n"
+msgstr "  -debug                       ativa sa=EDda de debug\n"
+
+#: src/main.c:321
+msgid ""
+"  -help                      this message\n"
+"\n"
+msgstr ""
+"  -help                               essa mensagem\n"
+"\n"
+#: src/main.c:326
+msgid ""
+"invalid or ignored: %s\n"
+"Use -help for options\n"
+msgstr ""
+"inv=E1lido ou ignorado: %s\n"
+"Use -help para op=E7=F5es\n"
+#: src/main.c:353
+msgid "The Gimp"
+msgstr ""
+
+#: src/main.c:356
+msgid "Electric Eyes"
+msgstr ""
+
+#: src/main.c:359
+msgid "XV"
+msgstr ""
+
+#: src/main.c:362
+msgid "Xpaint"
+msgstr ""
+
+#: src/menu.c:364
+msgid "in %s..."
+msgstr "em %s..."
+
+#: src/menu.c:366
+msgid "in (unknown)..."
+msgstr "em (desconhecido)..."
+
+#: src/menu.c:385
+msgid "Options..."
+msgstr "Op=E7=F5es..."
+
+#: src/menu.c:387
+msgid "Remove old thumbnails"
+msgstr "Remover miniaturas velhas"
+
+#. file menu
+#: src/menu.c:425
+msgid "File"
+msgstr "Arquivo"
+
+#: src/menu.c:429
+msgid "Create Dir..."
+msgstr "Criar diret=F3rio..."
+
+#: src/menu.c:436
+msgid "Exit"
+msgstr "Sair"
+
+#. view menu
+#: src/menu.c:451
+msgid "View"
+msgstr "Ver"
+
+#: src/menu.c:461 src/menu.c:547
+msgid "Full screen"
+msgstr "Tela cheia"
+
+#: src/menu.c:469
+msgid "Refresh Lists"
+msgstr "Atualizar Listas"
+
+#: src/menu.c:470
+msgid "(Un)Float file list"
+msgstr "(Des)Flutuar lista de arquivos"
+
+#: src/menu.c:471 src/menu.c:546
+msgid "(Un)Hide file list"
+msgstr "(Des)Esconder lista de arquivos"
+
+#: src/menu.c:474
+msgid "Toggle slideshow"
+msgstr "Alternar show de slides"
+
+#: src/menu.c:480
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/menu.c:507 src/menu.c:538
+msgid "View in new window"
+msgstr "Ver em nova janela"
+
+#: src/menu.c:515
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: src/menu.c:585
+msgid "Exit full screen"
+msgstr "Sair da tela cheia"
+
+#: src/menu.c:644
+msgid "Create thumbnails"
+msgstr "Criar miniaturas"
+
+#: src/menu.c:653
+msgid "Change to home directory"
+msgstr "Mudar para diret=F3rio pessoal"
+
+#: src/menu.c:655
+msgid "Refresh file list"
+msgstr "Atualizar lista de arquivos"
+
+#: src/menu.c:663
+msgid "Set zoom 1:1"
+msgstr "Deixar zoom em 1:1"
+
+#: src/menu.c:665
+msgid "Configure options"
+msgstr "Configurar op=E7=F5es"
+
+#: src/menu.c:667
+msgid "Float Controls"
+msgstr "Controles Flutuantes"
+
+#: src/rcfile.c:132
+msgid "error saving config file: %s\n"
+msgstr "erro salvando arquivo de configura=E7=E3o: %s\n"
+
+#: src/thumb.c:127 src/thumb.c:151
+msgid "create dir failed: %s\n"
+msgstr "falha ao criar diret=F3rio: %s\n"
+
+#: src/thumb.c:233
+msgid "Unable to delete dir: %s\n"
+msgstr "Incapaz de excluir diret=F3rio: %s\n"
+
+#: src/thumb.c:249
+msgid "failed to delete:%s\n"
+msgstr "falha ao excluir: %s\n"
+
+#: src/utildlg.c:67
+msgid "     Ok     "
+msgstr "     OK     "
+
+#: src/utilops.c:162
+msgid ""
+"Overwrite file:\n"
+" %s\n"
+" with:\b %s"
+msgstr ""
+"Sobescrever arquivo:\n"
+" %s\n"
+" com:\b %s"
+
+#: src/utilops.c:163 src/utilops.c:262 src/utilops.c:621 src/utilops.c:803
+msgid "Overwrite file"
+msgstr "Sobescrever arquivo"
+
+#: src/utilops.c:164
+msgid "Skip"
+msgstr "Saltar"
+
+#: src/utilops.c:165
+msgid "Yes to all"
+msgstr "Sim para todos"
+
+#: src/utilops.c:166
+msgid "Yes"
+msgstr "Sim"
+
+#: src/utilops.c:200 src/utilops.c:288
+msgid "Error copying file"
+msgstr "Erro copiando arquivo"
+
+#: src/utilops.c:201
+msgid ""
+"Unable to copy file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file copy."
+msgstr ""
+"Incapaz de copiar arquivo:\n"
+"%sto:\n"
+"%s\n"
+" durante c=F3pia m=FAltipla de arquivos."
+
+#: src/utilops.c:205 src/utilops.c:293
+msgid "Error moving file"
+msgstr "Erro movendo arquivo"
+
+#: src/utilops.c:206
+msgid ""
+"Unable to move file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file move."
+msgstr ""
+"Incapaz de mover arquivo:\n"
+"%sto:\n"
+"%s\n"
+" durante movimento m=FAltiplo de arquivos."
+
+#: src/utilops.c:209 src/utilops.c:486
+msgid "Continue"
+msgstr "Continuar"
+
+#: src/utilops.c:261
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+" with:\n"
+"%s"
+msgstr ""
+"Sobescrever arquivo:\n"
+"%s\n"
+" com:\n"
+"%s"
+
+#: src/utilops.c:263 src/utilops.c:622 src/utilops.c:804
+msgid "Overwrite"
+msgstr "Sobescrever"
+
+#: src/utilops.c:289
+msgid ""
+"Unable to copy file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"Incapaz de copiar arquivo:\n"
+"%s\n"
+"para:\n"
+"%s"
+
+#: src/utilops.c:294
+msgid ""
+"Unable to move file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"Incapaz de mover arquivo:\n"
+"%s\n"
+"para:\n"
+"%s"
+
+#: src/utilops.c:337
+msgid "Invalid destination"
+msgstr "Destino inv=E1lido"
+
+#: src/utilops.c:337
+msgid ""
+"When operating with multiple files, please select\n"
+" a directory, not file."
+msgstr ""
+"Quando operando com v=E1rios arquivos, por favor selecione\n"
+" um diret=F3rio, n=E3o arquivo."
+
+#: src/utilops.c:339
+msgid "Invalid directory"
+msgstr "Diret=F3rio inv=E1lido"
+
+#: src/utilops.c:339
+msgid "Please select an existing directory"
+msgstr "Por favor selecione um diret=F3rio existente"
+
+#: src/utilops.c:397
+msgid "GQview - copy"
+msgstr "GQview - copiar"
+
+#: src/utilops.c:398
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/utilops.c:400
+msgid ""
+"Copy file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"Copiar arquivo:\n"
+"%s\n"
+"para:"
+
+#: src/utilops.c:402
+msgid ""
+"Copy multiple files from:\n"
+"%s\n"
+"to:"
+msgstr ""
+"Copiar m=FAltiplos arquivos de:\n"
+"%s\n"
+"para:"
+
+#: src/utilops.c:406
+msgid "GQview - move"
+msgstr "GQview - mover"
+
+#: src/utilops.c:407
+msgid "Move"
+msgstr "Mover"
+
+#: src/utilops.c:409
+msgid ""
+"Move file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"Mover arquivo:\n"
+"%s\n"
+"para:"
+
+#: src/utilops.c:411
+msgid ""
+"Move multiple files from:\n"
+"%s\n"
+"to:"
+msgstr ""
+"Mover m=FAltiplos arquivos de:\n"
+"%s\n"
+"para:"
+
+#: src/utilops.c:484
+msgid ""
+"Unable to delete file:\n"
+" %s\n"
+" Continue multiple delete operation?"
+msgstr ""
+"Incapaz de excluir arquivo:\n"
+" %s\n"
+" Continuar opera=E7=E3o de exclus=E3o multipla ?"
+
+#: src/utilops.c:485 src/utilops.c:491
+msgid "Delete failed"
+msgstr "Falha ao excluir"
+
+#: src/utilops.c:490 src/utilops.c:535
+msgid ""
+"Unable to delete file:\n"
+"%s"
+msgstr ""
+"Incapaz de excluir arquivo:\n"
+"%s"
+
+#: src/utilops.c:520
+msgid "Delete files"
+msgstr "Excluir arquivos"
+
+#: src/utilops.c:520
+msgid "About to delete multiple files..."
+msgstr "Prestes a excluir m=FAltiplos arquivos..."
+
+#: src/utilops.c:521 src/utilops.c:566
+msgid "Delete"
+msgstr "Excluir"
+
+#: src/utilops.c:536
+msgid "File deletion failed"
+msgstr "Exclus=E3o de arquivos falhou"
+
+#: src/utilops.c:564
+msgid ""
+"About to delete the file:\n"
+" %s"
+msgstr ""
+"Prestes a excluir o arquivo:\n"
+" %s"
+
+#: src/utilops.c:565
+msgid "Delete file"
+msgstr "Excluir arquivo"
+
+#: src/utilops.c:620
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"by renaming:\n"
+"%s"
+msgstr ""
+"Sobescrever arquivo:\n"
+"%s\n"
+"renomeando:\n"
+"%s"
+
+#: src/utilops.c:631
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+" to:\n"
+"%s"
+msgstr ""
+"Incapaz de renomear arquivo:\n"
+"%s\n"
+" para:\n"
+"%s"
+
+#: src/utilops.c:632 src/utilops.c:813
+msgid "Error renaming file"
+msgstr "Erro renomeando arquivo"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "GQview - rename"
+msgstr "GQview - renomear"
+
+#: src/utilops.c:722
+msgid "Rename multiple files:"
+msgstr "Renomear m=FAltiplos arquivos:"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "Rename"
+msgstr "Renomear"
+
+#: src/utilops.c:758
+msgid "Rename:"
+msgstr "Renomear:"
+
+#: src/utilops.c:767
+msgid "to:"
+msgstr "para:"
+
+#: src/utilops.c:802
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"with:\n"
+"%s"
+msgstr ""
+"Sobescrever arquivo:\n"
+"%s\n"
+"com:\n"
+"%s"
+
+#: src/utilops.c:812
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"Incapaz de renomear arquivo:\n"
+"%s\n"
+"para:\n"
+"%s"
+
+#: src/utilops.c:850
+msgid ""
+"Rename file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"Renomear arquivo:\n"
+"%s\n"
+"para:"
+
+#: src/utilops.c:894
+msgid ""
+"The path:\n"
+"%s\n"
+"already exists as a file."
+msgstr ""
+"O caminho:\n"
+"%s\n"
+"j=E1 existe como um arquivo."
+
+#: src/utilops.c:895
+msgid "Could not create directory"
+msgstr "N=E3o pude criar diret=F3rio"
+
+#: src/utilops.c:900
+msgid ""
+"The directory:\n"
+"%s\n"
+"already exists."
+msgstr ""
+"O diret=F3rio:\n"
+"%s\n"
+"j=E1 existe."
+
+#: src/utilops.c:901
+msgid "Directory exists"
+msgstr "Diret=F3rio existe"
+
+#: src/utilops.c:908
+msgid ""
+"Unable to create directory:\n"
+"%s"
+msgstr ""
+"Incapaz de criar diret=F3rio:\n"
+"%s"
+
+#: src/utilops.c:909
+msgid "Error creating directory"
+msgstr "Erro criando diret=F3rio"
+
+#: src/utilops.c:948
+msgid ""
+"Create directory in:\n"
+"%s\n"
+"named:"
+msgstr ""
+"Criar diret=F3rio em:\n"
+"%s\n"
+"chamado:"
+
+#: src/utilops.c:949
+msgid "GQview - new directory"
+msgstr "GQview - novo diret=F3rio"
+
+#: src/utilops.c:949
+msgid "Create"
+msgstr "Criar"
+
+#: src/window.c:151
+msgid "GQview Tools"
+msgstr "GQview Ferramentas"
+
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..d58934a
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,837 @@
+# gqview ru.po file. Russian locale definition for gqview.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Oleg Andrjushenko <oandr@itec.cn.ua>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gqview-0.7.0d\n"
+"POT-Creation-Date: 1999-09-09 09:09+0300\n"
+"PO-Revision-Date: 1999-09-09 09:09+0300\n"
+"Last-Translator: Oleg Andrjushenko <oandr@itec.cn.ua>\n"
+"Language-Team: It`s me <oandr@itec.cn.ua>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/config.c:303
+msgid "GQview configuration"
+msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ GQview"
+
+#: src/config.c:315
+msgid "Ok"
+msgstr "Ok"
+
+#: src/config.c:320
+msgid "Apply"
+msgstr "ðÒÉÍÅÎÉÔØ"
+
+#: src/config.c:325 src/utildlg.c:140 src/utilops.c:414 src/utilops.c:722
+#: src/utilops.c:851 src/utilops.c:949
+msgid "Cancel"
+msgstr "ïÔÍÅÎÁ"
+
+#: src/config.c:339
+msgid "General"
+msgstr "ïÂÝÉÅ"
+
+#: src/config.c:347
+msgid "Initial directory"
+msgstr "éÓÈÏÄÎÙÊ ËÁÔÁÌÏÇ"
+
+#: src/config.c:357
+msgid "On startup, change to this directory:"
+msgstr "ðÒÉ ÓÔÁÒÔÅ, ÉÚÍÅÎÉÔØ ÎÁ ËÁÔÁÌÏÇ:"
+
+#: src/config.c:369
+msgid "Use current"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÔÅËÕÝÉÊ"
+
+#: src/config.c:375
+msgid "Confirm file delete"
+msgstr "ðÏÄÔ×ÅÒÖÄÁÔØ ÕÄÁÌÅÎÉÅ ÆÁÊÌÏ×"
+
+#: src/config.c:377
+msgid "Remember tool state (float/hidden)"
+msgstr "ðÏÍÎÉÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ÉÎÓÔÒÕÍÅÎÔÏ× (Ó×ÏÂÏÄÎÏÅ/ÐÒÉËÒÅÐÌÅÎÎÏÅ)"
+
+#: src/config.c:379
+msgid "Remember window positions"
+msgstr "ðÏÍÎÉÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ÏËÎÁ"
+
+#: src/config.c:381
+msgid "Slide show"
+msgstr "ðÒÏÓÍÏÔÒ ÓÌÁÊÄÏ×"
+
+#: src/config.c:394
+msgid "Delay before image change (seconds):"
+msgstr "ðÁÕÚÁ ÐÅÒÅÄ ÓÍÅÎÏÊ ËÁÒÔÉÎËÉ (ÓÅËÕÎÙ):"
+
+#: src/config.c:407
+msgid "Random"
+msgstr "óÌÕÞÁÊÎÏ"
+
+#: src/config.c:409
+msgid "Repeat"
+msgstr "ðÏ×ÔÏÒÑÔØ × ÃÉËÌÅ"
+
+#: src/config.c:416
+msgid "Image"
+msgstr "éÚÏÂÒÁÖÅÎÉÅ"
+
+#: src/config.c:424
+msgid "When new image is selected:"
+msgstr "ðÒÉ ×ÙÂÏÒÅ ÎÏ×ÏÇÏ ÉÚÏÂÒÁÖÅÎÉÑ:"
+
+#: src/config.c:434
+msgid "Zoom to original size"
+msgstr "íÁÛÔÁÂÉÒÏ×ÁÔØ Ë ÒÁÚÍÅÒÕ ÏÒÉÇÉÎÁÌÁ"
+
+#: src/config.c:440 src/img-view.c:283 src/menu.c:458 src/menu.c:531
+#: src/menu.c:571 src/menu.c:661
+msgid "Fit image to window"
+msgstr "ë ÒÁÚÍÅÒÕ ÏËÎÁ"
+
+#: src/config.c:446
+msgid "Leave Zoom at previous setting"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÐÏÓÌÅÄÎÉÊ ÚÁÄÁÎÎÙÊ ÍÁÛÔÁÂ"
+
+#: src/config.c:453
+msgid "Fit window to image when tools are hidden/floating"
+msgstr ""
+"ðÏÄÂÉÒÁÔØ ÒÁÚÍÅÒÙ ÏËÎÁ Ë ÉÚÏÂÒÁÖÅÎÉÀ   \n"
+"ËÏÇÄÁ ÉÎÓÔÒÕÍÅÎÔÙ ÐÒÉËÒÅÐÌÅÎÎÙ/Ó×ÏÂÏÄÎÙ"
+
+#: src/config.c:460
+msgid "Limit size when auto-sizing window"
+msgstr "ïÇÒÁÎÉÞÉÔØ ÒÁÚÍÅÒ auto-ÒÁÚÍÅÒÎÏÇÏ ÏËÎÁ"
+
+#: src/config.c:470 src/menu.c:462
+msgid "Thumbnails"
+msgstr "üËÓËÉÚÙ"
+
+#: src/config.c:486
+msgid "Size:"
+msgstr "òÁÚÍÅÒ:"
+
+#: src/config.c:515
+msgid "Cache thumbnails"
+msgstr "ëÜÛÉÒÏ×ÁÔØ ÜËÓËÉÚÙ"
+
+#: src/config.c:517
+msgid "Use xvpics thumbnails when found (read only)"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÜËÓËÉÚÙ ÏÔ xvpics, ÅÓÌÉ ÎÁÊÄÅÎÙ (ÔÏÌØËÏ ÞÔÅÎÉÅ)"
+
+#: src/config.c:520
+msgid "Progressive keyboard scrolling"
+msgstr ""
+
+#: src/config.c:527
+msgid "Filtering"
+msgstr "æÉÌØÔÒÁÃÉÑ"
+
+#: src/config.c:536
+msgid "Show entries that begin with a dot"
+msgstr "ðÏËÁÚÙ×ÁÔØ ÆÁÊÌÙ ÎÁÞÉÎÁÀÝÉÅÓÑ Ó ÔÏÞËÉ"
+
+#: src/config.c:538
+msgid "Disable File Filtering"
+msgstr "úÁÐÒÅÔÉÔØ æÉÌØÔÒÁÃÉÀ æÁÊÌÁ"
+
+#: src/config.c:540
+msgid "Include files of type:"
+msgstr "÷ËÌÀÞÁÔØ ÆÁÊÌÙ ÔÉÐÁ:"
+
+#: src/config.c:590
+msgid "Custom file types:"
+msgstr "É/ÉÌÉ Ó×ÏÊ ÔÉРÆÁÊÌÁ:"
+
+#: src/config.c:603
+msgid "format: [.foo;.bar]"
+msgstr "ÆÏÒÍÁÔ: [.foo;.bar]"
+
+#: src/config.c:612
+msgid "External Editors"
+msgstr "÷ÎÅÛÎÉÅ òÅÄÁËÔÏÒÙ"
+
+#: src/config.c:624
+msgid "#"
+msgstr ""
+
+#: src/config.c:627
+msgid "Menu name"
+msgstr "éÍÑ × ÍÅÎÀ"
+
+#: src/config.c:630
+msgid "Command Line"
+msgstr "ëÏÍÍÁÎÄÎÁÑ ÓÔÒÏËÁ"
+
+#: src/config.c:660 src/menu.c:484
+msgid "About"
+msgstr "ï ÐÒÏÇÒÁÍÍÅ..."
+
+#: src/config.c:676
+#, c-format
+msgid ""
+"GQview %s\n"
+"\n"
+"Copyright (c) 1999 by John Ellis\n"
+"http://gqview.netpedia.net\n"
+"gqview@email.com\n"
+"\n"
+"Released under the GNU Public License"
+msgstr ""
+
+#: src/filelist.c:51
+msgid " Slideshow"
+msgstr " ðÒÏÓÍÏÔÒ ÓÌÁÊÄÏ×..."
+
+#: src/filelist.c:55
+#, c-format
+msgid "%d files (%d)%s"
+msgstr "%d ÆÁÊÌÏ× (%d)%s"
+
+#: src/filelist.c:57
+#, c-format
+msgid "%d files%s"
+msgstr "%d ÆÁÊÌÏ×%s"
+
+#: src/filelist.c:960
+msgid "Loading thumbs..."
+msgstr "úÁÇÒÕÚËÁ ÜËÓËÉÚÏ×"
+
+#: src/image.c:65
+#, c-format
+msgid "( ? x ? ) %d bytes"
+msgstr "( ? x ? ) %d ÂÁÊÔ"
+
+#: src/image.c:67
+#, c-format
+msgid "( %d x %d ) %d bytes"
+msgstr "( %d x %d ) %d ÂÁÊÔ"
+
+#: src/img-main.c:231
+msgid "GQview full screen"
+msgstr "GQview ÎÁ ×ÅÓØ ÜËÒÁÎ"
+
+#: src/img-view.c:280 src/menu.c:455 src/menu.c:528 src/menu.c:568
+#: src/menu.c:657
+msgid "Zoom in"
+msgstr "íÁÓÛÔÁ +"
+
+#: src/img-view.c:281 src/menu.c:456 src/menu.c:529 src/menu.c:569
+#: src/menu.c:659
+msgid "Zoom out"
+msgstr "íÁÓÛÔÁ -"
+
+#: src/img-view.c:282 src/menu.c:457 src/menu.c:530 src/menu.c:570
+msgid "Zoom 1:1"
+msgstr "íÁÓÛÔÁ 1:1"
+
+#. edit menu
+#: src/img-view.c:286 src/menu.c:442 src/menu.c:503 src/menu.c:534
+#: src/menu.c:574
+msgid "Edit"
+msgstr "ðÒÁ×ËÁ"
+
+#: src/img-view.c:291 src/menu.c:431 src/menu.c:510 src/menu.c:541
+#: src/menu.c:579
+msgid "Copy..."
+msgstr "ëÏÐÉÒÏ×ÁÔØ..."
+
+#: src/img-view.c:292 src/menu.c:432 src/menu.c:511 src/menu.c:542
+#: src/menu.c:580
+msgid "Move..."
+msgstr "ðÅÒÅÍÅÓÔÉÔØ..."
+
+#: src/img-view.c:293 src/menu.c:433 src/menu.c:512 src/menu.c:543
+#: src/menu.c:581
+msgid "Rename..."
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ..."
+
+#: src/img-view.c:294 src/menu.c:434 src/menu.c:513 src/menu.c:544
+#: src/menu.c:582
+msgid "Delete..."
+msgstr "õÄÁÌÉÔØ..."
+
+#: src/img-view.c:297
+msgid "Close window"
+msgstr "úÁËÒÙÔØ ÏËÎÏ"
+
+#: src/main.c:90 src/main.c:119
+#, c-format
+msgid "GQview running: %s\n"
+msgstr "GQview ×ÙÐÏÌÎÑÅÔ: %s\n"
+
+#: src/main.c:316
+msgid ""
+"Usage: gqview [options] [path]\n"
+"\n"
+msgstr ""
+"éÓÐÏÌØÚÏ×ÁÎÉÅ: gqview [ÐÁÒÁÍÅÔÒÙ] [ÐÕÔØ]\n"
+"\n"
+
+#: src/main.c:317
+msgid "valid options are:\n"
+msgstr "ÄÏÐÕÓÔÉÍÙÅ ÐÁÒÁÍÅÔÒÙ:\n"
+
+#: src/main.c:318
+msgid "  +t, +tools                 force show of tools\n"
+msgstr "  +t, +tools                 ÐÏËÁÚÙ×ÁÔØ ÏËÎÏ ÉÎÓÔÒÕÍÅÎÔÏ×\n"
+
+#: src/main.c:319
+msgid "  -t, -tools                 force hide of tools\n"
+msgstr "  -t, -tools                 ÓÐÒÑÔÁÔØ ÏËÎÏ ÉÎÓÔÒÕÍÅÎÔÏ×\n"
+
+#: src/main.c:320
+msgid "  -debug                     turn on debug output\n"
+msgstr "  -debug                     ×Ù×ÏÄÉÔØ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ\n"
+
+#: src/main.c:321
+msgid ""
+"  -help                      this message\n"
+"\n"
+msgstr ""
+"  -help                      ÐÏËÁÚÁÔØ üôï ÓÏÏÂÝÅÎÉÅ\n"
+"\n"
+
+#: src/main.c:326
+#, c-format
+msgid ""
+"invalid or ignored: %s\n"
+"Use -help for options\n"
+msgstr ""
+"ÎÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ: %s\n"
+"îÁÂÅÒÉÔÅ gqview -help ÄÌÑ ÓÐÒÁ×ËÉ.\n"
+
+#: src/main.c:353
+msgid "The Gimp"
+msgstr ""
+
+#: src/main.c:356
+msgid "Electric Eyes"
+msgstr ""
+
+#: src/main.c:359
+msgid "XV"
+msgstr ""
+
+#: src/main.c:362
+msgid "Xpaint"
+msgstr ""
+
+#: src/menu.c:364
+#, c-format
+msgid "in %s..."
+msgstr "× %s..."
+
+#: src/menu.c:366
+msgid "in (unknown)..."
+msgstr "× (ÎÅÉÚ×ÅÓÔÎÏ)..."
+
+#: src/menu.c:385
+msgid "Options..."
+msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ..."
+
+#: src/menu.c:387
+msgid "Remove old thumbnails"
+msgstr "õÄÁÌÉÔØ ÓÔÁÒÙÅ ÜËÓËÉÚÙ"
+
+#. file menu
+#: src/menu.c:425
+msgid "File"
+msgstr "æÁÊÌ"
+
+#: src/menu.c:429
+msgid "Create Dir..."
+msgstr "óÏÚÄÁÔØ ËÁÔÁÌÏÇ..."
+
+#: src/menu.c:436
+msgid "Exit"
+msgstr "÷ÙÈÏÄ"
+
+#. view menu
+#: src/menu.c:451
+msgid "View"
+msgstr "ðÒÏÓÍÏÔÒ"
+
+#: src/menu.c:461 src/menu.c:547
+msgid "Full screen"
+msgstr "îÁ ×ÅÓØ ÜËÒÁÎ"
+
+#: src/menu.c:469
+msgid "Refresh Lists"
+msgstr "ïÂÎÏ×ÉÔØ ÓÐÉÓÏË ÆÁÊÌÏ×"
+
+#: src/menu.c:470
+msgid "(Un)Float file list"
+msgstr "(îÅ)ïÓ×ÏÂÏÄÉÔØ ÉÎÓÔÒÕÍÅÎÔÙ"
+
+#: src/menu.c:471 src/menu.c:546
+msgid "(Un)Hide file list"
+msgstr "îÅÔ/äÁ ÉÎÓÔÒÕÍÅÎÔÁÍ"
+
+#: src/menu.c:474
+msgid "Toggle slideshow"
+msgstr "÷ËÌ/÷ÙËÌ. ÐÒÏÓÍÏÔÒ ÓÌÁÊÄÏ×"
+
+#. help menu
+#: src/menu.c:480
+msgid "Help"
+msgstr "ðÏÍÏÝØ"
+
+#: src/menu.c:507 src/menu.c:538
+msgid "View in new window"
+msgstr "ðÒÏÓÍÏÔÒ × ÎÏ×ÏÍ ÏËÎÅ"
+
+#: src/menu.c:515
+msgid "Refresh"
+msgstr "ïÂÎÏ×ÉÔØ"
+
+#: src/menu.c:585
+msgid "Exit full screen"
+msgstr "÷ÙÊÔÉ ÉÚ ÐÏÌÎÏÇÏ ÜËÒÁÎÁ"
+
+#: src/menu.c:644
+msgid "Create thumbnails"
+msgstr "óÏÚÄÁÔØ ÜËÓËÉÚÙ"
+
+#: src/menu.c:653
+msgid "Change to home directory"
+msgstr "ðÅÒÅÊÔÉ × ÄÏÍÁÛÎÉÊ ËÁÔÁÌÏÇ"
+
+#: src/menu.c:655
+msgid "Refresh file list"
+msgstr "ïÂÎÏ×ÉÔØ ÓÐÉÓÏË ÆÁÊÌÏ×"
+
+#: src/menu.c:663
+msgid "Set zoom 1:1"
+msgstr "íÁÓÛÔÁ 1:1"
+
+#: src/menu.c:665
+msgid "Configure options"
+msgstr "ëÏÎÆÉÇÕÒÁÃÉÑ"
+
+#: src/menu.c:667
+msgid "Float Controls"
+msgstr "ÐÒÉËÒÅÐÉÔØ/Ó×ÏÂÏÄÉÔØ ÉÎÓÔÒÕÍÅÎÔÙ"
+
+#: src/rcfile.c:132
+#, c-format
+msgid "error saving config file: %s\n"
+msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÆÁÊÌÁ ËÏÎÆÉÇÕÒÁÃÉÉ: %s\n"
+
+#: src/thumb.c:127 src/thumb.c:151
+#, c-format
+msgid "create dir failed: %s\n"
+msgstr "ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ ÎÅÕÄÁÌÏÓØ: %s\n"
+
+#: src/thumb.c:233
+#, c-format
+msgid "Unable to delete dir: %s\n"
+msgstr "îÅÍÏÇÕ ÕÄÁÌÉÔØ ËÁÔÁÌÏÇ: %s\n"
+
+#: src/thumb.c:249
+#, c-format
+msgid "failed to delete:%s\n"
+msgstr "ÎÅÕÄÁÌÏÓØ ÕÄÁÌÉÔØ:%s\n"
+
+#: src/utildlg.c:67
+msgid "     Ok     "
+msgstr "     Ok     "
+
+#: src/utilops.c:162
+#, c-format
+msgid ""
+"Overwrite file:\n"
+" %s\n"
+" with:\b %s"
+msgstr ""
+"æÁÊÌ Ó ÔÁËÉÍ ÉÍÅÎÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ !\n"
+"ðÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ ?:\n"
+" %s\n"
+" ÆÁÊÌÏÍ:\b %s"
+
+#: src/utilops.c:163 src/utilops.c:262 src/utilops.c:621 src/utilops.c:803
+msgid "Overwrite file"
+msgstr "ðÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ"
+
+#: src/utilops.c:164
+msgid "Skip"
+msgstr "ðÒÏÐÕÓÔÉÔØ"
+
+#: src/utilops.c:165
+msgid "Yes to all"
+msgstr "äÁ ÄÌÑ ×ÓÅÈ"
+
+#: src/utilops.c:166
+msgid "Yes"
+msgstr "äÁ"
+
+#: src/utilops.c:200 src/utilops.c:288
+msgid "Error copying file"
+msgstr "ïÛÉÂËÁ ËÏÐÉÒÏ×ÁÎÉÑ ÆÁÊÌÁ"
+
+#: src/utilops.c:201
+#, c-format
+msgid ""
+"Unable to copy file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file copy."
+msgstr ""
+"îÅÍÏÇÕ ÓËÏÐÉÒÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s ×:\n"
+"%s\n"
+" during multiple file copy."
+
+#: src/utilops.c:205 src/utilops.c:293
+msgid "Error moving file"
+msgstr "ïÛÉÂËÁ ÐÅÒÅÍÅÝÅÎÉÑ ÆÁÊÌÁ"
+
+#: src/utilops.c:206
+#, c-format
+msgid ""
+"Unable to move file:\n"
+"%sto:\n"
+"%s\n"
+" during multiple file move."
+msgstr ""
+"îÅÍÏÇÕ ÐÅÒÅÍÅÓÔÉÔØ ÆÁÊÌ:\n"
+"%s ×:\n"
+"%s\n"
+" during multiple file move."
+
+#: src/utilops.c:209 src/utilops.c:486
+msgid "Continue"
+msgstr "ðÒÏÄÏÌÖÉÔØ"
+
+#: src/utilops.c:261
+#, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+" with:\n"
+"%s"
+msgstr ""
+"æÁÊÌ Ó ÔÁËÉÍ ÉÍÅÎÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ !\n"
+"ðÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ ?:\n"
+"%s\n"
+" ÆÁÊÌÏÍ:\n"
+"%s"
+
+#: src/utilops.c:263 src/utilops.c:622 src/utilops.c:804
+msgid "Overwrite"
+msgstr "ðÅÒÅÐÉÓÁÔØ"
+
+#: src/utilops.c:289
+#, c-format
+msgid ""
+"Unable to copy file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÓËÏÐÉÒÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+"×:\n"
+"%s"
+
+#: src/utilops.c:294
+#, c-format
+msgid ""
+"Unable to move file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÐÅÒÅÍÅÓÔÉÔØ ÆÁÊÌ:\n"
+"%s\n"
+"×:\n"
+"%s"
+
+#: src/utilops.c:337
+msgid "Invalid destination"
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÎÁÚÎÁÞÅÎÉÅ"
+
+#: src/utilops.c:337
+msgid ""
+"When operating with multiple files, please select\n"
+" a directory, not file."
+msgstr ""
+"ëÏÇÄÁ ÏÐÅÒÁÃÉÑ ÐÒÏÉÚ×ÏÄÉÔÓÑ ÎÁÄ ÎÅÓËÏÌØËÉÍÉ ÆÁÊÌÁÍÉ,\n"
+" ÐÏÖÁÌÕÊÓÔÁ ÚÁÄÁÊÔÅ ËÁÔÁÌÏÇ, ÎÅ ÆÁÊÌ."
+
+#: src/utilops.c:339
+msgid "Invalid directory"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ËÁÔÁÌÏÇ"
+
+#: src/utilops.c:339
+msgid "Please select an existing directory"
+msgstr "ðÏÖÁÌÕÊÓÔÁ ×ÙÂÅÒÉÔÅ ÓÕÝÅÓÔ×ÕÀÝÉÊ ËÁÔÁÌÏÇ"
+
+#: src/utilops.c:397
+msgid "GQview - copy"
+msgstr "GQview - ËÏÐÉÒÏ×ÁÎÉÅ"
+
+#: src/utilops.c:398
+msgid "Copy"
+msgstr "ëÏÐÉÒÏ×ÁÔØ"
+
+#: src/utilops.c:400
+#, c-format
+msgid ""
+"Copy file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"ëÏÐÉÒÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+"×:"
+
+#: src/utilops.c:402
+#, c-format
+msgid ""
+"Copy multiple files from:\n"
+"%s\n"
+"to:"
+msgstr ""
+"ëÏÐÉÒÏ×ÁÔØ ×ÙÄÅÌÅÎÎÙÅ ÆÁÊÌÙ ÉÚ:\n"
+"%s\n"
+"×:"
+
+#: src/utilops.c:406
+msgid "GQview - move"
+msgstr "GQview - ÐÅÒÅÍÅÓÔÉÔØ"
+
+#: src/utilops.c:407
+msgid "Move"
+msgstr "ðÅÒÅÍÅÓÔÉÔØ"
+
+#: src/utilops.c:409
+#, c-format
+msgid ""
+"Move file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"ðÅÒÅÍÅÓÔÉÔØ ÆÁÊÌ:\n"
+"%s\n"
+"×:"
+
+#: src/utilops.c:411
+#, c-format
+msgid ""
+"Move multiple files from:\n"
+"%s\n"
+"to:"
+msgstr ""
+"ðÅÒÅÍÅÓÔÉÔØ ×ÙÄÅÌÅÎÎÙÅ ÆÁÊÌÙ ÉÚ:\n"
+"%s\n"
+"×:"
+
+#: src/utilops.c:484
+#, c-format
+msgid ""
+"Unable to delete file:\n"
+" %s\n"
+" Continue multiple delete operation?"
+msgstr ""
+"îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÆÁÊÌ:\n"
+" %s\n"
+" ðÒÏÄÏÌÖÁÔØ ÏÐÅÒÁÃÉÀ ÕÄÁÌÅÎÉÑ ÄÌÑ ÏÓÔÁ×ÛÉÈÓÑ ÆÁÊÌÏ× ?"
+
+#: src/utilops.c:485 src/utilops.c:491
+msgid "Delete failed"
+msgstr "õÄÁÌÉÔØ ÎÅÕÄÁÌÏÓØ"
+
+#: src/utilops.c:490 src/utilops.c:535
+#, c-format
+msgid ""
+"Unable to delete file:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÕÄÁÌÉÔØ ÆÁÊÌ:\n"
+"%s"
+
+#: src/utilops.c:520
+msgid "Delete files"
+msgstr "õÄÁÌÉÔØ ÆÁÊÌÙ"
+
+#: src/utilops.c:520
+msgid "About to delete multiple files..."
+msgstr "÷Ù ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÏÔÍÅÞÅÎÎÙÅ ÆÁÊÌÙ ?"
+
+#: src/utilops.c:521 src/utilops.c:566
+msgid "Delete"
+msgstr "õÄÁÌÉÔØ"
+
+#: src/utilops.c:536
+msgid "File deletion failed"
+msgstr "õÄÁÌÅÎÉÅ ÆÁÊÌÁ ÎÅÕÄÁÌÏÓØ"
+
+#: src/utilops.c:564
+#, c-format
+msgid ""
+"About to delete the file:\n"
+" %s"
+msgstr ""
+"èÏÔÉÔÅ ÕÄÁÌÉÔØ ÆÁÊÌ ?:\n"
+" %s"
+
+#: src/utilops.c:565
+msgid "Delete file"
+msgstr "õÄÁÌÉÔØ ÆÁÊÌ"
+
+#: src/utilops.c:620
+#, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"by renaming:\n"
+"%s"
+msgstr ""
+"ðÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+"ÐÅÒÅÉÍÅÎÏ×Á×:\n"
+"%s"
+
+#: src/utilops.c:631
+#, c-format
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+" to:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÐÅÒÅÉÍÅÎÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+" ×:\n"
+"%s"
+
+#: src/utilops.c:632 src/utilops.c:813
+msgid "Error renaming file"
+msgstr "ïÛÉÂËÁ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ÆÁÊÌÁ"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "GQview - rename"
+msgstr "GQview - ÐÅÒÅÉÍÅÎÏ×ÁÔØ"
+
+#: src/utilops.c:722
+msgid "Rename multiple files:"
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ ×ÙÄÅÌÅÎÎÙÅ ÆÁÊÌÙ:"
+
+#: src/utilops.c:722 src/utilops.c:851
+msgid "Rename"
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ"
+
+#: src/utilops.c:758
+msgid "Rename:"
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ:"
+
+#: src/utilops.c:767
+msgid "to:"
+msgstr "×:"
+
+#: src/utilops.c:802
+#, c-format
+msgid ""
+"Overwrite file:\n"
+"%s\n"
+"with:\n"
+"%s"
+msgstr ""
+"æÁÊÌ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ !\n"
+"ðÅÒÅÚÁÐÉÓÁÔØ ÆÁÊÌ ?:\n"
+"%s\n"
+"ÆÁÊÌÏÍ:\n"
+"%s"
+
+#: src/utilops.c:812
+#, c-format
+msgid ""
+"Unable to rename file:\n"
+"%s\n"
+"to:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÐÅÒÅÉÍÅÎÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+" ×:\n"
+"%s"
+
+#: src/utilops.c:850
+#, c-format
+msgid ""
+"Rename file:\n"
+"%s\n"
+"to:"
+msgstr ""
+"ðÅÒÅÉÍÅÎÏ×ÁÔØ ÆÁÊÌ:\n"
+"%s\n"
+"×:"
+
+#: src/utilops.c:894
+#, c-format
+msgid ""
+"The path:\n"
+"%s\n"
+"already exists as a file."
+msgstr ""
+"ðÕÔØ:\n"
+"%s\n"
+"ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ ËÁË ÆÁÊÌ."
+
+#: src/utilops.c:895
+msgid "Could not create directory"
+msgstr "îÅÍÏÇÕ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ"
+
+#: src/utilops.c:900
+#, c-format
+msgid ""
+"The directory:\n"
+"%s\n"
+"already exists."
+msgstr ""
+"ëÁÔÁÌÏÇ:\n"
+"%s\n"
+"ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ."
+
+#: src/utilops.c:901
+msgid "Directory exists"
+msgstr "ëÁÔÁÌÏÇ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: src/utilops.c:908
+#, c-format
+msgid ""
+"Unable to create directory:\n"
+"%s"
+msgstr ""
+"îÅÍÏÇÕ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ:\n"
+"%s"
+
+#: src/utilops.c:909
+msgid "Error creating directory"
+msgstr "ïÛÉÂËÁ ÓÏÚÄÁÎÉÑ ËÁÔÁÌÏÇÁ"
+
+#: src/utilops.c:948
+#, c-format
+msgid ""
+"Create directory in:\n"
+"%s\n"
+"named:"
+msgstr ""
+"óÏÚÄÁÔØ ËÁÔÁÌÏÇ ×:\n"
+"%s\n"
+"Ó ÉÍÅÎÅÍ:"
+
+#: src/utilops.c:949
+msgid "GQview - new directory"
+msgstr "GQview - ÎÏ×ÙÊ ËÁÔÁÌÏÇ"
+
+#: src/utilops.c:949
+msgid "Create"
+msgstr "óÏÚÄÁÔØ"
+
+#: src/window.c:151
+msgid "GQview Tools"
+msgstr "GQview éÎÓÔÒÕÍÅÎÔÙ"
diff --git a/src/.cvsignore b/src/.cvsignore
new file mode 100644 (file)
index 0000000..1f1b8f7
--- /dev/null
@@ -0,0 +1,4 @@
+.deps
+Makefile.in
+Makefile
+gqview
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..7cf5d43
--- /dev/null
@@ -0,0 +1,39 @@
+SUBDIRS = icons
+DIST_SUBDIRS = icons
+
+INCLUDES = -I$(srcdir) -I$(builddir)    \
+       -I$(top_srcdir) -I$(top_builddir)       \
+       -DLOCALEDIR=\""$(localedir)"\"          \
+       -I$(includedir) $(GTK_CFLAGS) $(GDK_IMLIB_CFLAGS)
+
+bin_PROGRAMS = gqview
+
+gqview_SOURCES = \
+       config.c        \
+       dnd.c           \
+       filelist.c      \
+       fileops.c       \
+       globals.c       \
+       gqview.h        \
+       image.c         \
+       image.h         \
+       img-main.c      \
+       img-view.c      \
+       intl.h          \
+       logo.h          \
+       main.c          \
+       menu.c          \
+       pathsel.c       \
+       rcfile.c        \
+       slideshow.c     \
+       tabcomp.c       \
+       thumb.c         \
+       utildlg.c       \
+       utildlg.h       \
+       utilops.c       \
+       window.c
+
+gqview_LDADD = $(GTK_LIBS) $(GDK_IMLIB_LIBS)
+
+EXTRA_DIST = tabcomp.xpm
+
diff --git a/src/config.c b/src/config.c
new file mode 100644 (file)
index 0000000..420a306
--- /dev/null
@@ -0,0 +1,704 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+/* config memory values */
+static gint startup_path_enable_c;
+static gint confirm_delete_c;
+static gint restore_tool_c;
+static gint save_window_positions_c;
+static gint zoom_mode_c;
+static gint fit_window_c;
+static gint limit_window_size_c;
+static gint max_window_size_c;
+static gint progressive_key_scrolling_c;
+static gint thumb_max_width_c;
+static gint thumb_max_height_c;
+static gint enable_thumb_caching_c;
+static gint use_xvpics_thumbnails_c;
+static gint show_dot_files_c;
+static gint file_filter_disable_c;
+static gint filter_include_jpg_c;
+static gint filter_include_xpm_c;
+static gint filter_include_tif_c;
+static gint filter_include_gif_c;
+static gint filter_include_png_c;
+static gint filter_include_ppm_c;
+static gint filter_include_pgm_c;
+static gint filter_include_pcx_c;
+static gint filter_include_bmp_c;
+static gint slideshow_delay_c;
+static gint slideshow_random_c;
+static gint slideshow_repeat_c;
+
+static GtkWidget *configwindow = NULL;
+static GtkWidget *startup_path_entry;
+static GtkWidget *custom_filter_entry;
+static GtkWidget *editor_name_entry[8];
+static GtkWidget *editor_command_entry[8];
+
+static void startup_path_set_current(GtkWidget *widget, gpointer data);
+static void slideshow_delay_cb(GtkObject *adj, gpointer data);
+static void zoom_mode_original_cb(GtkWidget *widget, gpointer data);
+static void zoom_mode_fit_cb(GtkWidget *widget, gpointer data);
+static void zoom_mode_none_cb(GtkWidget *widget, gpointer data);
+static void max_window_size_cb(GtkObject *adj, gpointer data);
+static void thumb_size_48_selected(GtkWidget *w, gpointer data);
+static void thumb_size_64_selected(GtkWidget *w, gpointer data);
+static void thumb_size_85_selected(GtkWidget *w, gpointer data);
+static void thumb_size_100_selected(GtkWidget *w, gpointer data);
+
+static void config_window_apply();
+static void config_window_close_cb(GtkWidget *widget, gpointer data);
+static void config_window_destroy(GtkWidget *w, GdkEvent *event, gpointer data);
+static void config_window_ok_cb(GtkWidget *widget, gpointer data);
+static void config_window_save_cb(GtkWidget *widget, gpointer data);
+
+static void check_button_cb(GtkWidget *widget, gpointer data);
+static void add_check_button(gint option, gint *option_c, gchar *text, GtkWidget *box);
+static void config_window_create(gint start_tab);
+
+/*
+ *-----------------------------------------------------------------------------
+ * option widget callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void startup_path_set_current(GtkWidget *widget, gpointer data)
+{
+       gtk_entry_set_text(GTK_ENTRY(startup_path_entry), current_path);
+}
+
+static void slideshow_delay_cb(GtkObject *adj, gpointer data)
+{
+       slideshow_delay_c = (gint)GTK_ADJUSTMENT(adj)->value;
+}
+
+static void zoom_mode_original_cb(GtkWidget *widget, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (widget)->active)
+               zoom_mode_c = ZOOM_RESET_ORIGINAL;
+}
+
+static void zoom_mode_fit_cb(GtkWidget *widget, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (widget)->active)
+               zoom_mode_c = ZOOM_RESET_FIT_WINDOW;
+}
+
+static void zoom_mode_none_cb(GtkWidget *widget, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (widget)->active)
+               zoom_mode_c = ZOOM_RESET_NONE;
+}
+
+static void max_window_size_cb(GtkObject *adj, gpointer data)
+{
+       max_window_size_c = (gint)GTK_ADJUSTMENT(adj)->value;
+}
+
+static void thumb_size_48_selected(GtkWidget *w, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (w)->active)
+               {
+               thumb_max_width_c = 48;
+               thumb_max_height_c = 48;
+               }
+}
+
+static void thumb_size_64_selected(GtkWidget *w, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (w)->active)
+               {
+               thumb_max_width_c = 64;
+               thumb_max_height_c = 64;
+               }
+}
+
+static void thumb_size_85_selected(GtkWidget *w, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (w)->active)
+               {
+               thumb_max_width_c = 85;
+               thumb_max_height_c = 64;
+               }
+}
+
+static void thumb_size_100_selected(GtkWidget *w, gpointer data)
+{
+       if (GTK_TOGGLE_BUTTON (w)->active)
+               {
+               thumb_max_width_c = 100;
+               thumb_max_height_c = 100;
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * sync progam to config window routine (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void config_window_apply()
+{
+       gchar *buf;
+       gint i;
+       gint refresh = FALSE;
+
+       for(i=0; i<8; i++)
+               {
+               g_free(editor_name[i]);
+               editor_name[i] = NULL;
+               buf = gtk_entry_get_text(GTK_ENTRY(editor_name_entry[i]));
+               if (buf && strlen(buf) > 0) editor_name[i] = g_strdup(buf);
+
+               g_free(editor_command[i]);
+               editor_command[i] = NULL;
+               buf = gtk_entry_get_text(GTK_ENTRY(editor_command_entry[i]));
+               if (buf && strlen(buf) > 0) editor_command[i] = g_strdup(buf);
+               }
+       update_edit_menus(mainwindow_accel_grp);
+
+       g_free(startup_path);
+       startup_path = NULL;
+       buf = gtk_entry_get_text(GTK_ENTRY(startup_path_entry));
+       if (buf && strlen(buf) > 0) startup_path = remove_trailing_slash(buf);
+
+       buf = gtk_entry_get_text(GTK_ENTRY(custom_filter_entry));
+       if ((buf && strlen(buf) > 0) != (custom_filter != NULL)) refresh = TRUE;
+       if ((buf && strlen(buf) > 0 && custom_filter) && strcmp(buf, custom_filter) != 0) refresh = TRUE;
+       g_free(custom_filter);
+       custom_filter = NULL;
+       if (buf && strlen(buf) > 0) custom_filter = g_strdup(buf);
+
+       if (show_dot_files != show_dot_files_c) refresh = TRUE;
+       if (file_filter_disable != file_filter_disable_c) refresh = TRUE;
+       if (filter_include_jpg != filter_include_jpg_c) refresh = TRUE;
+       if (filter_include_xpm != filter_include_xpm_c) refresh = TRUE;
+       if (filter_include_tif != filter_include_tif_c) refresh = TRUE;
+       if (filter_include_gif != filter_include_gif_c) refresh = TRUE;
+       if (filter_include_png != filter_include_png_c) refresh = TRUE;
+       if (filter_include_ppm != filter_include_ppm_c) refresh = TRUE;
+       if (filter_include_pgm != filter_include_pgm_c) refresh = TRUE;
+       if (filter_include_pcx != filter_include_pcx_c) refresh = TRUE;
+       if (filter_include_bmp != filter_include_bmp_c) refresh = TRUE;
+
+       startup_path_enable = startup_path_enable_c;
+       confirm_delete = confirm_delete_c;
+       restore_tool = restore_tool_c;
+       save_window_positions = save_window_positions_c;
+       zoom_mode = zoom_mode_c;
+       fit_window = fit_window_c;
+       limit_window_size = limit_window_size_c;
+       max_window_size = max_window_size_c;
+       progressive_key_scrolling = progressive_key_scrolling_c;
+       thumb_max_width = thumb_max_width_c;
+       thumb_max_height = thumb_max_height_c;
+       enable_thumb_caching = enable_thumb_caching_c;
+       use_xvpics_thumbnails = use_xvpics_thumbnails_c;
+       show_dot_files = show_dot_files_c;
+       file_filter_disable = file_filter_disable_c;
+       filter_include_jpg = filter_include_jpg_c;
+       filter_include_xpm = filter_include_xpm_c;
+       filter_include_tif = filter_include_tif_c;
+       filter_include_gif = filter_include_gif_c;
+       filter_include_png = filter_include_png_c;
+       filter_include_ppm = filter_include_ppm_c;
+       filter_include_pgm = filter_include_pgm_c;
+       filter_include_pcx = filter_include_pcx_c;
+       filter_include_bmp = filter_include_bmp_c;
+
+       slideshow_random = slideshow_random_c;
+       slideshow_repeat = slideshow_repeat_c;
+       slideshow_delay = slideshow_delay_c;
+
+       if (refresh)
+               {
+               rebuild_file_filter();
+               filelist_refresh();
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * config window main button callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void config_window_close_cb(GtkWidget *widget, gpointer data)
+{
+       gtk_widget_destroy(configwindow);
+       configwindow = NULL;
+}
+
+static void config_window_destroy(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+       config_window_close_cb(NULL, NULL);
+}
+
+static void config_window_ok_cb(GtkWidget *widget, gpointer data)
+{
+       config_window_apply();
+       config_window_close_cb(NULL, NULL);
+}
+
+static void config_window_apply_cb(GtkWidget *widget, gpointer data)
+{
+       config_window_apply();
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * config window setup (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void check_button_cb(GtkWidget *widget, gpointer data)
+{
+       gint *value_ptr = data;
+       *value_ptr = GTK_TOGGLE_BUTTON (widget)->active;
+}
+
+static void add_check_button(gint option, gint *option_c, gchar *text, GtkWidget *box)
+{
+       GtkWidget *button;
+       *option_c = option;
+       button = gtk_check_button_new_with_label (text);
+       gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
+       gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), option);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) check_button_cb, option_c);
+       gtk_widget_show(button);
+}
+
+static void config_window_create(gint start_tab)
+{
+       GtkWidget *win_vbox;
+       GtkWidget *hbox;
+       GtkWidget *notebook;
+       GtkWidget *frame;
+       GtkWidget *label;
+       GtkWidget *vbox;
+       GtkWidget *vbox1;
+       GtkWidget *vbox2;
+       GtkWidget *button;
+       GtkWidget *tabcomp;
+       GtkWidget *radiobuttongroup;
+       GtkWidget *table;
+       GtkObject *adj;
+       GtkWidget *spin;
+       GdkImlibImage* im;
+       GdkPixmap *pixmap;
+       gchar buf[255];
+       gint i;
+
+       configwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+       gtk_signal_connect (GTK_OBJECT (configwindow), "delete_event",(GtkSignalFunc) config_window_destroy, NULL);
+       gtk_window_set_policy (GTK_WINDOW (configwindow), FALSE, FALSE, FALSE);
+       gtk_window_set_title (GTK_WINDOW (configwindow), _("GQview configuration"));
+       gtk_window_set_wmclass(GTK_WINDOW (configwindow), "config", "GQview");
+       gtk_container_border_width (GTK_CONTAINER (configwindow), 5);
+
+       win_vbox = gtk_vbox_new(FALSE, 5);
+       gtk_container_add(GTK_CONTAINER(configwindow), win_vbox);
+       gtk_widget_show(win_vbox);
+
+       hbox = gtk_hbox_new (TRUE, 0);
+       gtk_box_pack_end(GTK_BOX(win_vbox), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       button = gtk_button_new_with_label(_("Ok"));
+       gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) config_window_ok_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 20);
+       gtk_widget_show(button);
+
+       button = gtk_button_new_with_label(_("Apply"));
+       gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) config_window_apply_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 20);
+       gtk_widget_show(button);
+
+       button = gtk_button_new_with_label(_("Cancel"));
+       gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) config_window_close_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 20);
+       gtk_widget_show(button);
+
+       notebook = gtk_notebook_new();
+       gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP);
+       gtk_box_pack_start (GTK_BOX(win_vbox), notebook, TRUE, TRUE, 0);
+
+       /* general options tab */
+
+       frame = gtk_frame_new(NULL);
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_widget_show(frame);
+       label = gtk_label_new(_("General"));
+       gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frame, label);
+
+       vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_border_width (GTK_CONTAINER (vbox), 5);
+       gtk_container_add (GTK_CONTAINER(frame),vbox);
+       gtk_widget_show(vbox);
+
+       frame = gtk_frame_new(_("Initial directory"));
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+       gtk_widget_show(frame);
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox1);
+       gtk_widget_show(vbox1);
+
+       add_check_button(startup_path_enable, &startup_path_enable_c,
+                        _("On startup, change to this directory:"), vbox1);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       gtk_widget_realize(configwindow);
+
+       tabcomp = tab_completion_new(&startup_path_entry, configwindow, startup_path, NULL, NULL);
+       gtk_box_pack_start(GTK_BOX(hbox), tabcomp, TRUE, TRUE, 0);
+       gtk_widget_show(tabcomp);
+
+       button = gtk_button_new_with_label (_("Use current"));
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) startup_path_set_current, NULL);
+       gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       add_check_button(confirm_delete, &confirm_delete_c,
+                        _("Confirm file delete"), vbox);
+       add_check_button(restore_tool, &restore_tool_c,
+                        _("Remember tool state (float/hidden)"), vbox);
+       add_check_button(save_window_positions, &save_window_positions_c,
+                        _("Remember window positions"), vbox);
+
+       frame = gtk_frame_new(_("Slide show"));
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+       gtk_widget_show(frame);
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox1);
+       gtk_widget_show(vbox1);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       label = gtk_label_new(_("Delay before image change (seconds):"));
+       gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+       gtk_widget_show(label);
+
+       slideshow_delay_c = slideshow_delay;
+       adj = gtk_adjustment_new((float)slideshow_delay_c, 1.0, 1200.0, 1, 1, 1);
+        spin = gtk_spin_button_new( GTK_ADJUSTMENT(adj), 1, 0 );
+        gtk_box_pack_start( GTK_BOX(hbox), spin, FALSE, FALSE, 5);
+        gtk_signal_connect( GTK_OBJECT(adj),"value_changed",GTK_SIGNAL_FUNC(slideshow_delay_cb), NULL);
+        gtk_spin_button_set_update_policy( GTK_SPIN_BUTTON(spin),GTK_UPDATE_ALWAYS );
+        gtk_widget_show(spin);
+       
+       add_check_button(slideshow_random, &slideshow_random_c,
+                        _("Random"), vbox1);
+       add_check_button(slideshow_repeat, &slideshow_repeat_c,
+                        _("Repeat"), vbox1);
+
+       /* image tab */
+
+       frame = gtk_frame_new(NULL);
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_widget_show(frame);
+       label = gtk_label_new(_("Image"));
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+       vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_border_width (GTK_CONTAINER (vbox), 5);
+       gtk_container_add (GTK_CONTAINER(frame),vbox);
+       gtk_widget_show(vbox);
+       
+       frame = gtk_frame_new(_("When new image is selected:"));
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+       gtk_widget_show(frame);
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox1);
+       gtk_widget_show(vbox1);
+
+       zoom_mode_c = zoom_mode;
+       radiobuttongroup = gtk_radio_button_new_with_label (NULL, _("Zoom to original size"));
+       if (zoom_mode == ZOOM_RESET_ORIGINAL) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(radiobuttongroup), 1);
+       gtk_signal_connect (GTK_OBJECT(radiobuttongroup),"clicked",(GtkSignalFunc) zoom_mode_original_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(vbox1), radiobuttongroup, FALSE, FALSE, 0);
+       gtk_widget_show(radiobuttongroup);
+
+       button = gtk_radio_button_new_with_label (gtk_radio_button_group(GTK_RADIO_BUTTON(radiobuttongroup)),_("Fit image to window"));
+       if (zoom_mode == ZOOM_RESET_FIT_WINDOW) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), 1);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) zoom_mode_fit_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       button = gtk_radio_button_new_with_label (gtk_radio_button_group(GTK_RADIO_BUTTON(radiobuttongroup)),_("Leave Zoom at previous setting"));
+       if (zoom_mode == ZOOM_RESET_NONE) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), 1);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) zoom_mode_none_cb, NULL);
+       gtk_box_pack_start(GTK_BOX(vbox1), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       add_check_button(fit_window, &fit_window_c,
+                        _("Fit window to image when tools are hidden/floating"), vbox);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       add_check_button(limit_window_size, &limit_window_size_c,
+                        _("Limit size when auto-sizing window"), hbox);
+
+       max_window_size_c = max_window_size;
+       adj = gtk_adjustment_new((float)max_window_size_c, 10.0, 150.0, 1, 1, 1);
+        spin = gtk_spin_button_new( GTK_ADJUSTMENT(adj), 1, 0 );
+        gtk_box_pack_start( GTK_BOX(hbox), spin, FALSE, FALSE, 5);
+        gtk_signal_connect( GTK_OBJECT(adj),"value_changed",GTK_SIGNAL_FUNC(max_window_size_cb), NULL);
+        gtk_spin_button_set_update_policy( GTK_SPIN_BUTTON(spin),GTK_UPDATE_ALWAYS );
+        gtk_widget_show(spin);
+
+       frame = gtk_frame_new(_("Thumbnails"));
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+       gtk_widget_show(frame);
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox1);
+       gtk_widget_show(vbox1);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       thumb_max_width_c = thumb_max_width;
+       thumb_max_height_c = thumb_max_height;
+
+       label = gtk_label_new(_("Size:"));
+       gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
+       gtk_widget_show(label);
+
+       radiobuttongroup = gtk_radio_button_new_with_label (NULL,"48x48");
+       gtk_box_pack_start(GTK_BOX(hbox), radiobuttongroup, FALSE, FALSE, 0);
+       if (thumb_max_width_c == 48 && thumb_max_height_c == 48) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(radiobuttongroup), 1);
+       gtk_signal_connect (GTK_OBJECT(radiobuttongroup),"clicked",(GtkSignalFunc) thumb_size_48_selected, NULL);
+       gtk_widget_show(radiobuttongroup);
+
+       button = gtk_radio_button_new_with_label (gtk_radio_button_group(GTK_RADIO_BUTTON(radiobuttongroup)),"64x64");
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       if (thumb_max_width_c == 64 && thumb_max_height_c == 64) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), 1);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) thumb_size_64_selected, NULL);
+       gtk_widget_show(button);
+
+       button = gtk_radio_button_new_with_label (gtk_radio_button_group(GTK_RADIO_BUTTON(radiobuttongroup)),"85x64");
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       if (thumb_max_width_c == 85 && thumb_max_height_c == 64) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), 1);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) thumb_size_85_selected, NULL);
+       gtk_widget_show(button);
+
+       button = gtk_radio_button_new_with_label (gtk_radio_button_group(GTK_RADIO_BUTTON(radiobuttongroup)),"100x100");
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       if (thumb_max_width_c == 100 && thumb_max_height_c == 100) gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(button), 1);
+       gtk_signal_connect (GTK_OBJECT(button),"clicked",(GtkSignalFunc) thumb_size_100_selected, NULL);
+       gtk_widget_show(button);
+
+       add_check_button(enable_thumb_caching, &enable_thumb_caching_c,
+                        _("Cache thumbnails"), vbox1);
+       add_check_button(use_xvpics_thumbnails, &use_xvpics_thumbnails_c,
+                        _("Use xvpics thumbnails when found (read only)"), vbox1);
+
+       add_check_button(progressive_key_scrolling, &progressive_key_scrolling_c,
+                        _("Progressive keyboard scrolling"), vbox);
+
+       /* filtering tab */
+
+       frame = gtk_frame_new(NULL);
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_widget_show(frame);
+       label = gtk_label_new(_("Filtering"));
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+       vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_border_width (GTK_CONTAINER (vbox), 5);
+       gtk_container_add (GTK_CONTAINER(frame),vbox);
+       gtk_widget_show(vbox);
+
+       add_check_button(show_dot_files, &show_dot_files_c,
+                        _("Show entries that begin with a dot"), vbox);
+       add_check_button(file_filter_disable, &file_filter_disable_c,
+                        _("Disable File Filtering"), vbox);
+
+       frame = gtk_frame_new(_("Include files of type:"));
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0);
+       gtk_widget_show(frame);
+
+       vbox1 = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox1);
+       gtk_widget_show(vbox1);
+
+       hbox = gtk_hbox_new (TRUE, 0);
+       gtk_box_pack_start (GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       vbox2 = gtk_vbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(hbox), vbox2,FALSE, FALSE, 0);
+       gtk_widget_show(vbox2);
+
+       add_check_button(filter_include_jpg, &filter_include_jpg_c,
+                        "JPG / JPEG", vbox2);
+       add_check_button(filter_include_xpm, &filter_include_xpm_c,
+                        "XPM", vbox2);
+       add_check_button(filter_include_tif, &filter_include_tif_c,
+                        "TIF / TIFF", vbox2);
+
+       vbox2 = gtk_vbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(hbox), vbox2,FALSE, FALSE, 0);
+       gtk_widget_show(vbox2);
+
+       add_check_button(filter_include_gif, &filter_include_gif_c,
+                        "GIF", vbox2);
+       add_check_button(filter_include_png, &filter_include_png_c,
+                        "PNG", vbox2);
+       add_check_button(filter_include_ppm, &filter_include_ppm_c,
+                        "PPM", vbox2);
+
+       vbox2 = gtk_vbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(hbox), vbox2,FALSE, FALSE, 0);
+       gtk_widget_show(vbox2);
+
+       add_check_button(filter_include_pgm, &filter_include_pgm_c,
+                        "PGM", vbox2);
+       add_check_button(filter_include_pcx, &filter_include_pcx_c,
+                        "PCX", vbox2);
+       add_check_button(filter_include_bmp, &filter_include_bmp_c,
+                        "BMP", vbox2);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       label = gtk_label_new(_("Custom file types:"));
+       gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0);
+       gtk_widget_show(label);
+
+       custom_filter_entry = gtk_entry_new();
+       if (custom_filter) gtk_entry_set_text(GTK_ENTRY(custom_filter_entry), custom_filter);
+       gtk_box_pack_start(GTK_BOX(vbox1),custom_filter_entry,FALSE,FALSE,0);
+       gtk_widget_show(custom_filter_entry);
+
+       hbox = gtk_hbox_new (FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(vbox1), hbox, FALSE, FALSE, 0);
+       gtk_widget_show(hbox);
+
+       label = gtk_label_new(_("format: [.foo;.bar]"));
+       gtk_box_pack_end(GTK_BOX(hbox),label,FALSE,FALSE,5);
+       gtk_widget_show(label);
+
+       /* editor entry tab */
+
+       frame = gtk_frame_new(NULL);
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_widget_show(frame);
+       label = gtk_label_new(_("External Editors"));
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+       vbox = gtk_vbox_new(FALSE,0);
+       gtk_container_border_width (GTK_CONTAINER (vbox), 5);
+       gtk_container_add (GTK_CONTAINER(frame),vbox);
+       gtk_widget_show(vbox);
+
+       table=gtk_table_new(3,9,FALSE);
+       gtk_container_add (GTK_CONTAINER(vbox),table);
+       gtk_widget_show(table);
+
+       label = gtk_label_new(_("#"));
+       gtk_table_attach_defaults(GTK_TABLE (table),label, 0, 1, 0, 1);
+       gtk_widget_show(label);
+       label = gtk_label_new(_("Menu name"));
+       gtk_table_attach_defaults(GTK_TABLE (table),label, 1, 2, 0, 1);
+       gtk_widget_show(label);
+       label = gtk_label_new(_("Command Line"));
+       gtk_table_attach_defaults(GTK_TABLE (table),label, 2, 3, 0, 1);
+       gtk_widget_show(label);
+
+       for (i=0; i<8; i++)
+               {
+               sprintf(buf,"%d",i+1);
+               label = gtk_label_new(buf);
+               gtk_table_attach_defaults(GTK_TABLE (table),label, 0, 1, i+1, i+2);
+               gtk_widget_show(label);
+
+               editor_name_entry[i] = gtk_entry_new_with_max_length(32);
+               gtk_widget_set_usize(editor_name_entry[i],80,-1);
+               if (editor_name[i]) gtk_entry_set_text(GTK_ENTRY(editor_name_entry[i]),editor_name[i]);
+               gtk_table_attach_defaults(GTK_TABLE (table),editor_name_entry[i],1,2,i+1,i+2);
+               gtk_widget_show(editor_name_entry[i]);
+
+               editor_command_entry[i] = gtk_entry_new_with_max_length(255);
+               gtk_widget_set_usize(editor_command_entry[i],160,-1);
+               tab_completion_add_to_entry(editor_command_entry[i], NULL, NULL);
+               if (editor_command[i]) gtk_entry_set_text(GTK_ENTRY(editor_command_entry[i]), editor_command[i]);
+               gtk_table_attach_defaults(GTK_TABLE (table),editor_command_entry[i],2,3,i+1,i+2);
+               gtk_widget_show(editor_command_entry[i]);
+               }
+
+       /* about tab */
+
+       frame = gtk_frame_new(NULL);
+       gtk_container_border_width (GTK_CONTAINER (frame), 5);
+       gtk_widget_show(frame);
+       label = gtk_label_new(_("About"));
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+       vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER(frame),vbox);
+       gtk_widget_show(vbox);
+
+       im = gdk_imlib_create_image_from_data((char *)logo, NULL, logo_width, logo_height);
+       gdk_imlib_render(im, logo_width, logo_height);
+       pixmap = gdk_imlib_move_image(im);
+       gdk_imlib_destroy_image(im);
+       
+       button=gtk_pixmap_new(pixmap, NULL);
+       gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0);
+       gtk_widget_show (button);
+
+       sprintf(buf, _("GQview %s\n\nCopyright (c) 1999 by John Ellis\nhttp://gqview.netpedia.net\ngqview@email.com\n\nReleased under the GNU Public License"), VERSION);
+       label = gtk_label_new(buf);
+       gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
+       gtk_widget_show (label);
+
+       gtk_notebook_set_page (GTK_NOTEBOOK(notebook), start_tab);
+       gtk_widget_show(notebook);
+
+       gtk_widget_show(configwindow);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * config/about window show (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void show_config_window()
+{
+       if (configwindow) return;
+       config_window_create(0);
+}
+
+void show_about_window()
+{
+       if (configwindow) return;
+       config_window_create(4);
+}
+
diff --git a/src/dnd.c b/src/dnd.c
new file mode 100644 (file)
index 0000000..b26c29e
--- /dev/null
+++ b/src/dnd.c
@@ -0,0 +1,441 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "image.h"
+
+enum {
+       TARGET_URI_LIST,
+       TARGET_TEXT_PLAIN
+};
+
+static GtkTargetEntry file_drag_types[] = {
+       { "text/uri-list", 0, TARGET_URI_LIST },
+       { "text/plain", 0, TARGET_TEXT_PLAIN }
+};
+static gint n_file_drag_types = 2;
+
+static GtkTargetEntry file_drop_types[] = {
+       { "text/uri-list", 0, TARGET_URI_LIST }
+};
+static gint n_file_drop_types = 1;
+
+static GList *get_uri_file_list(gchar *data);
+
+static void image_get_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                              gint x, gint y,
+                              GtkSelectionData *selection_data, guint info,
+                              guint time, gpointer data);
+static void image_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                             GtkSelectionData *selection_data, guint info,
+                             guint time, gpointer data);
+static void image_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data);
+
+static void file_list_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                             GtkSelectionData *selection_data, guint info,
+                             guint time, gpointer data);
+static void file_list_drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer data);
+static void file_list_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data);
+
+static void dir_list_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                             GtkSelectionData *selection_data, guint info,
+                             guint time, gpointer data);
+static void dir_clist_set_highlight(gint set);
+static void dir_list_drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer data);
+static void dir_list_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data);
+
+static GList *get_uri_file_list(gchar *data)
+{
+       GList *list = NULL;
+       gint b, e;
+
+       b = e = 0;
+
+       while (data[b] != '\0')
+               {
+               while (data[e] != '\r' && data[e] != '\n' && data[e] != '\0') e++;
+               if (!strncmp(data + b, "file:", 5))
+                       {
+                       b += 5;
+                       list = g_list_append(list, g_strndup(data + b, e - b));
+                       }
+               while (data[e] == '\r' || data[e] == '\n') e++;
+               b = e;
+               }
+
+       return list;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image drag and drop routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void image_get_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                              gint x, gint y,
+                              GtkSelectionData *selection_data, guint info,
+                              guint time, gpointer data)
+{
+       ImageWindow *imd = data;
+
+       if (info == TARGET_URI_LIST)
+               {
+               GList *list = get_uri_file_list(selection_data->data);
+               if (list)
+                       {
+                       gchar *path;
+
+                       path = list->data;
+
+                       if (imd == normal_image)
+                               {
+                               if (isfile(path))
+                                       {
+                                       gint row;
+                                       gchar *dir = remove_level_from_path(path);
+                                       if (strcmp(dir, current_path) != 0)
+                                               filelist_change_to(dir);
+                                       g_free(dir);
+       
+                                       row = find_file_in_list(path);
+                                       if (row == -1)
+                                               image_change_to(path);
+                                       else
+                                               file_image_change_to(row);
+                                       }
+                               else if (isdir(path))
+                                       {
+                                       filelist_change_to(path);
+                                       image_change_to(NULL);
+                                       }
+                               }
+                       else
+                               {
+                               if (isfile(path))
+                                       {
+                                       image_area_set_image(imd, path, get_default_zoom(imd));
+                                       }
+                               }
+
+                       if (debug)
+                               {
+                               GList *work = list;
+                               while (work)
+                                       {
+                                       printf("dropped: %s\n", (gchar *)(work->data));
+                                       work = work->next;
+                                       }
+                               }
+
+                       g_list_foreach(list, (GFunc)g_free, NULL);
+                       g_list_free(list);
+                       }
+               }
+}
+
+static void image_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                              GtkSelectionData *selection_data, guint info,
+                              guint time, gpointer data)
+{
+       ImageWindow *imd = data;
+       gchar *path = image_area_get_path(imd);
+
+       if (path)
+               {
+               gchar *text = NULL;
+               switch (info)
+                       {
+                       case TARGET_URI_LIST:
+                               text = g_strconcat("file:", path, "\r\n", NULL);
+                               break;
+                       case TARGET_TEXT_PLAIN:
+                               text = g_strdup(path);
+                               break;
+                       }
+               if (text)
+                       {
+                       gtk_selection_data_set (selection_data, selection_data->target,
+                                               8, text, strlen(text));
+                       g_free(text);
+                       }
+               }
+       else
+               {
+               gtk_selection_data_set (selection_data, selection_data->target,
+                                       8, NULL, 0);
+               }
+}
+
+static void image_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       ImageWindow *imd = data;
+       if (context->action == GDK_ACTION_MOVE)
+               {
+               gint row = find_file_in_list(image_area_get_path(imd));
+               if (row < 0) return;
+               if (image_get_path() && strcmp(image_get_path(), image_area_get_path(imd)) == 0)
+                       {
+                       if (row < file_count() - 1)
+                               {
+                               file_next_image();
+                               }
+                       else
+                               {
+                               file_prev_image();
+                               }
+                       }
+               filelist_refresh();
+               }
+}
+
+void image_dnd_init(ImageWindow *imd)
+{
+       gtk_drag_source_set(imd->viewport, GDK_BUTTON2_MASK,
+                               file_drag_types, n_file_drag_types, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+       gtk_signal_connect(GTK_OBJECT(imd->viewport), "drag_data_get",
+                               image_set_dnd_data, imd);
+       gtk_signal_connect(GTK_OBJECT(imd->viewport), "drag_end",
+                               image_drag_end, imd);
+
+       gtk_drag_dest_set(imd->viewport,
+                         GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
+                         file_drop_types, n_file_drop_types,
+                          GDK_ACTION_COPY);
+       gtk_signal_connect(GTK_OBJECT(imd->viewport), "drag_data_received",
+                               image_get_dnd_data, imd);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file list drag and drop routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void file_list_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                             GtkSelectionData *selection_data, guint info,
+                             guint time, gpointer data)
+{
+       gchar *uri_text = NULL;
+       gchar *leader = "file:";
+       gchar *sep = "\r\n";
+       gint total;
+       gint leader_l;
+       gint sep_l = strlen(sep);
+       gchar *ptr;
+
+       switch (info)
+               {
+               case TARGET_URI_LIST:
+                       leader_l = strlen(leader);
+                       break;
+               case TARGET_TEXT_PLAIN:
+                       leader_l = 0;
+                       break;
+               default:
+                       return;
+                       break;
+               }
+       
+       if (file_clicked_is_selected())
+               {
+               GList *list;
+               GList *work;
+
+               list = file_get_selected_list();
+               if (!list) return;
+               work = list;
+               total = 0;
+
+               /* compute length */
+
+               while (work)
+                       {
+                       gchar *name = work->data;
+                       total += leader_l + strlen(name) + sep_l;
+                       work = work->next;
+                       }
+
+               /* create list */
+               uri_text = g_malloc(total + 1);
+               ptr = uri_text;
+
+               work = list;
+               while (work)
+                       {
+                       gchar *name = work->data;
+                       if (leader_l > 0)
+                               {
+                               strcpy(ptr, leader);
+                               ptr += leader_l;
+                               }
+                       strcpy(ptr, name);
+                       ptr += strlen(name);
+                       strcpy(ptr, sep);
+                       ptr += sep_l;
+                       work = work->next;
+                       }
+               ptr[0] = '\0';
+               free_selected_list(list);
+               }
+       else
+               {
+               gchar *path = file_clicked_get_path();
+               if (!path) return;
+               switch (info)
+                       {
+                       case TARGET_URI_LIST:
+                               uri_text = g_strconcat("file:", path, "\r\n", NULL);
+                               break;
+                       case TARGET_TEXT_PLAIN:
+                               uri_text = g_strdup(path);
+                               break;
+                       }
+               total = strlen(uri_text);
+               g_free(path);
+               }
+
+       if (debug) printf(uri_text);
+
+       gtk_selection_data_set (selection_data, selection_data->target,
+                                       8, uri_text, total);
+       g_free(uri_text);
+
+       file_clist_highlight_unset();
+}
+
+static void file_list_drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       file_clist_highlight_set();
+}
+
+static void file_list_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       file_clist_highlight_unset();
+
+       if (context->action == GDK_ACTION_MOVE)
+               {
+               filelist_refresh();
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * directory list drag and drop routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void dir_list_set_dnd_data(GtkWidget *widget, GdkDragContext *context,
+                             GtkSelectionData *selection_data, guint info,
+                             guint time, gpointer data)
+{
+       gint row = GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(dir_clist)));
+
+       if (row >= 0)
+               {
+               gchar *name = gtk_clist_get_row_data(GTK_CLIST(dir_clist), row);
+               gchar *new_path;
+               gchar *text = NULL;
+
+               if (strcmp(name, ".") == 0)
+                       new_path = g_strdup(current_path);
+               else if (strcmp(name, "..") == 0)
+                       new_path = remove_level_from_path(current_path);
+               else
+                       {
+                       if (strcmp(current_path, "/") == 0)
+                               new_path = g_strconcat(current_path, name, NULL);
+                       else
+                               new_path = g_strconcat(current_path, "/", name, NULL);
+                       }
+
+               
+               switch (info)
+                       {
+                       case TARGET_URI_LIST:
+                               text = g_strconcat("file:", new_path, "\r\n", NULL);
+                               break;
+                       case TARGET_TEXT_PLAIN:
+                               text = g_strdup(new_path);
+                               break;
+                       }
+               if (text)
+                       {
+                       gtk_selection_data_set (selection_data, selection_data->target,
+                                       8, text, strlen(text));
+                       g_free(text);
+                       }
+               g_free(new_path);
+               }
+}
+
+static void dir_clist_set_highlight(gint set)
+{
+       gint row = GPOINTER_TO_INT(gtk_object_get_user_data(GTK_OBJECT(dir_clist)));
+       if (set)
+               {
+               gtk_clist_set_background(GTK_CLIST(dir_clist), row,
+                       &GTK_WIDGET (dir_clist)->style->bg[GTK_STATE_SELECTED]);
+               gtk_clist_set_foreground(GTK_CLIST(dir_clist), row,
+                       &GTK_WIDGET (dir_clist)->style->fg[GTK_STATE_SELECTED]);
+               }
+       else
+               {
+               gtk_clist_set_background(GTK_CLIST(dir_clist), row, NULL);
+               gtk_clist_set_foreground(GTK_CLIST(dir_clist), row, NULL);
+               }
+}
+
+static void dir_list_drag_begin(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       dir_clist_set_highlight(TRUE);
+}
+
+static void dir_list_drag_end(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       dir_clist_set_highlight(FALSE);
+
+       if (context->action == GDK_ACTION_MOVE)
+               {
+               filelist_refresh();
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * drag and drop initialization (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void init_dnd()
+{
+       /* dir clist */
+       gtk_drag_source_set(dir_clist, GDK_BUTTON2_MASK,
+                               file_drag_types, n_file_drag_types, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+       gtk_signal_connect(GTK_OBJECT(dir_clist), "drag_begin",
+                               dir_list_drag_begin, NULL);
+       gtk_signal_connect(GTK_OBJECT(dir_clist), "drag_data_get",
+                               dir_list_set_dnd_data, NULL);
+       gtk_signal_connect(GTK_OBJECT(dir_clist), "drag_end",
+                               dir_list_drag_end, NULL);
+
+       /* file clist */
+       gtk_drag_source_set(file_clist, GDK_BUTTON2_MASK,
+                               file_drag_types, n_file_drag_types, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK);
+       gtk_signal_connect(GTK_OBJECT(file_clist), "drag_begin",
+                               file_list_drag_begin, NULL);
+       gtk_signal_connect(GTK_OBJECT(file_clist), "drag_data_get",
+                               file_list_set_dnd_data, NULL);
+       gtk_signal_connect(GTK_OBJECT(file_clist), "drag_end",
+                               file_list_drag_end, NULL);
+
+       /* image */
+       image_dnd_init(main_image);
+}
+
+
diff --git a/src/filelist.c b/src/filelist.c
new file mode 100644 (file)
index 0000000..a203f39
--- /dev/null
@@ -0,0 +1,1074 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+static gint filelist_click_row = -1;
+
+static void update_progressbar(gfloat val);
+
+static gint file_is_hidden(gchar *name);
+static gint file_is_in_filter(gchar *name);
+static void add_to_filter(gchar *text, gint add);
+
+static gint sort_list_cb(void *a, void *b);
+static void filelist_read(gchar *path);
+
+static gint file_find_closest_unaccounted(gint row, gint count, GList *ignore_list);
+
+static void history_menu_select_cb(GtkWidget *widget, gpointer data);
+static gchar *truncate_hist_text(gchar *t, gint l);
+static void filelist_set_history(gchar *path);
+
+/*
+ *-----------------------------------------------------------------------------
+ * file status information (private)
+ *-----------------------------------------------------------------------------
+ */
+
+static void update_progressbar(gfloat val)
+{
+       gtk_progress_bar_update (GTK_PROGRESS_BAR(info_progress_bar), val);
+}
+
+void update_status_label(gchar *text)
+{
+       gchar *buf;
+       gint count;
+       gchar *ss = "";
+
+       if (text)
+               {
+               gtk_label_set(GTK_LABEL(info_status), text);
+               return;
+               }
+
+       if (slideshow_is_running()) ss = _(" Slideshow");
+
+       count = file_selection_count();
+       if (count > 0)
+               buf = g_strdup_printf(_("%d files (%d)%s"), file_count(), count, ss);
+       else
+               buf = g_strdup_printf(_("%d files%s"), file_count(), ss);
+
+       gtk_label_set(GTK_LABEL(info_status), buf);
+       g_free(buf);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file filtering
+ *-----------------------------------------------------------------------------
+ */
+
+static gint file_is_hidden(gchar *name)
+{
+       if (name[0] != '.') return FALSE;
+       if (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')) return FALSE;
+       return TRUE;
+}
+
+static gint file_is_in_filter(gchar *name)
+{
+       GList *work;
+       if (!filename_filter || file_filter_disable) return TRUE;
+
+       work = filename_filter;
+       while (work)
+               {
+               gchar *filter = work->data;
+               gint lf = strlen(filter);
+               gint ln = strlen(name);
+               if (ln >= lf)
+                       {
+                       if (strncasecmp(name + ln - lf, filter, lf) == 0) return TRUE;
+                       }
+               work = work->next;
+               }
+
+       return FALSE;
+}
+
+static void add_to_filter(gchar *text, gint add)
+{
+       if (add) filename_filter = g_list_append(filename_filter, g_strdup(text));
+}
+
+void rebuild_file_filter()
+{
+       if (filename_filter)
+               {
+               g_list_foreach(filename_filter,(GFunc)g_free,NULL);
+               g_list_free(filename_filter);
+               filename_filter = NULL;
+               }
+
+       add_to_filter(".jpg", filter_include_jpg);
+       add_to_filter(".jpeg", filter_include_jpg);
+       add_to_filter(".xpm", filter_include_xpm);
+       add_to_filter(".tif", filter_include_tif);
+       add_to_filter(".tiff", filter_include_tif);
+       add_to_filter(".gif", filter_include_gif);
+       add_to_filter(".png", filter_include_png);
+       add_to_filter(".ppm", filter_include_ppm);
+       add_to_filter(".pgm", filter_include_pgm);
+       add_to_filter(".pcx", filter_include_pcx);
+       add_to_filter(".bmp", filter_include_bmp);
+
+       if (custom_filter)
+               {
+               gchar *buf = g_strdup(custom_filter);
+               gchar *pos_ptr_b;
+               gchar *pos_ptr_e = custom_filter;
+               while(pos_ptr_e[0] != '\0')
+                       {
+                       pos_ptr_b = pos_ptr_e;
+                       while (pos_ptr_e[0] != ';' && pos_ptr_e[0] != '\0') pos_ptr_e++;
+                       if (pos_ptr_e[0] == ';')
+                               {
+                               pos_ptr_e[0] = '\0';
+                               pos_ptr_e++;
+                               }
+                       add_to_filter(pos_ptr_b, TRUE);
+                       }
+               g_free(buf);
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * load file list (private)
+ *-----------------------------------------------------------------------------
+ */
+
+static gint sort_list_cb(void *a, void *b)
+{
+       return strcmp((gchar *)a, (gchar *)b);
+}
+
+static void filelist_read(gchar *path)
+{
+       DIR *dp;
+       struct dirent *dir;
+       struct stat ent_sbuf;
+
+       if((dp = opendir(path))==NULL)
+               {
+               /* dir not found */
+               return;
+               }
+       
+       g_list_foreach(dir_list,(GFunc)g_free,NULL);
+       g_list_free(dir_list);
+       dir_list = NULL;
+
+       g_list_foreach(file_list,(GFunc)g_free,NULL);
+       g_list_free(file_list);
+       file_list = NULL;
+
+       while ((dir = readdir(dp)) != NULL)
+               {
+               /* skips removed files */
+               if (dir->d_ino > 0)
+                       {
+                       gchar *name = dir->d_name;
+                       if (show_dot_files || !file_is_hidden(name))
+                               {
+                               gchar *filepath = g_strconcat(path, "/", name, NULL);
+                               if (stat(filepath,&ent_sbuf) >= 0 && S_ISDIR(ent_sbuf.st_mode))
+                                       {
+                                       dir_list = g_list_prepend(dir_list, g_strdup(name));
+                                       }
+                               else
+                                       {
+                                       if (file_is_in_filter(name))
+                                               file_list = g_list_prepend(file_list, g_strdup(name));
+                                       }
+                               g_free(filepath);
+                               }
+                       }
+               }
+
+       closedir(dp);
+
+       dir_list = g_list_sort(dir_list, (GCompareFunc) sort_list_cb);
+       file_list = g_list_sort(file_list, (GCompareFunc) sort_list_cb);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file list utilities to retrieve information (public)
+ *-----------------------------------------------------------------------------
+ */
+
+gint file_count()
+{
+       return g_list_length(file_list);
+}
+
+gint file_selection_count()
+{
+       gint count = 0;
+       GList *work = GTK_CLIST(file_clist)->selection;
+       while(work)
+               {
+               count++;
+               if (debug) printf("s = %d\n", GPOINTER_TO_INT(work->data));
+               work = work->next;
+               }
+
+       if (debug) printf("files selected = %d\n", count);
+
+       return count;
+}
+
+gint find_file_in_list(gchar *path)
+{
+       GList *work = file_list;
+       gchar *buf;
+       gchar *name;
+       gint count = -1;
+
+       if (!path) return -1;
+
+       buf = remove_level_from_path(path);
+       if (strcmp(buf, current_path) != 0)
+               {
+               g_free(buf);
+               return -1;
+               }
+       g_free(buf);
+
+       name = filename_from_path(path);
+       while(work)
+               {
+               count++;
+               if (strcmp(name, work->data) == 0) return count;
+               work = work->next;
+               }
+
+       return -1;
+}
+
+gchar *file_get_path(gint row)
+{
+       gchar *path = NULL;
+       gchar *name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
+
+       if (name) path = g_strconcat(current_path, "/", name, NULL);
+
+       return path;
+}
+
+gint file_is_selected(gint row)
+{
+       GList *work = GTK_CLIST(file_clist)->selection;
+
+       while(work)
+               {
+               if (GPOINTER_TO_INT(work->data) == row) return TRUE;
+               work = work->next;
+               }
+
+       return FALSE;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * utilities to retrieve list of selected files (public)
+ *-----------------------------------------------------------------------------
+ */
+
+GList *file_get_selected_list()
+{
+       GList *list = NULL;
+       GList *work = GTK_CLIST(file_clist)->selection;
+
+       while(work)
+               {
+               gchar *name = gtk_clist_get_row_data(GTK_CLIST(file_clist),
+                       GPOINTER_TO_INT(work->data));
+               list = g_list_prepend(list, g_strconcat(current_path, "/", name, NULL));
+               work = work->next;
+               }
+
+       list = g_list_reverse(list);
+
+       return list;
+}
+
+void free_selected_list(GList *list)
+{
+       g_list_foreach(list, (GFunc)g_free, NULL);
+       g_list_free(list);
+}
+
+gint file_clicked_is_selected()
+{
+       return file_is_selected(filelist_click_row);
+}
+
+gchar *file_clicked_get_path()
+{
+       return file_get_path(filelist_click_row);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image change routines
+ *-----------------------------------------------------------------------------
+ */
+
+void file_image_change_to(gint row)
+{
+       gtk_clist_unselect_all(GTK_CLIST(file_clist));
+       gtk_clist_select_row(GTK_CLIST(file_clist), row, -1);
+       if (gtk_clist_row_is_visible(GTK_CLIST(file_clist), row) != GTK_VISIBILITY_FULL)
+               {
+               gtk_clist_moveto(GTK_CLIST(file_clist), row, -1, 0.5, 0.0);
+               }
+}
+
+void file_next_image()
+{
+       gint current = find_file_in_list(image_get_path());
+       gint total = file_count();
+
+       if (current >= 0)
+               {
+               if (current < total - 1)
+                       {
+                       file_image_change_to(current + 1);
+                       }
+               }
+       else
+               {
+               file_image_change_to(0);
+               }
+}
+
+void file_prev_image()
+{
+       gint current = find_file_in_list(image_get_path());
+
+       if (current >= 0)
+               {
+               if (current > 0)
+                       {
+                       file_image_change_to(current - 1);
+                       }
+               }
+       else
+               {
+               file_image_change_to(file_count() - 1);
+               }
+}
+
+void file_first_image()
+{
+       gint current = find_file_in_list(image_get_path());
+       if (current != 0 && file_count() > 0)
+               {
+               file_image_change_to(0);
+               }
+}
+
+void file_last_image()
+{
+       gint current = find_file_in_list(image_get_path());
+       gint count = file_count();
+       if (current != count - 1 && count > 0)
+               {
+               file_image_change_to(count - 1);
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file delete/rename update routines
+ *-----------------------------------------------------------------------------
+ */
+
+static gint file_find_closest_unaccounted(gint row, gint count, GList *ignore_list)
+{
+       GList *list = NULL;
+       GList *work;
+       gint rev = row - 1;
+       row ++;
+
+       work = ignore_list;
+       while(work)
+               {
+               gint f = find_file_in_list(work->data);
+               if (f >= 0) list = g_list_append(list, GINT_TO_POINTER(f));
+               work = work->next;
+               }
+
+       while(list)
+               {
+               gint c = TRUE;
+               work = list;
+               while(work && c)
+                       {
+                       gpointer p = work->data;
+                       work = work->next;
+                       if (row == GPOINTER_TO_INT(p))
+                               {
+                               row++;
+                               c = FALSE;
+                               }
+                       if (rev == GPOINTER_TO_INT(p))
+                               {
+                               rev--;
+                               c = FALSE;
+                               }
+                       if (!c) list = g_list_remove(list, p);
+                       }
+               if (c && list)
+                       {
+                       g_list_free(list);
+                       list = NULL;
+                       }
+               }
+       if (row > count - 1)
+               {
+               if (rev < 0)
+                       return -1;
+               else
+                       return rev;
+               }
+       else
+               {
+               return row;
+               }
+}
+
+void file_is_gone(gchar *path, GList *ignore_list)
+{
+       GList *list;
+       gchar *name;
+       gint row;
+       gint new_row = -1;
+       row = find_file_in_list(path);
+       if (row < 0) return;
+
+       if (file_is_selected(row) /* && file_selection_count() == 1 */)
+               {
+               gint n = file_count();
+               if (ignore_list)
+                       {
+                       new_row = file_find_closest_unaccounted(row, n, ignore_list);
+                       if (debug) printf("row = %d, closest is %d\n", row, new_row);
+                       }
+               else
+                       {
+                       if (row + 1 < n)
+                               {
+                               new_row = row + 1;
+                               }
+                       else if (row > 0)
+                               {
+                               new_row = row - 1;
+                               }
+                       }
+               gtk_clist_unselect_all(GTK_CLIST(file_clist));
+               if (new_row >= 0)
+                       {
+                       gtk_clist_select_row(GTK_CLIST(file_clist), new_row, -1);
+                       file_image_change_to(new_row);
+                       }
+               else
+                       {
+                       image_change_to(NULL);
+                       }
+               }
+
+       gtk_clist_remove(GTK_CLIST(file_clist), row);
+       list = g_list_nth(file_list, row);
+       name = list->data;
+       file_list = g_list_remove(file_list, name);
+       g_free(name);
+       update_status_label(NULL);
+}
+
+void file_is_renamed(gchar *source, gchar *dest)
+{
+       gint row;
+       gchar *source_base;
+       gchar *dest_base;
+
+       if (image_get_path() && !strcmp(source, image_get_path()))
+               {
+               image_set_path(dest);
+               }
+
+       row = find_file_in_list(source);
+       if (row < 0) return;
+
+       source_base = remove_level_from_path(source);
+       dest_base = remove_level_from_path(dest);
+
+       if (strcmp(source_base, dest_base) == 0)
+               {
+               gchar *name;
+               gint n;
+               GList *work = g_list_nth(file_list, row);
+               name = work->data;
+               file_list = g_list_remove(file_list, name);
+               g_free(name);
+               name = g_strdup(filename_from_path(dest));
+               file_list = g_list_insert_sorted(file_list, name, (GCompareFunc) sort_list_cb);
+               n = g_list_index(file_list, name);
+
+               if (gtk_clist_get_cell_type(GTK_CLIST(file_clist), row, 0) != GTK_CELL_PIXTEXT)
+                       {
+                       gtk_clist_set_text (GTK_CLIST(file_clist), row, 0, name);
+                       }
+               else
+                       {
+                       guint8 spacing = 0;
+                       GdkPixmap *pixmap = NULL;
+                       GdkBitmap *mask = NULL;
+                       gtk_clist_get_pixtext(GTK_CLIST(file_clist), row, 0,
+                               NULL, &spacing, &pixmap, &mask);
+                       gtk_clist_set_pixtext(GTK_CLIST(file_clist), row, 0,
+                               name, spacing, pixmap, mask);
+                       }
+
+               gtk_clist_set_row_data(GTK_CLIST(file_clist), row, name);
+               gtk_clist_row_move(GTK_CLIST(file_clist), row, n);
+               }
+       else
+               {
+               GList *work = g_list_nth(file_list, row);
+               gchar *name = work->data;
+               file_list = g_list_remove(file_list, name);
+               gtk_clist_remove(GTK_CLIST(file_clist), row);
+               g_free(name);
+               update_status_label(NULL);
+               }
+
+       g_free(source_base);
+       g_free(dest_base);
+       
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * directory list callbacks
+ *-----------------------------------------------------------------------------
+ */
+
+void dir_select_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data)
+{
+       gchar *name;
+       gchar *new_path;
+       name = gtk_clist_get_row_data (GTK_CLIST(dir_clist), row);
+       if (strcmp(name, ".") == 0)
+               {
+               new_path = g_strdup(current_path);
+               }
+       else if (strcmp(name, "..") == 0)
+               {
+               new_path = remove_level_from_path(current_path);
+               }
+       else
+               {
+               if (strcmp(current_path, "/") == 0)
+                       new_path = g_strconcat(current_path, name, NULL);
+               else
+                       new_path = g_strconcat(current_path, "/", name, NULL);
+               }
+       filelist_change_to(new_path);
+       g_free(new_path);
+}
+
+void dir_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
+       gint row = -1;
+       gint col = -1;
+
+       gtk_clist_get_selection_info (GTK_CLIST (widget), bevent->x, bevent->y, &row, &col);
+
+       if (bevent->button == 2)
+               {
+               gtk_object_set_user_data(GTK_OBJECT(dir_clist), GINT_TO_POINTER(row));
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file list callbacks
+ *-----------------------------------------------------------------------------
+ */
+
+void file_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
+       gint row = -1;
+       gint col = -1;
+
+       gtk_clist_get_selection_info (GTK_CLIST (widget), bevent->x, bevent->y, &row, &col);
+       if (row == -1 || col == -1)
+               {
+               filelist_click_row = -1;
+               return;
+               }
+
+       filelist_click_row = row;
+
+       if (bevent->button == 3)
+               {
+               file_clist_highlight_set();
+               gtk_menu_popup (GTK_MENU(menu_file_popup), NULL, NULL, NULL, NULL,
+                               bevent->button, bevent->time);
+               }
+}
+
+void file_select_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data)
+{
+       gchar *name;
+       gchar *path;
+
+       if (file_selection_count() != 1)
+               {
+               update_status_label(NULL);
+               return;
+               }
+
+       name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
+       path = g_strconcat(current_path, "/", name, NULL);
+       image_change_to(path);
+       update_status_label(NULL);
+       g_free(path);
+}
+
+void file_unselect_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data)
+{
+#if 0
+       gchar *name;
+       gchar *path;
+
+       name = gtk_clist_get_row_data(GTK_CLIST(file_clist), row);
+       path = g_strconcat(current_path, "/", name, NULL);
+
+       if (strcmp(path, image_get_path()) == 0)
+               {
+               if (file_selection_count() > 0 && !file_is_selected(find_file_in_list(image_get_path())) )
+                       {
+                       gint new_row = GPOINTER_TO_INT(GTK_CLIST(file_clist)->selection->data);
+                       gchar *new_name = gtk_clist_get_row_data(GTK_CLIST(file_clist), new_row);
+                       gchar *new_path = g_strconcat(current_path, "/", new_name, NULL);
+                       image_change_to(new_path);
+                       g_free(new_path);
+                       }
+               }
+       g_free(path);
+#endif
+       update_status_label(NULL);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file list highlight utils
+ *-----------------------------------------------------------------------------
+ */
+
+void file_clist_highlight_set()
+{
+       if (file_clicked_is_selected()) return;
+
+       gtk_clist_set_background(GTK_CLIST(file_clist), filelist_click_row,
+               &GTK_WIDGET (file_clist)->style->bg[GTK_STATE_PRELIGHT]);
+       gtk_clist_set_foreground(GTK_CLIST(file_clist), filelist_click_row,
+               &GTK_WIDGET (file_clist)->style->fg[GTK_STATE_PRELIGHT]);
+}
+
+void file_clist_highlight_unset()
+{
+       if (file_clicked_is_selected()) return;
+
+       gtk_clist_set_background(GTK_CLIST(file_clist), filelist_click_row, NULL);
+       gtk_clist_set_foreground(GTK_CLIST(file_clist), filelist_click_row, NULL);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * path entry and history menu
+ *-----------------------------------------------------------------------------
+ */
+
+void path_entry_cb(gchar *newdir, gpointer data)
+{
+       gchar *new_path = g_strdup(newdir);
+       parse_out_relatives(new_path);
+       if (isdir(new_path))
+               filelist_change_to(new_path);
+       else if (isfile(new_path))
+               {
+               gchar *path = remove_level_from_path(new_path);
+               filelist_change_to(path);
+               g_free(path);
+               image_change_to(new_path);
+               }
+       g_free(new_path);
+}
+
+static void history_menu_select_cb(GtkWidget *widget, gpointer data)
+{
+       gchar *new_path = data;
+       filelist_change_to(new_path);
+}
+
+static gchar *truncate_hist_text(gchar *t, gint l)
+{
+       gchar *tp;
+       gchar *tbuf;
+       if (l >= strlen(t)) return g_strdup(t);
+       tp = t + strlen(t) - l;
+       while (tp[0] != '/' && tp < t + strlen(t)) tp++;
+                /* this checks to see if directory name is longer than l, if so
+                 * reset the length of name to l, it's better to have a partial
+                 * name than no name at all.
+                */
+       if (tp >= t + strlen(t)) tp = t + strlen(t) - l;
+       tbuf = g_strconcat("/...", tp, NULL);
+       return tbuf;
+}
+
+static void filelist_set_history(gchar *path)
+{
+       static GList *history_list = NULL;
+       gchar *buf;
+       gchar *buf_ptr;
+       GtkWidget *menu;
+       GtkWidget *item;
+
+       if (!path) return;
+
+       gtk_entry_set_text(GTK_ENTRY(path_entry), current_path);
+
+       if (history_list)
+                {
+                g_list_foreach(history_list, (GFunc)g_free, NULL);
+                g_list_free(history_list);
+                history_list = NULL;
+                }
+
+       menu = gtk_menu_new();
+
+       buf = g_strdup(path);
+       buf_ptr = buf + strlen(buf) - 1 ;
+       while (buf_ptr > buf)
+               {
+               gchar *full_path;
+               gchar *truncated;
+               truncated = truncate_hist_text(buf, 32);
+
+               full_path = g_strdup(buf);
+               history_list = g_list_append(history_list, full_path);
+
+               item = gtk_menu_item_new_with_label (truncated);
+               gtk_signal_connect (GTK_OBJECT (item), "activate",
+                       (GtkSignalFunc) history_menu_select_cb, full_path);
+
+               gtk_menu_append (GTK_MENU (menu), item);
+               gtk_widget_show (item);
+
+               g_free(truncated);
+
+               while (buf_ptr[0] != '/' && buf_ptr > buf) buf_ptr--;
+               buf_ptr[0] = '\0';
+               }
+       g_free(buf);
+
+       item = gtk_menu_item_new_with_label ("/");
+
+       gtk_signal_connect (GTK_OBJECT (item), "activate",
+               (GtkSignalFunc) history_menu_select_cb, "/");
+
+       gtk_menu_append (GTK_MENU (menu), item);
+       gtk_widget_show (item);
+
+       gtk_option_menu_set_menu(GTK_OPTION_MENU(history_menu), menu);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * list update routines (public)
+ *-----------------------------------------------------------------------------
+ */
+
+static gint thumbs_running = 0;
+
+void interrupt_thumbs()
+{
+        if (thumbs_running > 0) thumbs_running ++;
+}
+
+void filelist_populate_clist()
+{
+       GList *work;
+       gint width;
+       gint tmp_width;
+       gint row;
+       gchar *image_name = NULL;
+       gchar *buf;
+
+       gint row_p = 0;
+       gchar *text;
+       guint8 spacing;
+       GdkPixmap *nopixmap;
+       GdkBitmap *nomask;
+
+       interrupt_thumbs();
+
+       filelist_set_history(current_path);
+
+       gtk_clist_freeze (GTK_CLIST (dir_clist));
+       gtk_clist_clear (GTK_CLIST (dir_clist));
+
+       width = 0;
+       work = dir_list;
+       while(work)
+               {
+               gchar *buf[2];
+               buf[0] = work->data;
+               buf[1] = NULL;
+               row = gtk_clist_append(GTK_CLIST(dir_clist), buf);
+               gtk_clist_set_row_data (GTK_CLIST(dir_clist), row, work->data);
+               tmp_width = gdk_string_width(dir_clist->style->font, buf[0]);
+               if (tmp_width > width) width = tmp_width;
+               work = work->next;
+               }
+
+       gtk_clist_set_column_width(GTK_CLIST(dir_clist), 0, width);
+       gtk_clist_thaw(GTK_CLIST (dir_clist));
+
+       buf = remove_level_from_path(image_get_path());
+       if (buf && strcmp(buf, current_path) == 0)
+               {
+               image_name = image_get_name();
+               }
+       g_free(buf);
+
+       gtk_clist_freeze (GTK_CLIST (file_clist));
+
+       if (!thumbnails_enabled)
+               {
+               gtk_clist_set_row_height (GTK_CLIST(file_clist),
+                       GTK_WIDGET(file_clist)->style->font->ascent +
+                       GTK_WIDGET(file_clist)->style->font->descent + 1);
+               }
+       else
+               {
+               gtk_clist_set_row_height (GTK_CLIST(file_clist), thumb_max_height + 2);
+               maintain_thumbnail_dir(current_path, FALSE);
+               }
+
+       width = 0;
+       work = file_list;
+
+       while(work)
+               {
+               gint has_pixmap;
+               gint match;
+               gchar *name = work->data;
+               gint done = FALSE;
+
+               while (!done)
+                       {
+                       if (GTK_CLIST(file_clist)->rows > row_p)
+                               {
+                               if (gtk_clist_get_cell_type(GTK_CLIST(file_clist),row_p, 0) == GTK_CELL_PIXTEXT)
+                                       {
+                                       gtk_clist_get_pixtext(GTK_CLIST(file_clist), row_p, 0, &text, &spacing, &nopixmap, &nomask);
+                                       has_pixmap = TRUE;
+                                       }
+                               else
+                                       {
+                                       gtk_clist_get_text(GTK_CLIST(file_clist), row_p, 0, &text);
+                                       has_pixmap = FALSE;
+                                       }
+                               match = strcmp(name, text);
+                               }
+                       else
+                               {
+                               match = -1;
+                               }
+
+                       if (match < 0)
+                               {
+                               gchar *buf[2];
+                               buf[0] = name;
+                               buf[1] = NULL;
+                               row = gtk_clist_insert(GTK_CLIST(file_clist), row_p, buf);
+                               gtk_clist_set_row_data (GTK_CLIST(file_clist), row, name);
+                               if (thumbnails_enabled)
+                                       gtk_clist_set_shift(GTK_CLIST(file_clist), row, 0, 0, 5 + thumb_max_width);
+                               done = TRUE;
+                               if (image_name && strcmp(name, image_name) == 0)
+                                       gtk_clist_select_row(GTK_CLIST(file_clist), row, 0);
+                               }
+                       else if (match > 0)
+                               {
+                               gtk_clist_remove(GTK_CLIST(file_clist), row_p);
+                               }
+                       else
+                               {
+                               if (thumbnails_enabled && !has_pixmap)
+                                       gtk_clist_set_shift(GTK_CLIST(file_clist), row_p, 0, 0, 5 + thumb_max_width);
+                               if (!thumbnails_enabled/* && has_pixmap*/)
+                                       {
+                                       gtk_clist_set_text(GTK_CLIST(file_clist), row_p, 0, name);
+                                       gtk_clist_set_shift(GTK_CLIST(file_clist), row_p, 0, 0, 0);
+                                       }
+                               gtk_clist_set_row_data (GTK_CLIST(file_clist), row_p, name);
+                               done = TRUE;
+                               }
+                       }
+               row_p++;
+
+               if (thumbnails_enabled)
+                       tmp_width = gdk_string_width(file_clist->style->font, name) + thumb_max_width + 5;
+               else
+                       tmp_width = gdk_string_width(file_clist->style->font, name);
+               if (tmp_width > width) width = tmp_width;
+               work = work->next;
+               }
+
+       while (GTK_CLIST(file_clist)->rows > row_p)
+               gtk_clist_remove(GTK_CLIST(file_clist), row_p);
+
+       gtk_clist_set_column_width(GTK_CLIST(file_clist), 0, width);
+       gtk_clist_thaw(GTK_CLIST (file_clist));
+
+       if (thumbnails_enabled)
+               {
+               GList *done_list = NULL;
+               gint past_run;
+               gint finished = FALSE;
+               gint j;
+               gint count = 0;
+               update_status_label(_("Loading thumbs..."));
+
+               for (j = 0; j < GTK_CLIST(file_clist)->rows; j++)
+                       {
+                       done_list = g_list_prepend(done_list, GINT_TO_POINTER(FALSE));
+                       }
+
+               /* load thumbs */
+
+               while (!finished && done_list)
+                       {
+                       gint p = -1;
+                       gint r = -1;
+                       gint c = -1;
+                       gtk_clist_get_selection_info (GTK_CLIST(file_clist), 1, 1, &r, &c);
+                       if (r != -1)
+                               {
+                               work = g_list_nth(done_list, r);
+                               while (work)
+                                       {
+                                       if (gtk_clist_row_is_visible(GTK_CLIST(file_clist), r))
+                                               {
+                                               if (!GPOINTER_TO_INT(work->data))
+                                                       {
+                                                       work->data = GINT_TO_POINTER(TRUE);
+                                                       p = r;
+                                                       work = NULL;
+                                                       }
+                                               else
+                                                       {
+                                                       r++;
+                                                       work = work->next;
+                                                       }
+                                               }
+                                       else
+                                               {
+                                               work = NULL;
+                                               }
+                                       }
+                               }
+                       if (p == -1)
+                               {
+                               work = done_list;
+                               r = 0;
+                               while(work && p == -1)
+                                       {
+                                       if (!GPOINTER_TO_INT(work->data))
+                                               {
+                                               p = r;
+                                               work->data = GINT_TO_POINTER(TRUE);
+                                               }
+                                       else
+                                               {
+                                               r++;
+                                               work = work->next;
+                                               if (!work) finished = TRUE;
+                                               }
+                                       }
+                               }
+
+                       count++;
+
+                       if (!finished && gtk_clist_get_cell_type(GTK_CLIST(file_clist), p, 0) != GTK_CELL_PIXTEXT)
+                               {
+                               GdkPixmap *pixmap = NULL;
+                               GdkBitmap *mask = NULL;
+                               gchar *name;
+                               gchar *path;
+
+                               thumbs_running ++;
+                               past_run = thumbs_running;
+                               while(gtk_events_pending()) gtk_main_iteration();
+                               if (thumbs_running > past_run)
+                                       {
+                                       thumbs_running -= 2;
+                                       update_progressbar(0.0);
+                                       update_status_label(NULL);
+                                       g_list_free(done_list);
+                                       return;
+                                       }
+                               thumbs_running --;
+
+                               name = gtk_clist_get_row_data(GTK_CLIST(file_clist), p);
+                               path = g_strconcat (current_path, "/", name, NULL);
+                               spacing = create_thumbnail(path, &pixmap, &mask);
+                               g_free(path);
+                               gtk_clist_set_pixtext (GTK_CLIST(file_clist), p, 0, name, spacing + 5, pixmap, mask);
+                               gtk_clist_set_shift(GTK_CLIST(file_clist), p, 0, 0, 0);
+
+                               update_progressbar((gfloat)(count) / GTK_CLIST(file_clist)->rows);
+                               }
+                       }
+               update_progressbar(0.0);
+               g_list_free(done_list);
+               }
+
+       update_status_label(NULL);
+}
+
+void filelist_refresh()
+{
+       filelist_read(current_path);
+       filelist_populate_clist();
+       filelist_click_row = -1;
+}
+
+void filelist_change_to(gchar *path)
+{
+       if (!isdir(path)) return;
+
+       g_free(current_path);
+       current_path = g_strdup(path);
+
+       filelist_refresh();
+}
diff --git a/src/fileops.c b/src/fileops.c
new file mode 100644 (file)
index 0000000..8b6ba3c
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+/*
+ *-----------------------------------------------------------------------------
+ * generic file information and manipulation routines (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+/* first we try the HOME environment var, if that doesn't work, we try getpwuid(). */
+gchar *homedir()
+{
+       gchar *home = getenv("HOME");
+       if(home)
+               return home;
+       else
+               {
+               struct passwd *pw = getpwuid(getuid());
+               if (pw)
+                       return pw->pw_dir;
+               else
+                       return NULL ; /* now we've got a problem */
+               }
+}
+
+int isfile(char *s)
+{
+   struct stat st;
+   
+   if ((!s)||(!*s)) return 0;
+   if (stat(s,&st)<0) return 0;
+   if (S_ISREG(st.st_mode)) return 1;
+   return 0;
+}
+
+int isdir(char *s)
+{
+   struct stat st;
+   
+   if ((!s)||(!*s)) return 0;
+   if (stat(s,&st)<0) return 0;
+   if (S_ISDIR(st.st_mode)) return 1;
+   return 0;
+}
+
+int filesize(char *s)
+{
+   struct stat st;
+   
+   if ((!s)||(!*s)) return 0;
+   if (stat(s,&st)<0) return 0;
+   return (int)st.st_size;
+}
+
+time_t filetime(gchar *s)
+{
+        struct stat st;
+
+        if ((!s)||(!*s)) return 0;
+        if (stat(s,&st)<0) return 0;
+        return st.st_mtime;
+}
+
+int copy_file(char *s, char *t)
+{
+       FILE *fi, *fo;
+       char buf[4096];
+       int b;
+
+       fi = fopen(s, "rb");
+       if (!fi)
+               {
+               return FALSE;
+               }
+
+       fo = fopen(t, "wb");
+       if (!fo)
+               {
+               fclose(fi);
+               return FALSE;
+               }
+
+       while((b = fread(buf, sizeof(char), 4096, fi)) && b != 0)
+               {
+               if (fwrite(buf, sizeof(char), b, fo) != b)
+                       {
+                       fclose(fi);
+                       fclose(fo);
+                       return FALSE;
+                       }
+               }
+
+       fclose(fi);
+       fclose(fo);
+       return TRUE;
+}
+
+int move_file(char *s, char *t)
+{
+       if (rename (s, t) < 0)
+               {
+               /* this may have failed because moving a file across filesystems
+               was attempted, so try copy and delete instead */
+               if (copy_file(s, t))
+                       {
+                       if (unlink (s) < 0)
+                               {
+                               /* err, now we can't delete the source file so return FALSE */
+                               return FALSE;
+                               }
+                       }
+               else
+                       return FALSE;
+               }
+
+       return TRUE;
+}
+
+gchar *get_current_dir()
+{
+       char buf[512];
+       getcwd(buf, 510);
+       return g_strdup(buf);
+}
+
+
diff --git a/src/globals.c b/src/globals.c
new file mode 100644 (file)
index 0000000..a41cdb0
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "logo.h"
+
+/* image */
+ImageWindow *main_image = NULL;
+
+/* main window */
+GtkWidget *mainwindow;
+GtkWidget *mainwindow_hbox;
+GtkWidget *mainwindow_vbox;
+GtkAccelGroup *mainwindow_accel_grp;
+
+GtkWidget *info_box = NULL;
+GtkWidget *info_progress_bar;
+GtkWidget *info_status;
+GtkWidget *info_details;
+GtkWidget *info_zoom;
+
+/* full screen */
+ImageWindow *normal_image = NULL;
+ImageWindow *full_screen_image = NULL;
+GtkWidget *full_screen_window = NULL;
+
+/* tools floating window */
+GtkWidget *toolwindow = NULL;
+
+/* tools */
+GtkWidget *tool_vbox;
+
+GtkWidget *path_entry;
+GtkWidget *history_menu;
+
+GtkWidget *dir_clist;
+GtkWidget *file_clist;
+
+GtkWidget *menu_file;
+GtkWidget *menu_edit;
+GtkWidget *menu_view;
+GtkWidget *menu_help;
+GtkWidget *menu_file_popup;
+GtkWidget *menu_filelist_edit;
+GtkWidget *menu_image_popup;
+GtkWidget *menu_image_edit;
+GtkWidget *menu_window_full;
+GtkWidget *menu_window_full_edit;
+GtkWidget *menu_window_view;
+GtkWidget *menu_window_view_edit;
+
+GtkWidget *thumb_button;
+GtkWidget *thumb_menu_item;
+
+/* lists */
+GList *dir_list = NULL;
+GList *file_list = NULL;
+gchar *current_path = NULL;
+
+GList *filename_filter = NULL;
+
+/* -- options -- */
+gint main_window_w = 400;
+gint main_window_h = 350;
+gint main_window_x = 0;
+gint main_window_y = 0;
+
+gint float_window_w = 150;
+gint float_window_h = 350;
+gint float_window_x = 0;
+gint float_window_y = 0;
+
+gint save_window_positions = FALSE;
+gint tools_float = FALSE;
+gint tools_hidden = FALSE;
+gint progressive_key_scrolling = FALSE;
+
+gint startup_path_enable = FALSE;
+gchar *startup_path = NULL;
+gint confirm_delete = TRUE;
+gint restore_tool = FALSE;
+gint zoom_mode = ZOOM_RESET_ORIGINAL;
+gint fit_window = FALSE;
+gint limit_window_size = FALSE;
+gint max_window_size = 100;
+gint thumb_max_width = 64;
+gint thumb_max_height = 64;
+gint enable_thumb_caching = FALSE;
+gint use_xvpics_thumbnails = TRUE;
+gint show_dot_files = FALSE;
+gint file_filter_disable = FALSE;
+gint filter_include_jpg = TRUE;
+gint filter_include_xpm = TRUE;
+gint filter_include_tif = TRUE;
+gint filter_include_gif = TRUE;
+gint filter_include_png = TRUE;
+gint filter_include_ppm = TRUE;
+gint filter_include_pgm = TRUE;
+gint filter_include_pcx = TRUE;
+gint filter_include_bmp = TRUE;
+gchar *custom_filter = NULL;
+gchar *editor_name[8];
+gchar *editor_command[8];
+
+gint thumbnails_enabled = FALSE;
+
+gint slideshow_delay = 15;
+gint slideshow_random = FALSE;
+gint slideshow_repeat = FALSE;
+
+gint debug = FALSE;
+
+/* logo & misc images */
+
+
diff --git a/src/gqview.h b/src/gqview.h
new file mode 100644 (file)
index 0000000..1f8fee6
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "intl.h"
+
+/*
+ *-------------------------------------
+ * Standard library includes
+ *-------------------------------------
+ */
+
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+/*
+ *-------------------------------------
+ * includes for glib / gtk / imlib
+ *-------------------------------------
+ */
+
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <gdk_imlib.h>
+
+/*
+ *----------------------------------------------------------------------------
+ * defines
+ *----------------------------------------------------------------------------
+ */
+
+#define RC_FILE_NAME ".gqviewrc"
+#define RC_THUMB_DIR ".gqview_thmb"
+
+#define ZOOM_RESET_ORIGINAL 0
+#define ZOOM_RESET_FIT_WINDOW 1
+#define ZOOM_RESET_NONE 2
+
+typedef struct _ImageWindow ImageWindow;
+struct _ImageWindow
+{
+       GtkWidget *eventbox;
+       GtkWidget *table;
+       GtkWidget *viewport;
+       GtkWidget *image;
+
+       gchar *image_path;
+       gchar *image_name;
+
+       gint width;
+       gint height;
+       gint size;
+
+       gint old_width;
+       gint old_height;
+
+       gint unknown;
+       gint zoom;
+
+       GdkPixmap *image_pixmap;
+       GdkImlibImage *image_data;
+
+       gint in_drag;
+       gint drag_last_x;
+       gint drag_last_y;
+       gint drag_moved;
+
+       gint artificial_size;
+       gint new_img;
+
+       /* info, zoom labels & windows */
+
+       GtkWidget *top_window; /* window that gets title set to image filename */
+       GtkWidget *info_label; /* label set to show image h x w , size */
+       GtkWidget *zoom_label; /* label to display zoom */
+       gchar *title;          /* window title to display left of file name */
+       gint show_title_zoom;  /* option to include zoom in window title */
+
+       /* button functions */
+       void (*func_btn1)(ImageWindow *, GdkEventButton *, gpointer);
+       void (*func_btn2)(ImageWindow *, GdkEventButton *, gpointer);
+       void (*func_btn3)(ImageWindow *, GdkEventButton *, gpointer);
+
+       gpointer data_btn1;
+       gpointer data_btn2;
+       gpointer data_btn3;
+};
+
+/* image */
+extern ImageWindow *main_image;
+
+/* main window */
+extern GtkWidget *mainwindow;
+extern GtkWidget *mainwindow_hbox;
+extern GtkWidget *mainwindow_vbox;
+extern GtkAccelGroup *mainwindow_accel_grp;
+
+extern GtkWidget *info_box;
+extern GtkWidget *info_progress_bar;
+extern GtkWidget *info_status;
+extern GtkWidget *info_details;
+extern GtkWidget *info_zoom;
+
+/* full screen */
+extern ImageWindow *normal_image;
+extern ImageWindow *full_screen_image;
+extern GtkWidget *full_screen_window;
+
+/* tools floating window */
+extern GtkWidget *toolwindow;
+
+/* tools */
+extern GtkWidget *tool_vbox;
+
+extern GtkWidget *path_entry;
+extern GtkWidget *history_menu;
+
+extern GtkWidget *dir_clist;
+extern GtkWidget *file_clist;
+
+extern GtkWidget *menu_file;
+extern GtkWidget *menu_edit;
+extern GtkWidget *menu_view;
+extern GtkWidget *menu_help;
+extern GtkWidget *menu_file_popup;
+extern GtkWidget *menu_filelist_edit;
+extern GtkWidget *menu_image_popup;
+extern GtkWidget *menu_image_edit;
+extern GtkWidget *menu_window_full;
+extern GtkWidget *menu_window_full_edit;
+extern GtkWidget *menu_window_view;
+extern GtkWidget *menu_window_view_edit;
+
+extern GtkWidget *thumb_button;
+extern GtkWidget *thumb_menu_item;
+
+/* lists */
+extern GList *dir_list;
+extern GList *file_list;
+extern gchar *current_path;
+
+extern GList *filename_filter;
+
+/* -- options -- */
+extern gint main_window_w;
+extern gint main_window_h;
+extern gint main_window_x;
+extern gint main_window_y;
+
+extern gint float_window_w;
+extern gint float_window_h;
+extern gint float_window_x;
+extern gint float_window_y;
+
+extern gint save_window_positions;
+extern gint tools_float;
+extern gint tools_hidden;
+extern gint progressive_key_scrolling;
+
+extern gint startup_path_enable;
+extern gchar *startup_path;
+extern gint confirm_delete;
+extern gint restore_tool;
+extern gint zoom_mode;
+extern gint fit_window;
+extern gint limit_window_size;
+extern gint max_window_size;
+extern gint thumb_max_width;
+extern gint thumb_max_height;
+extern gint enable_thumb_caching;
+extern gint use_xvpics_thumbnails;
+extern gint show_dot_files;
+extern gint file_filter_disable;
+extern gint filter_include_jpg;
+extern gint filter_include_xpm;
+extern gint filter_include_tif;
+extern gint filter_include_gif;
+extern gint filter_include_png;
+extern gint filter_include_ppm;
+extern gint filter_include_pgm;
+extern gint filter_include_pcx;
+extern gint filter_include_bmp;
+extern gchar *custom_filter;
+extern gchar *editor_name[];
+extern gchar *editor_command[];
+
+extern gint thumbnails_enabled;
+
+extern gint slideshow_delay;   /* in seconds */
+extern gint slideshow_random;
+extern gint slideshow_repeat;
+
+extern gint debug;
+
+/* logo & misc images */
+extern const int logo_width;
+extern const int logo_height;
+extern const unsigned char logo[];
+
+/* -- functions -- */
+
+/* main.c */
+gchar *filename_from_path(char *t);
+gchar *remove_level_from_path(gchar *path);
+void parse_out_relatives(gchar *path);
+void start_editor_from_file(gint n, gchar *path);
+void start_editor_from_image(gint n);
+void start_editor_from_list(gint n);
+void keyboard_scroll_calc(gint *x, gint *y, GdkEventKey *event);
+gint key_press_cb(GtkWidget *widget, GdkEventKey *event);
+void exit_gqview();
+
+/* window.c */
+void toolwindow_float();
+void toolwindow_hide();
+void create_main_window();
+
+/* menu.c */
+void add_menu_popup_item(GtkWidget *menu, gchar *label,
+                        GtkSignalFunc func, gpointer data);
+void add_menu_divider(GtkWidget *menu);
+void update_edit_menus(GtkAccelGroup *accel_grp);
+GtkWidget *create_menu_bar(GtkAccelGroup *accel_grp);
+void create_menu_popups();
+GtkWidget *create_button_bar(GtkTooltips *tooltips);
+
+/* img-main.c */
+void full_screen_start();
+void full_screen_stop();
+void full_screen_toggle();
+void image_scroll(gint x, gint y);
+void image_adjust_zoom(gint increment);
+void image_set_zoom(gint zoom);
+void image_set_path(gchar *path);
+gchar *image_get_path();
+gchar *image_get_name();
+void image_change_to(gchar *path);
+void image_set_labels(GtkWidget *info, GtkWidget *zoom);
+GtkWidget *image_create();
+
+/* filelist.c */
+void update_status_label(gchar *text);
+void rebuild_file_filter();
+gint find_file_in_list(gchar *path);
+GList *file_get_selected_list();
+void free_selected_list(GList *list);
+gint file_clicked_is_selected();
+gchar *file_clicked_get_path();
+gint file_count();
+gint file_selection_count();
+gchar *file_get_path(gint row);
+gint file_is_selected(gint row);
+void file_image_change_to(gint row);
+void file_next_image();
+void file_prev_image();
+void file_first_image();
+void file_last_image();
+void file_is_gone(gchar *path, GList *ignore_list);
+void file_is_renamed(gchar *source, gchar *dest);
+void dir_select_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data);
+void dir_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+void file_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+void file_select_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data);
+void file_unselect_cb(GtkWidget *widget, gint row, gint col,
+                  GdkEvent *event, gpointer data);
+void file_clist_highlight_set();
+void file_clist_highlight_unset();
+void path_entry_cb(gchar *newdir, gpointer data);
+void interrupt_thumbs();
+void filelist_populate_clist();
+void filelist_refresh();
+void filelist_change_to(gchar *path);
+
+/* config.c */
+void show_config_window();
+void show_about_window();
+
+/* rcfile.c */
+void save_options();
+void load_options();
+
+/* tabcomp.c */
+GtkWidget *tab_completion_new_with_history(GtkWidget **entry, GtkWidget *window, gchar *text,
+                                          const gchar *history_key, gint max_levels,
+                                          void (*enter_func)(gchar *, gpointer), gpointer data);
+gchar *tab_completion_set_to_last_history(GtkWidget *entry);
+void tab_completion_append_to_history(GtkWidget *entry, gchar *path);
+
+GtkWidget *tab_completion_new(GtkWidget **entry, GtkWidget *window, gchar *text,
+                             void (*enter_func)(gchar *, gpointer), gpointer data);
+void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(gchar *, gpointer), gpointer data);
+void tab_completion_add_tab_func(GtkWidget *entry, void (*tab_func)(gchar *, gpointer), gpointer data);
+gchar *remove_trailing_slash(gchar *path);
+
+/* fileops.c */
+gchar *homedir();
+int isfile(char *s);
+int isdir(char *s);
+int filesize(char *s);
+time_t filetime(gchar *s);
+int copy_file(char *s, char *t);
+int move_file(char *s, char *t);
+gchar *get_current_dir();
+
+/* dnd.c */
+void image_dnd_init(ImageWindow *imd);
+void init_dnd();
+
+/* pathsel.c */
+GtkWidget *destination_widget_new(gchar *path, GtkWidget *entry);
+void destination_widget_sync_to_entry(GtkWidget *entry);
+
+#include "utildlg.h"
+
+/* utilops.c */
+void file_util_delete(gchar *source_path, GList *source_list);
+void file_util_move(gchar *source_path, GList *source_list, gchar *dest_path);
+void file_util_copy(gchar *source_path, GList *source_list, gchar *dest_path);
+void file_util_rename(gchar *source_path, GList *source_list);
+void file_util_create_dir(gchar *path);
+
+/* thumb.c */
+gint create_thumbnail(gchar *path, GdkPixmap **thumb_pixmap, GdkBitmap **thumb_mask);
+gint maintain_thumbnail_dir(gchar *dir, gint recursive);
+
+/* slideshow.c */
+void slideshow_start();
+void slideshow_stop();
+void slideshow_toggle();
+gint slideshow_is_running();
+
+/* img-view.c */
+void view_window_new(gchar *path);
+void view_window_active_edit(gint n);
+void create_menu_view_popup();
+
+
+
diff --git a/src/icons/.cvsignore b/src/icons/.cvsignore
new file mode 100644 (file)
index 0000000..3dda729
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile.in
+Makefile
diff --git a/src/icons/Makefile.am b/src/icons/Makefile.am
new file mode 100644 (file)
index 0000000..8b13875
--- /dev/null
@@ -0,0 +1,12 @@
+EXTRA_DIST = \
+       icon_config.xpm         \
+       icon_float.xpm          \
+       icon_home.xpm           \
+       icon_reload.xpm         \
+       icon_thumb.xpm          \
+       icon_zoom_fit.xpm       \
+       icon_zoom_in.xpm        \
+       icon_zoom_norm.xpm      \
+       icon_zoom_out.xpm       \
+       img_unknown.xpm
+
diff --git a/src/icons/icon_config.xpm b/src/icons/icon_config.xpm
new file mode 100644 (file)
index 0000000..427c868
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * icon_config_xpm[] = {
+"20 20 5 1",
+"      c None",
+".     c #000000000000",
+"X     c #CF3CCF3CCF3C",
+"o     c #79E77DF779E7",
+"O     c #FFFFFFFFFFFF",
+"                    ",
+"    ...             ",
+"    .XX.            ",
+"     .XX.           ",
+" ..   .X.o          ",
+" .X. .XX.o          ",
+" .XX.XXO.o          ",
+"  .XXOXXX.          ",
+"   ....XOX.         ",
+"    ooo.XOX.        ",
+"        .XOX....    ",
+"         .XXOXOX.   ",
+"          .XXX.XX.  ",
+"          .OX.o.X.o ",
+"          .X.oo ..o ",
+"          .XX.   oo ",
+"           .XX.     ",
+"            ...o    ",
+"             ooo    ",
+"                    "};
diff --git a/src/icons/icon_float.xpm b/src/icons/icon_float.xpm
new file mode 100644 (file)
index 0000000..ae27662
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * icon_float_xpm[] = {
+"10 20 5 1",
+"      c None",
+".     c #000000",
+"+     c #FFFFFF",
+"@     c #CFCFCF",
+"#     c #797D79",
+"          ",
+" .......  ",
+" .++@+@.# ",
+" .+@+@@.# ",
+"  .@@@.## ",
+"  .+@@.## ",
+"  .@@@.#  ",
+"  .+@@.#  ",
+" .++@@@.  ",
+".++@+@+@. ",
+".+@@@@@@.#",
+".........#",
+"  #.@.####",
+"   .+.#   ",
+"   .+.#   ",
+"   .+.#   ",
+"   .+.#   ",
+"    .##   ",
+"     #    ",
+"          "};
diff --git a/src/icons/icon_home.xpm b/src/icons/icon_home.xpm
new file mode 100644 (file)
index 0000000..7e3ed43
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * icon_home_xpm[] = {
+"20 20 7 1",
+"      c None",
+".     c #FFFF00000000",
+"X     c #79E700000000",
+"o     c #10402CB22081",
+"O     c #79E77DF779E7",
+"+     c #9E799A699E79",
+"@     c #FFFFFFFFFFFF",
+"                    ",
+"    .XX  oo         ",
+"    .XoOo++o        ",
+"    .Xoo+++@o       ",
+"    .Xo+++@@@o      ",
+"    .o+++@@@@@o     ",
+"    o+++@@@@@@@o    ",
+"   o+++@@@@@@@@@o   ",
+"  ooo+@@@@@@@@@ooo  ",
+"   Oo@@@@@@@@@@oOOO ",
+"    o@@@@@@@@@@oO   ",
+"    o@@oooo@@@@oO   ",
+"    o@@oO o@@@@oO   ",
+"    o@@oO o@@@@oO   ",
+"    o@@oO o@@@@oO   ",
+"    o@@oO o@@@@oO   ",
+"    o@@oO o@@@@oO   ",
+"    ooooO ooooooO   ",
+"     OOOO  OOOOOO   ",
+"                    "};
diff --git a/src/icons/icon_reload.xpm b/src/icons/icon_reload.xpm
new file mode 100644 (file)
index 0000000..b39fc37
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * icon_reload_xpm[] = {
+"20 20 4 1",
+"      c None",
+".     c #000000000000",
+"X     c #00007DF70000",
+"o     c #79E77DF779E7",
+"                    ",
+"                    ",
+"      ......        ",
+"     .XXXXXX..      ",
+"    .XXXXXXXXX.     ",
+"   .XXXX...XXXX.    ",
+"   .XXX.ooo..XX.    ",
+"   .XX.oo   .XXX.   ",
+" ...XX...    .XX.o  ",
+"  .XXXX.oo   .XX.o  ",
+"   .XX.oo    .XX.o  ",
+"    ..oo     .XX.o  ",
+"     oo     .XXX.o  ",
+"   .....   ..XX.oo  ",
+"   .XXX....XXXX.o   ",
+"    .XXXXXXXXX.oo   ",
+"     ..XXXXX..oo    ",
+"      o.....ooo     ",
+"        ooooo       ",
+"                    "};
diff --git a/src/icons/icon_thumb.xpm b/src/icons/icon_thumb.xpm
new file mode 100644 (file)
index 0000000..2fe88f8
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * icon_thumb_xpm[] = {
+"20 20 3 1",
+"      c None",
+".     c #000000",
+"+     c #797D79",
+"                    ",
+"                    ",
+"  ......            ",
+"  ......+  . .      ",
+"  ......+ . . .     ",
+"  ......+  + + +    ",
+"   ++++++           ",
+"                    ",
+"  ......            ",
+"  ......+ . . . .   ",
+"  ......+  . . . .  ",
+"  ......+   + + + + ",
+"   ++++++           ",
+"                    ",
+"  ......            ",
+"  ......+  . . .    ",
+"  ......+ . . . .   ",
+"  ......+  + + + +  ",
+"   ++++++           ",
+"                    "};
diff --git a/src/icons/icon_zoom_fit.xpm b/src/icons/icon_zoom_fit.xpm
new file mode 100644 (file)
index 0000000..ac6eb2f
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * icon_zoom_fit_xpm[] = {
+"20 20 3 1",
+"      c None",
+".     c #000000000000",
+"X     c #79E77DF779E7",
+"                    ",
+"                    ",
+"      .......       ",
+"       XX.XXXX      ",
+"        ...         ",
+"       . .X.        ",
+"  .      .X     .   ",
+"  .X .   .X  .  .X  ",
+"  .X.     X   . .X  ",
+"  ......   ......X  ",
+"  .X.XXXX   XX.X.X  ",
+"  .X .   .   .  .X  ",
+"  .X     .X     .X  ",
+"   X   . .X.     X  ",
+"        ...         ",
+"         .X         ",
+"      .......       ",
+"       XXXXXXX      ",
+"                    ",
+"                    "};
diff --git a/src/icons/icon_zoom_in.xpm b/src/icons/icon_zoom_in.xpm
new file mode 100644 (file)
index 0000000..f4e74eb
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * icon_zoom_in_xpm[] = {
+"20 20 6 1",
+"      c None",
+".     c #000000000000",
+"X     c #E79DE79DE79D",
+"o     c #B6DAB2CAB6DA",
+"O     c #79E77DF779E7",
+"+     c #FFFFFFFFFFFF",
+"                    ",
+"     ...            ",
+"   ..XXX..          ",
+"  .XXo.oXX.         ",
+"  .Xoo.XoX.         ",
+" .XooX.XXXX.        ",
+" .X.......X.O       ",
+" .XoXX.XXXX.O       ",
+"  .XXX.XXX.OO       ",
+"  .XXX.XXX.O        ",
+"   ..XXX..X.        ",
+"     ...OO.X..      ",
+"      OOO  .+X.     ",
+"           .X+X.    ",
+"            .X+X.   ",
+"             .X+X.  ",
+"              .X+X. ",
+"               .X.OO",
+"                .OO ",
+"                O   "};
diff --git a/src/icons/icon_zoom_norm.xpm b/src/icons/icon_zoom_norm.xpm
new file mode 100644 (file)
index 0000000..e8169af
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * icon_zoom_norm_xpm[] = {
+"20 20 3 1",
+"      c None",
+".     c #000000000000",
+"X     c #79E77DF779E7",
+"                    ",
+"                    ",
+"  .....     .....   ",
+"  .XXXXX     XXX.X  ",
+"  .X            .X  ",
+"  .X            .X  ",
+"  .X            .X  ",
+"   X             X  ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"  .             .   ",
+"  .X            .X  ",
+"  .X            .X  ",
+"  .X            .X  ",
+"  .....     .....X  ",
+"   XXXXX     XXXXX  ",
+"                    ",
+"                    "};
diff --git a/src/icons/icon_zoom_out.xpm b/src/icons/icon_zoom_out.xpm
new file mode 100644 (file)
index 0000000..6f8e354
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * icon_zoom_out_xpm[] = {
+"20 20 6 1",
+"      c None",
+".     c #000000000000",
+"X     c #E79DE79DE79D",
+"o     c #B6DAB2CAB6DA",
+"O     c #79E77DF779E7",
+"+     c #FFFFFFFFFFFF",
+"                    ",
+"     ...            ",
+"   ..XXX..          ",
+"  .XXoooXX.         ",
+"  .XooXooX.         ",
+" .XooXXXXXX.        ",
+" .X.......X.O       ",
+" .XoXXXXXXX.O       ",
+"  .XXXXXXX.OO       ",
+"  .XXXXXXX.O        ",
+"   ..XXX..X.        ",
+"     ...OO.X..      ",
+"      OOO  .+X.     ",
+"           .X+X.    ",
+"            .X+X.   ",
+"             .X+X.  ",
+"              .X+X. ",
+"               .X.OO",
+"                .OO ",
+"                O   "};
diff --git a/src/icons/img_unknown.xpm b/src/icons/img_unknown.xpm
new file mode 100644 (file)
index 0000000..0b202bf
--- /dev/null
@@ -0,0 +1,159 @@
+/* XPM */
+static char * img_unknown_xpm[] = {
+"48 48 108 2",
+"      c None",
+".     c #DDDDDD",
+"+     c #DCDCDC",
+"@     c #DBDBDB",
+"#     c #DADADA",
+"$     c #D9D9D9",
+"%     c #D8D8D8",
+"&     c #D7D7D7",
+"*     c #D6D6D6",
+"=     c #D5D5D5",
+"-     c #D4D4D4",
+";     c #D3D3D3",
+">     c #D2D2D2",
+",     c #D1D1D1",
+"'     c #F40000",
+")     c #F30000",
+"!     c #F10000",
+"~     c #F00000",
+"{     c #EF0000",
+"]     c #EE0000",
+"^     c #ED0000",
+"/     c #CDCDCD",
+"(     c #CECECE",
+"_     c #CFCFCF",
+":     c #D0D0D0",
+"<     c #F50000",
+"[     c #EB0000",
+"}     c #EA0000",
+"|     c #E90000",
+"1     c #E80000",
+"2     c #C9C9C9",
+"3     c #CACACA",
+"4     c #CCCCCC",
+"5     c #F60000",
+"6     c #EC0000",
+"7     c #E60000",
+"8     c #E50000",
+"9     c #E40000",
+"0     c #E30000",
+"a     c #E20000",
+"b     c #C6C6C6",
+"c     c #C7C7C7",
+"d     c #CBCBCB",
+"e     c #C4C4C4",
+"f     c #C3C3C3",
+"g     c #DF0000",
+"h     c #DE0000",
+"i     c #DD0000",
+"j     c #DC0000",
+"k     c #F70000",
+"l     c #E70000",
+"m     c #C0C0C0",
+"n     c #BEBEBE",
+"o     c #BCBCBC",
+"p     c #D80000",
+"q     c #D70000",
+"r     c #D90000",
+"s     c #BDBDBD",
+"t     c #BFBFBF",
+"u     c #C5C5C5",
+"v     c #F20000",
+"w     c #C2C2C2",
+"x     c #BBBBBB",
+"y     c #B9B9B9",
+"z     c #B8B8B8",
+"A     c #D30000",
+"B     c #D20000",
+"C     c #D50000",
+"D     c #C1C1C1",
+"E     c #E00000",
+"F     c #BABABA",
+"G     c #B6B6B6",
+"H     c #B5B5B5",
+"I     c #B4B4B4",
+"J     c #CF0000",
+"K     c #CE0000",
+"L     c #D00000",
+"M     c #B7B7B7",
+"N     c #B3B3B3",
+"O     c #B2B2B2",
+"P     c #CC0000",
+"Q     c #CB0000",
+"R     c #CA0000",
+"S     c #B1B1B1",
+"T     c #C80000",
+"U     c #C70000",
+"V     c #AFAFAF",
+"W     c #C90000",
+"X     c #C60000",
+"Y     c #C50000",
+"Z     c #ADADAD",
+"`     c #C40000",
+" .    c #ABABAB",
+"..    c #AEAEAE",
+"+.    c #C8C8C8",
+"@.    c #C30000",
+"#.    c #AAAAAA",
+"$.    c #B0B0B0",
+"%.    c #D10000",
+"&.    c #A9A9A9",
+"*.    c #ACACAC",
+"=.    c #D60000",
+"-.    c #DA0000",
+";.    c #D40000",
+">.    c #CD0000",
+",.    c #DB0000",
+"'.    c #E10000",
+").    c #000000",
+". . . . . . . . . . . . . . . . + + @ @ # $ % & * * * = = = = = = * * & % $ $ # @ + + . . . . . ",
+". . . . . . . . . . . . . . . + + @ # $ % & * = - ; > > , , , , > ; ; = * * % $ # @ + + . . . . ",
+". . . . . . . . . . . . . . + + @ # % & * = ' ) ! ~ { ] ^ / / / ( _ : , > - * & % # @ + + . . . ",
+". . . . . . . . . . . . . + + @ # % * * < ) ! { ^ [ } | 1 1 1 1 2 3 4 / _ , ; = * % $ @ + + . . ",
+". . . . . . . . . . . . . + @ # % * 5 ' ! { 6 } 1 7 8 9 0 a a 0 0 b c 2 d / : > = * % # @ + . . ",
+". . . . . . . . . . . . + @ # $ & 5 ' ! ] [ 1 b e f g h i i j i i g f e c 2 4 : > = * % # @ + . ",
+". . . . . . . . . . . . + @ $ & k ' ! ] } l 9 f m n o o p q q q p r s t f u 2 4 : > = & $ @ + . ",
+". . . . . . . . . . . + @ # % * < v { [ l 0 w t o x y z A A B B B A C x s D u 2 / : ; * % # @ + ",
+". . . . . . . . . . . + @ $ & k ' ~ 6 1 9 E n o F z G H I J K K K J L G y s D u 2 ( , = & $ @ + ",
+". . . . . . . . . . . + # $ & 5 v { } 7 a m o F M G H N O P Q R R Q P O G y n f c 4 : ; * % # + ",
+". . . . . . . . . . + + # % * - v ] | 8 f t o y M G I O S Q R T U U T V O G x m u 2 _ > * % # @ ",
+". . . . . . . . . . + @ # % * - : / 2 b w n o y M G I N S Q W U X Y X Z V I z s f 2 / , = & $ @ ",
+". . . . . . . . . . + @ # % * - : ( 2 b f t o F z G G I O Q W U Y ` `  ...S G o w c 4 : - & $ @ ",
+". . . . . . . . . . + + # % * - , ( 3 +.e D n o x y M G J P R U Y @.@.#.Z $.G x D b d : - * $ @ ",
+". . . . . . . . . . . + # $ & = > : 4 2 b f D n o x y M %.K Q U Y @.&.&.*.$.H x m b d : - * $ @ ",
+". . . . . . . . . . . + @ $ % * ; : ( d 2 b f D t s x =.A J Q T Y ` &.&.*.$.H x D b d : - * $ @ ",
+". . . . . . . . . . . + @ # % * = > : / 3 +.b f w t -.q ;.L P W X &.&.#.Z S G o D c 4 : - & $ @ ",
+". . . . . . . . . . . + + @ $ & * - , _ / 3 +.u f g j p ;.L >.W *.#.#.*.V N M o f +./ , = & $ @ ",
+". . . . . . . . . . . . + @ # % & = ; : _ 4 2 c 0 E j p C %.>.V Z *.*...$.H y t e 2 ( > * % # @ ",
+". . . . . . . . . . . . + + @ $ % * - > : / } l 0 E j p ;.%.O V ....V $.N M o D b d : ; * % # + ",
+". . . . . . . . . . . . . + @ # % * = > ! ^ } 7 0 g ,.p M H O $.V V S N G x t e 2 / , = & $ @ + ",
+". . . . . . . . . . . . . + @ # $ & = ' ~ ^ | 7 a h o F M H N O S O I G F n f c d : ; * % # @ + ",
+". . . . . . . . . . . . . + @ # $ & = ) ~ 6 1 9 w t o y M G I I I G M F s w b 3 ( , = * $ # + . ",
+". . . . . . . . . . . . . + @ # % * = v { [ l e D n x y M G G G M y o n w u 2 / : ; * % # @ + . ",
+". . . . . . . . . . . . . + @ # % * - ! ] } b f m o x y z M z y x o t f b 2 / : ; * & $ @ + . . ",
+". . . . . . . . . . . . . + @ $ & * ' ~ 6 1 u w t o x F y F x o n D f c 2 / : > = & $ # @ + . . ",
+". . . . . . . . . . . . . + # $ & = ) { [ l e D n o x x x o s m w u +.3 / : ; = * % # @ + . . . ",
+". . . . . . . . . . . . + @ # % * - : / 2 b f m s o o o s t D f b 2 d ( : ; = & % # @ + . . . . ",
+". . . . . . . . . . . . + @ $ & * ; : 4 2 u w t s o o s t w f c 2 4 _ , - * & $ # @ + . . . . . ",
+". . . . . . . . . . . . + # $ * = , _ } c f D t s s s t D f c 2 / : > - * & $ # @ + . . . . . . ",
+". . . . . . . . . . . + @ # % * - ! ^ | 8 '.m n s s n D f b 2 4 : > - * & $ # @ + . . . . . . . ",
+". . . . . . . . . . . + @ $ & = ) { [ l 0 g j s o s t w e +.d _ , - * & $ # @ + . . . . . . . . ",
+". . . . . . . . . . . + # $ * < v ] } 8 '.h ,.o o s t w u 2 / : ; * & $ # @ + . . . . . . . . . ",
+". . . . . . . . . . + @ # % * ' ! 6 1 0 g j -.o o o t f b 3 ( , - * % # @ + . . . . . . . . . . ",
+". . . . . . . . . . + @ # & * ) { [ 7 a h -.p x x o t f c 3 _ > = & $ @ + . . . . . . . . . . . ",
+". . . . . . . . . . + @ $ & = ) ] } 8 '.i r x F x o m f c d _ > * & # @ + . . . . . . . . . . . ",
+". . . . . . . . . . + @ $ & = , ] | 8 E j o F F x s m f +.4 : ; * % # @ + . . . . . . . . . . . ",
+". . . . . . . . . . + @ $ & = , ( 3 b f t o x x o n D u 2 / : - * % # + . . . . . . . . . . . . ",
+". . . . . . . . . . + @ $ & = ).).3 c f m n o o s m f b 3 ( , = & $ @ + . . . . . . . . . . . . ",
+". . . . . . . . . . + @ $ & * ).).4 2 u f m t t m f u 2 4 : > * & $ @ + . . . . . . . . . . . . ",
+". . . . . . . . . . + @ # % * ).).( 3 +.u f f f f u +.3 ( : - * % # @ + . . . . . . . . . . . . ",
+". . . ).).. ).).. ).+ ).).$ * ).).: ).).+.).b ).).2 3 / ).).).& $ ).).. ).).. ).. ).).. . . . . ",
+". . . ).).. ).).. ).).+ ).).% ).).).)./ d ).).2 ).).( ).).= ).).# ).).).).).. ).).. ).).. . . . ",
+". . . ).).. ).).. ).).+ ).).$ ).).).> : _ ).).( ).).: ).).* ).).@ ).).).).).. ).).. ).).. . . . ",
+". . . ).).. ).).. ).).. ).).# ).).).).; > ).)., ).).- ).).% ).).@ ).).).).).. ).).. ).).. . . . ",
+". . . . ).).. ).. ).).. ).).@ ).).% ).).= ).).- ).).* & ).).).@ + . ).. ).. . ).).. ).).. . . . ",
+". . . . . . . . . . . . . + + @ # $ $ % & & * * & & % $ # @ @ + . . . . . . . . . . . . . . . . ",
+". . . . . . . . . . . . . . + + @ @ # # $ $ $ $ $ $ # # @ + + . . . . . . . . . . . . . . . . . "};
diff --git a/src/image.c b/src/image.c
new file mode 100644 (file)
index 0000000..7f8c55c
--- /dev/null
@@ -0,0 +1,773 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "image.h"
+#include "icons/img_unknown.xpm"
+
+static gchar *zoom_as_text(gint zoom, gfloat scale);
+static void set_zoom_label(GtkWidget *label, gint zoom, gfloat scale);
+static void set_info_label(GtkWidget *label, gint width, gint height, gint size, gint unknown);
+static void set_window_title(ImageWindow *imd, gchar *text);
+
+static gint image_area_size_top_window(ImageWindow *imd, gint w, gint h);
+
+static void image_area_recalc_size(ImageWindow *imd, GtkAllocation *allocation);
+
+static void image_area_redraw(ImageWindow *imd);
+static gint image_area_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data);
+static gint image_area_update_cb(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
+
+static void set_mouse_cursor (GdkWindow *window, gint icon);
+static void image_area_mouse_moved(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+static void image_area_mouse_pressed(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+static void image_area_mouse_released(GtkWidget *widget, GdkEventButton *bevent, gpointer data);
+static void image_area_mouse_drag(GtkWidget *widget, GdkDragContext *context, gpointer data);
+
+/*
+ *-----------------------------------------------------------------------------
+ * image status widget update routines (private)
+ *-----------------------------------------------------------------------------
+ */
+
+static gchar *zoom_as_text(gint zoom, gfloat scale)
+{
+       gint l = 1;
+       gint r = 1;
+       gchar *approx = " ";
+       if (zoom > 1) l = zoom;
+       if (zoom < -1) r = -zoom;
+       if (zoom == 0 && scale != 0)
+               {
+               if (scale < 1) r = 1 / scale + 0.5;
+               approx = " ~";
+               }
+       return g_strdup_printf("%d :%s%d", l, approx, r);
+}
+
+static void set_zoom_label(GtkWidget *label, gint zoom, gfloat scale)
+{
+       gchar *buf;
+       buf = zoom_as_text(zoom, scale);
+       gtk_label_set(GTK_LABEL(label), buf);
+       g_free(buf);
+}
+
+static void set_info_label(GtkWidget *label, gint width, gint height, gint size, gint unknown)
+{
+       gchar buf[64];
+       if (unknown)
+               sprintf(buf, _("( ? x ? ) %d bytes"), size);
+       else
+               sprintf(buf, _("( %d x %d ) %d bytes"), width, height, size);
+       gtk_label_set(GTK_LABEL(label), buf);
+}
+
+static void set_window_title(ImageWindow *imd, gchar *text)
+{
+       gchar *title = NULL;
+       if (!imd->top_window) return;
+
+       if (imd->title)
+               {
+               title = g_strconcat(imd->title, imd->image_name, text, NULL);
+               }
+       else
+               {
+               title = g_strconcat(imd->image_name, text, NULL);
+               }
+
+       gtk_window_set_title(GTK_WINDOW(imd->top_window), title);
+       g_free(title);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * fit window to image utility (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static gint image_area_size_top_window(ImageWindow *imd, gint w, gint h)
+{
+       if (!imd->top_window) return FALSE;
+       if (imd == full_screen_image) return FALSE;
+       if (imd == normal_image && !toolwindow) return FALSE;
+       if (!fit_window) return FALSE;
+
+       if (imd == normal_image)
+               {
+               /* account for border frame */
+               w += 4;
+               h += 4;
+               }
+
+       if (limit_window_size)
+               {
+               gint sw = gdk_screen_width() * max_window_size / 100;
+               gint sh = gdk_screen_height() * max_window_size / 100;
+
+               if (w > sw) w = sw;
+               if (h > sh) h = sh;
+               }
+
+       /* to cheat on a prob a little, don't resize if within 1 either way...
+          ...dumb off by 1 errors! ;) */
+
+/*     if (w >= (imd->top_window)->allocation.width - 1 &&
+           w <= (imd->top_window)->allocation.width + 1 &&
+           h >= (imd->top_window)->allocation.height - 1 &&
+           h <= (imd->top_window)->allocation.height + 1)
+               return FALSE;
+*/
+       if (debug) printf("auto sized to %d x %d\n", w, h);
+
+       gdk_window_resize(imd->top_window->window, w, h);
+       gtk_widget_set_usize(imd->top_window, w, h);
+
+       return TRUE;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image widget zoom/recalc routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+void image_area_scroll(ImageWindow *imd, gint x, gint y)
+{
+       if (x != 0)
+               {
+               GtkAdjustment *h = gtk_viewport_get_hadjustment(GTK_VIEWPORT(imd->viewport));
+               gfloat val = h->value + x;
+               if (val < h->lower) val = h->lower;
+               if (val > h->upper - h->page_size) val = h->upper - h->page_size;
+               gtk_adjustment_set_value(GTK_ADJUSTMENT(h), val);
+               }
+
+       if (y != 0)
+               {
+               GtkAdjustment *v = gtk_viewport_get_vadjustment(GTK_VIEWPORT(imd->viewport));
+               gfloat val = v->value + y;
+               if (val < v->lower) val = v->lower;
+               if (val > v->upper - v->page_size) val = v->upper - v->page_size;
+               gtk_adjustment_set_value(GTK_ADJUSTMENT(v), val);
+               }
+}
+
+gint image_area_get_zoom(ImageWindow *imd)
+{
+       return imd->zoom;
+}
+
+void image_area_adjust_zoom(ImageWindow *imd, gint increment)
+{
+       gint zoom = imd->zoom;
+       if (increment < 0)
+               {
+               while (increment < 0)
+                       {
+                       zoom--;
+                       if (zoom == 0 || zoom == -1) zoom = -2;
+                       increment++;
+                       }
+               if (zoom < -8) zoom = -8;
+               }
+       else
+               {
+               while (increment > 0)
+                       {
+                       zoom++;
+                       if (zoom == -1) zoom = 1;
+                       increment--;
+                       }
+               if (zoom > 3) zoom = 3;
+               }
+       if (zoom != imd->zoom)
+               image_area_set_zoom(imd, zoom);
+}
+
+void image_area_set_zoom(ImageWindow *imd, gint zoom)
+{
+       if (zoom == imd->zoom && imd->width > 0 && imd->height > 0) return;
+
+       imd->zoom = zoom;
+       image_area_recalc_size(imd, NULL);
+
+       gtk_widget_set_usize (imd->table, imd->width, imd->height);
+       gtk_drawing_area_size(GTK_DRAWING_AREA(imd->image), imd->width, imd->height);
+}
+
+static void image_area_recalc_size(ImageWindow *imd, GtkAllocation *allocation)
+{
+       gint w, h, ww, wh;
+       gfloat scale_factor = 1;
+
+       w = imd->image_data->rgb_width;
+       h = imd->image_data->rgb_height;
+       if (allocation)
+               {
+               ww = allocation->width;
+               wh = allocation->height;
+               }
+       else
+               {
+               ww = (imd->eventbox)->allocation.width;
+               wh = (imd->eventbox)->allocation.height;
+               }
+
+       if (imd == normal_image)
+               {
+               /* account for frame */
+               ww -= 4;
+               wh -= 4;
+               }
+
+       if (imd->zoom == 0) /* zoom to fit */
+               {
+               if (imd == normal_image && imd->width == 0 && imd->height == 0 &&
+                   fit_window && toolwindow)
+                       {
+                       if (limit_window_size)
+                               {
+                               ww = (gdk_screen_width() * max_window_size / 100) - 4;
+                               wh = (gdk_screen_height() * max_window_size / 100) - 4;
+                               }
+                       else
+                               {
+                               ww = w;
+                               wh = h;
+                               }
+                       }
+               if (w > ww || h > wh)
+                       {
+                       if ((gfloat)ww / w > (gfloat)wh / h)
+                               {
+                               scale_factor = (gfloat) wh / h;
+                               h = wh;
+                               w = w * scale_factor + 0.5;
+                               if (w > ww) w = ww;
+                               }
+                       else
+                               {
+                               scale_factor = (gfloat)ww / w;
+                               w = ww;
+                               h = h * scale_factor + 0.5;
+                               if (h > wh) h = wh;
+                               }
+                       if (w < 1) w = 1;
+                       if (h < 1) h = 1;
+                       }
+               }
+       else if (imd->zoom > 0) /* zoom orig, in */
+               {
+               scale_factor = imd->zoom;
+               w = w * scale_factor;
+               h = h * scale_factor;
+               }
+       else if (imd->zoom < -1) /* zoom out */
+               {
+               scale_factor = (- imd->zoom);
+               w = w / scale_factor;
+               h = h / scale_factor;
+               }
+
+       imd->width = w;
+       imd->height = h;
+
+       if (debug) printf("recalc %d x %d @ %f\n", w, h, scale_factor);
+
+       if (imd->zoom_label)
+               {
+               set_zoom_label(imd->zoom_label, imd->zoom, scale_factor);
+               }
+
+/* this is causing problems with resizing
+       if (imd->top_window && imd->show_title_zoom)
+               {
+               gchar *buf = zoom_as_text(imd->zoom, scale_factor);
+               gchar *zbuf = g_strconcat(" [ ", buf, "]", NULL);
+               g_free(buf);
+               set_window_title(imd, zbuf);
+               g_free(zbuf);
+               }
+*/
+
+       if (image_area_size_top_window(imd, w, h))
+               {
+               /* this is hacky */
+               imd->artificial_size = TRUE;
+               gtk_grab_add (info_zoom);
+               while(gtk_events_pending()) gtk_main_iteration();
+               gtk_grab_remove(info_zoom);
+               imd->artificial_size = FALSE;
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image widget set/get image information
+ *-----------------------------------------------------------------------------
+ */ 
+
+void image_area_set_path(ImageWindow *imd, gchar *newpath)
+{
+       if (!imd->image_path || !newpath) return;
+
+       g_free(imd->image_path);
+       imd->image_path = g_strdup(newpath);
+       imd->image_name = filename_from_path(imd->image_path);
+
+       if (imd->top_window)
+               {
+               set_window_title(imd, NULL);
+               }
+}
+
+gchar *image_area_get_path(ImageWindow *imd)
+{
+       return imd->image_path;
+}
+
+gchar *image_area_get_name(ImageWindow *imd)
+{
+       return imd->image_name;
+}
+
+void image_area_set_image(ImageWindow *imd, gchar *path, gint zoom)
+{
+       if (path && imd->image_path && !strcmp(path, imd->image_path)) return;
+
+       g_free(imd->image_path);
+       if (path)
+               {
+               imd->image_path = g_strdup(path);
+               imd->image_name = filename_from_path(imd->image_path);
+               }
+       else
+               {
+               imd->image_path = NULL;
+               imd->image_name = " ";
+               zoom = 1;
+               }
+
+       if (imd->image_data) gdk_imlib_destroy_image(imd->image_data);
+       if (path && isfile(path))
+               {
+               imd->image_data = gdk_imlib_load_image(path);
+               if (!imd->image_data)
+                       {
+                       imd->image_data = gdk_imlib_create_image_from_xpm_data((gchar **)img_unknown_xpm);
+                       imd->unknown = TRUE;
+                       }
+               else
+                       {
+                       imd->unknown = FALSE;
+                       }
+               imd->size = filesize(path);
+               }
+       else
+               {
+               if (path)
+                       imd->image_data = gdk_imlib_create_image_from_xpm_data((gchar **)img_unknown_xpm);
+               else
+                       imd->image_data = gdk_imlib_create_image_from_data((char *)logo, NULL, logo_width, logo_height);
+               imd->unknown = TRUE;
+               imd->size = 0;
+               }
+
+       imd->width = imd->old_width = 0;
+       imd->height = imd->old_height = 0;
+
+       if (imd->top_window)
+               {
+               set_window_title(imd, NULL);
+               }
+       if (imd->info_label)
+               {
+               set_info_label(imd->info_label, imd->image_data->rgb_width, imd->image_data->rgb_height, imd->size, imd->unknown);
+               }
+
+       /* do info area updates here */
+
+       imd->new_img = TRUE;
+       image_area_set_zoom(imd, zoom);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image widget redraw/callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void image_area_redraw(ImageWindow *imd)
+{
+       GdkBitmap *mask = NULL;
+
+       if (debug) printf("redrawn %d x %d\n", imd->width, imd->height);
+
+       if (!imd->image_data) return;
+
+       if (imd->width == imd->old_width && imd->height == imd->old_height)
+               {
+               if (debug) printf("redraw cancelled\n");
+               return;
+               }
+
+       if (imd->image_pixmap) gdk_imlib_free_pixmap(imd->image_pixmap);
+       imd->image_pixmap = NULL;
+
+       gdk_imlib_render(imd->image_data, imd->width, imd->height);
+       imd->image_pixmap = gdk_imlib_move_image(imd->image_data);
+       mask = gdk_imlib_move_mask(imd->image_data);
+
+       gdk_window_set_back_pixmap(imd->image->window, imd->image_pixmap, FALSE);
+       gdk_window_shape_combine_mask (imd->image->window, mask, 0, 0);
+       gdk_window_clear(imd->image->window);
+       gdk_flush();
+
+       imd->old_width = imd->width;
+       imd->old_height = imd->height;
+}
+
+static gint image_area_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+       ImageWindow *imd = data;
+       gint old_w, old_h;
+       GtkAdjustment *h;
+       GtkAdjustment *v;
+       gfloat h_pos;
+       gfloat v_pos;
+       gfloat h_max;
+       gfloat v_max;
+
+       if (imd->artificial_size) return FALSE;
+
+       h = gtk_viewport_get_hadjustment(GTK_VIEWPORT(imd->viewport));
+       v = gtk_viewport_get_vadjustment(GTK_VIEWPORT(imd->viewport));
+
+       h_pos = h->value;
+       h_max = allocation->width;
+       v_pos = v->value;
+       v_max = allocation->height;
+
+       if (imd == normal_image)
+               {
+               h_max -= 4.0;
+               v_max -= 4.0;
+               }
+
+       if (h_pos > h->upper - h_max) h_pos = h->upper - h_max;
+       if (v_pos > v->upper - v_max) v_pos = v->upper - v_max;
+
+       if (imd->new_img)
+               {
+               imd->new_img = FALSE;
+               gtk_adjustment_clamp_page(h, 0.0, h_max);
+               gtk_adjustment_clamp_page(v, 0.0, v_max);
+               }
+       else
+               {
+               gtk_adjustment_clamp_page(h, h_pos, h_max);
+               gtk_adjustment_clamp_page(v, v_pos, v_max);
+               }
+
+        gtk_adjustment_changed(h);
+        gtk_adjustment_changed(v);
+
+       if (!imd->image_data || imd->zoom != 0) return FALSE;
+
+       old_w = imd->width;
+       old_h = imd->height;
+       image_area_recalc_size(imd, allocation);
+       if (old_w != imd->width || old_h != imd->height)
+               {
+               gtk_widget_set_usize (imd->table, imd->width, imd->height);
+               gtk_drawing_area_size(GTK_DRAWING_AREA(imd->image), imd->width, imd->height);
+               }
+
+       if (debug) printf("sized %d x %d (%d x %d)\n", allocation->width, allocation->height, imd->width, imd->height);
+
+       return FALSE;
+}
+
+static gint image_area_update_cb(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
+{
+       ImageWindow *imd = data;
+
+       if (imd->artificial_size) return FALSE;
+
+       image_area_redraw(imd);
+
+       return FALSE;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image widget mouse routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void set_mouse_cursor (GdkWindow *window, gint icon)
+{
+       GdkCursor *cursor;
+
+       if (icon == -1)
+               {
+               cursor = NULL;
+               }
+       else
+               {
+               cursor = gdk_cursor_new (icon);
+               }
+
+       gdk_window_set_cursor (window, cursor);
+
+       if (cursor) gdk_cursor_destroy (cursor);
+}
+
+static void image_area_mouse_moved(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
+       ImageWindow *imd = data;
+       GtkAdjustment* h;
+       GtkAdjustment* v;
+       gfloat x, y;
+       gfloat val;
+
+       if (!imd->in_drag || !gdk_pointer_is_grabbed()) return;
+
+       if (imd->drag_moved < 4)
+               {
+               imd->drag_moved++;
+               }
+       else
+               {
+               set_mouse_cursor (imd->eventbox->window, GDK_FLEUR);
+               }
+
+       h = gtk_viewport_get_hadjustment(GTK_VIEWPORT(imd->viewport));
+       v = gtk_viewport_get_vadjustment(GTK_VIEWPORT(imd->viewport));
+
+       x = imd->drag_last_x - bevent->x;
+       y = imd->drag_last_y - bevent->y;
+
+       /* x */
+       if (h->upper - h->page_size > 0)
+               {
+               val = (float)h->value + x;
+               if (val < 0 ) val = 0;
+               if (val > h->upper - h->page_size) val = h->upper - h->page_size;
+               h->value = val;
+               gtk_adjustment_set_value (GTK_ADJUSTMENT(h), val);
+               }
+
+       /* y */
+       if (v->upper - v->page_size > 0)
+               {
+               val = v->value + y;
+               if (val < 0 ) val = 0;
+               if (val > v->upper - v->page_size) val = v->upper - v->page_size;
+               v->value = val;
+               gtk_adjustment_set_value (GTK_ADJUSTMENT(v), val);
+               }
+
+       gtk_adjustment_value_changed(h);
+       gtk_adjustment_value_changed(v);
+
+       imd->drag_last_x = bevent->x;
+       imd->drag_last_y = bevent->y;
+}
+
+static void image_area_mouse_pressed(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
+       ImageWindow *imd = data;
+       switch (bevent->button)
+               {
+               case 1:
+                       imd->in_drag = TRUE;
+                       imd->drag_last_x = bevent->x;
+                       imd->drag_last_y = bevent->y;
+                       imd->drag_moved = 0;
+                       gdk_pointer_grab (imd->eventbox->window, FALSE,
+                                GDK_POINTER_MOTION_MASK |
+                                GDK_BUTTON_RELEASE_MASK,
+                                NULL, NULL, bevent->time);
+                       gtk_grab_add (imd->eventbox);
+                       break;
+               case 2:
+                       imd->drag_moved = 0;
+                       break;
+               case 3:
+                       if (imd->func_btn3)
+                               imd->func_btn3(imd, bevent, imd->data_btn3);
+                       break;
+               default:
+                       break;
+               }
+       gtk_widget_grab_focus(imd->viewport);
+}
+
+static void image_area_mouse_released(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
+{
+       ImageWindow *imd = data;
+       if (gdk_pointer_is_grabbed() && GTK_WIDGET_HAS_GRAB (imd->eventbox))
+               {
+               gtk_grab_remove (imd->eventbox);
+               gdk_pointer_ungrab (bevent->time);
+               set_mouse_cursor (imd->eventbox->window, -1);
+               }
+
+       if (bevent->button == 1)
+               {
+               if (imd->drag_moved < 4 && imd->func_btn1)
+                       imd->func_btn1(imd, bevent, imd->data_btn1);
+               }
+
+       if (bevent->button == 2)
+               {
+               if (imd->drag_moved < 4 && imd->func_btn2)
+                       imd->func_btn2(imd, bevent, imd->data_btn2);
+               }
+
+       imd->in_drag = FALSE;
+}
+
+static void image_area_mouse_drag(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+       ImageWindow *imd = data;
+       imd->drag_moved = 4;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image widget setup routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+void image_area_set_topwindow(ImageWindow *imd, GtkWidget *window, gchar *title, gint show_zoom)
+{
+       imd->top_window = window;
+       imd->show_title_zoom = show_zoom;
+
+       g_free(imd->title);
+       if (title)
+               imd->title = g_strdup(title);
+       else
+               imd->title = NULL;
+}
+
+void image_area_set_labels(ImageWindow *imd, GtkWidget *info, GtkWidget *zoom)
+{
+       imd->info_label = info;
+       imd->zoom_label = zoom;
+}
+
+void image_area_set_button(ImageWindow *imd, gint button,
+       void (*func)(ImageWindow *, GdkEventButton *, gpointer), gpointer data)
+{
+       switch (button)
+               {
+               case 1:
+                       imd->func_btn1 = func;
+                       imd->data_btn1 = data;
+                       break;
+               case 2:
+                       imd->func_btn2 = func;
+                       imd->data_btn2 = data;
+                       break;
+               case 3:
+                       imd->func_btn3 = func;
+                       imd->data_btn3 = data;
+                       break;
+               }
+}
+
+ImageWindow *image_area_new(GtkWidget *top_window)
+{
+        GtkObject *h_adj;
+        GtkObject *v_adj;
+       ImageWindow *imd;
+
+       imd = g_new0(ImageWindow, 1);
+       imd->zoom = 0;
+
+       imd->top_window = top_window;
+       imd->title = g_strdup("GQview - ");
+       imd->show_title_zoom = FALSE;
+       imd->new_img = FALSE;
+
+       imd->eventbox = gtk_event_box_new();
+
+       gtk_signal_connect(GTK_OBJECT(imd->eventbox),"motion_notify_event",
+                          GTK_SIGNAL_FUNC(image_area_mouse_moved), imd);
+       gtk_signal_connect(GTK_OBJECT(imd->eventbox),"button_press_event",
+                          GTK_SIGNAL_FUNC(image_area_mouse_pressed), imd);
+       gtk_signal_connect(GTK_OBJECT(imd->eventbox),"button_release_event",
+                          GTK_SIGNAL_FUNC(image_area_mouse_released), imd);
+       gtk_widget_set_events(imd->eventbox, GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK);
+
+       /* viewer */
+       h_adj = gtk_adjustment_new(0.0,0.0,0.0,1.0,1.0,1.0);
+       v_adj = gtk_adjustment_new(0.0,0.0,0.0,1.0,1.0,1.0);
+
+       imd->viewport = gtk_viewport_new (GTK_ADJUSTMENT(h_adj), GTK_ADJUSTMENT(v_adj));
+       gtk_container_add(GTK_CONTAINER(imd->eventbox), imd->viewport);
+
+       /* table for resize */
+       imd->table = gtk_table_new (1,1,TRUE);
+       gtk_container_add(GTK_CONTAINER (imd->viewport), imd->table);
+
+       /* imagewindow */
+       imd->image = gtk_drawing_area_new();
+       gtk_table_attach(GTK_TABLE (imd->table),imd->image,0,1,0,1,GTK_EXPAND,GTK_EXPAND,0,0);
+
+       gtk_signal_connect(GTK_OBJECT(imd->eventbox),"size_allocate",GTK_SIGNAL_FUNC(image_area_size_cb), imd);
+       gtk_signal_connect(GTK_OBJECT(imd->image),"configure_event",GTK_SIGNAL_FUNC(image_area_update_cb), imd);
+
+       gtk_signal_connect(GTK_OBJECT(imd->viewport),"drag_begin",
+                          GTK_SIGNAL_FUNC(image_area_mouse_drag), imd);
+
+       return imd;
+}
+
+void image_area_free(ImageWindow *imd)
+{
+       g_free(imd->image_path);
+
+       if (imd->image_pixmap) gdk_imlib_free_pixmap(imd->image_pixmap);
+       if (imd->image_data) gdk_imlib_destroy_image(imd->image_data);
+
+       g_free(imd);
+}
+
+gint get_default_zoom(ImageWindow *imd)
+{
+       gint zoom;
+
+       if (zoom_mode == ZOOM_RESET_ORIGINAL)
+               {
+               zoom = 1;
+               }
+       else if (zoom_mode == ZOOM_RESET_FIT_WINDOW)
+               {
+               zoom = 0;
+               }
+       else
+               {
+               if (imd)
+                       {
+                       zoom = image_area_get_zoom(imd);
+                       }
+               else
+                       {
+                       zoom = 1;
+                       }
+               }
+
+       return zoom;
+}
+
diff --git a/src/image.h b/src/image.h
new file mode 100644 (file)
index 0000000..e620c82
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+ImageWindow *image_area_new(GtkWidget *top_window);
+void image_area_free(ImageWindow *imd);
+
+/* for attaching the top window for resizing */
+void image_area_set_topwindow(ImageWindow *imd, GtkWidget *window, gchar *title, gint show_zoom);
+
+/* attach labels to be updated */
+void image_area_set_labels(ImageWindow *imd, GtkWidget *info, GtkWidget *zoom);
+
+/* set the current image to a different path */
+void image_area_set_path(ImageWindow *imd, gchar *newpath);
+
+/* attach handler functions for mouse buttons (1-3) */
+void image_area_set_button(ImageWindow *imd, gint button,
+       void (*func)(ImageWindow *, GdkEventButton *, gpointer), gpointer data);
+
+/* get the current image's path, etc. */
+gchar *image_area_get_path(ImageWindow *imd);
+gchar *image_area_get_name(ImageWindow *imd);
+
+/* load a new image, or NULL sets to logo */
+void image_area_set_image(ImageWindow *imd, gchar *path, gint zoom);
+
+/* image manipulation */
+void image_area_scroll(ImageWindow *imd, gint x, gint y);
+gint image_area_get_zoom(ImageWindow *imd);
+void image_area_adjust_zoom(ImageWindow *imd, gint increment);
+void image_area_set_zoom(ImageWindow *imd, gint zoom);
+
+/* get the default zoom for an image */
+gint get_default_zoom(ImageWindow *imd);
+
diff --git a/src/img-main.c b/src/img-main.c
new file mode 100644 (file)
index 0000000..cbf4921
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "image.h"
+#include <gdk/gdkkeysyms.h> /* for keyboard values */
+
+#define BLACK_BACKGROUND 1
+
+/*
+ *-----------------------------------------------------------------------------
+ * full screen keyboard
+ *-----------------------------------------------------------------------------
+ */
+
+static gint full_screen_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+       ImageWindow *imd = data;
+       gint stop_signal = FALSE;
+       gint x = 0;
+       gint y = 0;
+
+       switch (event->keyval)
+               {
+               case GDK_Left:
+                       x -= 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Right:
+                       x += 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Up:
+                       y -= 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Down:
+                       y += 1;
+                       stop_signal = TRUE;
+                       break;
+               case '+': case '=':
+                       image_area_adjust_zoom(imd, 1);
+                       break;
+               case '-':
+                       image_area_adjust_zoom(imd, -1);
+                       break;
+               case 'x':
+                       image_area_set_zoom(imd, 0);
+                       break;
+               case 'z':
+                       image_area_set_zoom(imd, 1);
+                       break;
+               case GDK_Page_Up:
+               case GDK_BackSpace:
+                       file_prev_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Page_Down:
+               case GDK_space:
+                       file_next_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Home:
+                       file_first_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_End:
+                       file_last_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Delete:
+                       full_screen_stop();
+                       file_util_delete(image_area_get_path(imd), NULL);
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Escape:
+                       full_screen_stop();
+                       stop_signal = TRUE;
+                       break;
+               case 'Q': case 'q':
+                       exit_gqview();
+                       return FALSE;
+                        break;
+               case 'S': case 's':
+                       slideshow_toggle();
+                       break;
+               }
+
+       if (event->state & GDK_CONTROL_MASK)
+               {
+               gint n = -1;
+               switch (event->keyval)
+                       {
+                       case '1':
+                               n = 0;
+                               break;
+                       case '2':
+                               n = 1;
+                               break;
+                       case '3':
+                               n = 2;
+                               break;
+                       case '4':
+                               n = 3;
+                               break;
+                       case '5':
+                               n = 4;
+                               break;
+                       case '6':
+                               n = 5;
+                               break;
+                       case '7':
+                               n = 6;
+                               break;
+                       case '8':
+                               n = 7;
+                               break;
+                       case 'F': case 'f':
+                               full_screen_stop();
+                               break;
+                       case 'C': case 'c':
+                               full_screen_stop();
+                               file_util_copy(image_area_get_path(imd), NULL, current_path);
+                               break;
+                       case 'M': case 'm':
+                               full_screen_stop();
+                               file_util_move(image_area_get_path(imd), NULL, current_path);
+                               break;
+                       case 'R': case 'r':
+                               full_screen_stop();
+                               file_util_rename(image_area_get_path(imd), NULL);
+                               break;
+                       case 'D': case 'd':
+                               full_screen_stop();
+                               file_util_delete(image_area_get_path(imd), NULL);
+                               break;
+                       }
+               if (n != -1)
+                       {
+                       full_screen_stop();
+                       start_editor_from_file(n, image_area_get_path(imd));
+                       }
+               }
+
+       if (event->state & GDK_SHIFT_MASK)
+               {
+               x *= 3;
+               y *= 3;
+               }
+
+       if (x != 0 || y!= 0)
+               {
+               keyboard_scroll_calc(&x, &y, event);
+               image_area_scroll(imd, x, y);
+               }
+
+       return stop_signal;
+}
+
+/*
+ *----------------------------------------------------------------------------
+ * mouse button callbacks
+ *----------------------------------------------------------------------------
+ */
+
+static void button1_cb(ImageWindow *imd, GdkEventButton *bevent, gpointer data)
+{
+       file_next_image();
+}
+
+static void button2_cb(ImageWindow *imd, GdkEventButton *bevent, gpointer data)
+{
+       file_prev_image();
+}
+
+static void button3_cb(ImageWindow *imd, GdkEventButton *bevent, gpointer data)
+{
+       if (main_image == normal_image)
+               {
+               gtk_menu_popup (GTK_MENU(menu_image_popup), NULL, NULL, NULL, NULL,
+                       bevent->button, bevent->time);
+               }
+       else
+               {
+               gtk_menu_popup (GTK_MENU(menu_window_full), NULL, NULL, NULL, NULL,
+                       bevent->button, bevent->time);
+               }
+}
+
+/*
+ *----------------------------------------------------------------------------
+ * full screen functions
+ *----------------------------------------------------------------------------
+ */
+
+static gint full_screen_delete_cb(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+       full_screen_stop();
+       return TRUE;
+}
+
+static gint full_screen_destroy_cb(GtkWidget *widget, GdkEventAny *event, gpointer data)
+{
+       image_area_free(full_screen_image);
+       full_screen_image = NULL;
+
+       return FALSE;
+}
+
+void full_screen_start()
+{
+       GtkWidget *window;
+       gint w;
+       gint h;
+
+       if (full_screen_window) return;
+
+       w = gdk_screen_width();
+       h = gdk_screen_height();
+
+       window = gtk_window_new(GTK_WINDOW_POPUP);
+       gtk_container_border_width(GTK_CONTAINER(window), 0);
+       gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc)full_screen_delete_cb, NULL);
+       gtk_signal_connect(GTK_OBJECT(window), "destroy_event", (GtkSignalFunc)full_screen_destroy_cb, NULL);
+
+       gtk_window_set_title(GTK_WINDOW(window), _("GQview full screen"));
+       gtk_widget_set_usize(window, w, h);
+
+       full_screen_image = image_area_new(NULL);
+
+       gtk_viewport_set_shadow_type (GTK_VIEWPORT(full_screen_image->viewport), GTK_SHADOW_NONE);
+       gtk_container_add(GTK_CONTAINER(window), full_screen_image->eventbox);
+
+       /* set background to black */
+       if (BLACK_BACKGROUND)
+               {
+               GtkStyle *style;
+               style = gtk_style_copy(gtk_widget_get_style(full_screen_image->eventbox));
+               gtk_style_ref(style);
+               style->bg[GTK_STATE_NORMAL] = style->black;
+               gtk_widget_set_style(full_screen_image->viewport, style);
+               gtk_style_unref(style);
+               }
+
+       gtk_widget_show_all(full_screen_image->eventbox);
+
+       gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(full_screen_key_press_cb), full_screen_image);
+
+       image_area_set_image(full_screen_image, image_get_path(), image_area_get_zoom(normal_image));
+
+/*
+       if (!GTK_WIDGET_REALIZED(window)) gtk_widget_realize(window);
+       gdk_window_set_override_redirect(window->window, TRUE);
+*/
+       gtk_widget_show(window);
+       gdk_keyboard_grab(window->window, TRUE, GDK_CURRENT_TIME);
+
+       /* hide normal window */
+       gtk_widget_hide(mainwindow);
+       image_area_set_image(normal_image, NULL, image_area_get_zoom(normal_image));
+
+       full_screen_window = window;
+
+       image_area_set_button(full_screen_image, 1, button1_cb, NULL);
+       image_area_set_button(full_screen_image, 2, button2_cb, NULL);
+       image_area_set_button(full_screen_image, 3, button3_cb, NULL);
+
+       main_image = full_screen_image;
+}
+
+void full_screen_stop()
+{
+       if (!full_screen_window) return;
+
+       gdk_keyboard_ungrab (GDK_CURRENT_TIME);
+
+       image_area_set_image(normal_image, image_get_path(), image_area_get_zoom(full_screen_image));
+       main_image = normal_image;
+
+       gtk_widget_destroy(full_screen_window);
+       full_screen_window = NULL;
+
+       gtk_widget_show(mainwindow);
+}
+
+void full_screen_toggle()
+{
+       if (full_screen_window)
+               {
+               full_screen_stop();
+               }
+       else
+               {
+               full_screen_start();
+               }
+}
+
+/*
+ *----------------------------------------------------------------------------
+ * main image manipulation
+ *----------------------------------------------------------------------------
+ */
+
+void image_scroll(gint x, gint y)
+{
+       image_area_scroll(main_image, x, y);
+}
+
+void image_adjust_zoom(gint increment)
+{
+       image_area_adjust_zoom(main_image, increment);
+}
+
+void image_set_zoom(gint zoom)
+{
+       image_area_set_zoom(main_image, zoom);
+}
+
+void image_set_path(gchar *path)
+{
+       image_area_set_path(main_image, path);
+}
+
+gchar *image_get_path()
+{
+       return image_area_get_path(main_image);
+}
+
+gchar *image_get_name()
+{
+       return image_area_get_name(main_image);
+}
+
+void image_change_to(gchar *path)
+{
+       image_area_set_image(main_image, path, get_default_zoom(main_image));
+}
+
+void image_set_labels(GtkWidget *info, GtkWidget *zoom)
+{
+       image_area_set_labels(normal_image, info, zoom);
+}
+
+GtkWidget *image_create()
+{
+       normal_image = image_area_new(mainwindow);
+
+       main_image = normal_image;
+
+       image_area_set_button(main_image, 1, button1_cb, NULL);
+       image_area_set_button(main_image, 2, button2_cb, NULL);
+       image_area_set_button(main_image, 3, button3_cb, NULL);
+
+       return main_image->eventbox;
+}
+
diff --git a/src/img-view.c b/src/img-view.c
new file mode 100644 (file)
index 0000000..0c9b8f8
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "image.h"
+#include <gdk/gdkkeysyms.h> /* for keyboard values */
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window keyboard
+ *-----------------------------------------------------------------------------
+ */
+
+static gint view_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+       ImageWindow *imd = data;
+       gint stop_signal = FALSE;
+       gint x = 0;
+       gint y = 0;
+
+       switch (event->keyval)
+               {
+               case GDK_Left:
+                       x -= 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Right:
+                       x += 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Up:
+                       y -= 1;
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Down:
+                       y += 1;
+                       stop_signal = TRUE;
+                       break;
+               case '+': case '=':
+                       image_area_adjust_zoom(imd, 1);
+                       break;
+               case '-':
+                       image_area_adjust_zoom(imd, -1);
+                       break;
+               case 'x':
+                       image_area_set_zoom(imd, 0);
+                       break;
+               case 'z':
+                       image_area_set_zoom(imd, 1);
+                       break;
+               case GDK_Delete:
+                       file_util_delete(image_area_get_path(imd), NULL);
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Escape:
+                       gtk_widget_destroy(imd->top_window);
+                       stop_signal = TRUE;
+                       break;
+               }
+
+       if (event->state & GDK_CONTROL_MASK)
+               {
+               gint n = -1;
+               switch (event->keyval)
+                       {
+                       case '1':
+                               n = 0;
+                               break;
+                       case '2':
+                               n = 1;
+                               break;
+                       case '3':
+                               n = 2;
+                               break;
+                       case '4':
+                               n = 3;
+                               break;
+                       case '5':
+                               n = 4;
+                               break;
+                       case '6':
+                               n = 5;
+                               break;
+                       case '7':
+                               n = 6;
+                               break;
+                       case '8':
+                               n = 7;
+                               break;
+                       }
+               if (n != -1)
+                       {
+                       start_editor_from_file(n, image_area_get_path(imd));
+                       }
+               }
+
+       if (event->state & GDK_SHIFT_MASK)
+               {
+               x *= 3;
+               y *= 3;
+               }
+
+       if (x != 0 || y!= 0)
+               {
+               keyboard_scroll_calc(&x, &y, event);
+               image_area_scroll(imd, x, y);
+               }
+
+       return stop_signal;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window main routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void button3_cb(ImageWindow *imd, GdkEventButton *bevent, gpointer data)
+{
+       gtk_object_set_data(GTK_OBJECT(menu_window_view), "view_active", imd);
+       gtk_menu_popup (GTK_MENU(menu_window_view), NULL, NULL, NULL, NULL,
+               bevent->button, bevent->time);
+}
+
+static gint view_window_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
+{
+       gtk_widget_destroy(w);
+       return TRUE;
+}
+
+static gint view_window_destroy_cb(GtkWidget *w, GdkEventAny *event, gpointer data)
+{
+       ImageWindow *imd = data;
+       image_area_free(imd);
+       return FALSE;
+}
+
+void view_window_new(gchar *path)
+{
+       GtkWidget *window;
+       ImageWindow *imd;
+       GtkAllocation req_size;
+       gint w, h;
+       if (!path) return;
+
+       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+       gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
+       gtk_window_set_title (GTK_WINDOW (window), "GQview");
+        gtk_window_set_wmclass(GTK_WINDOW (window), "view", "GQview");
+        gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+       imd = image_area_new(NULL);
+       image_area_set_topwindow(imd, window, NULL, TRUE);
+       gtk_container_add(GTK_CONTAINER(window), imd->eventbox);
+       gtk_viewport_set_shadow_type (GTK_VIEWPORT(imd->viewport), GTK_SHADOW_NONE);
+        gtk_container_border_width (GTK_CONTAINER (imd->viewport), 0);
+       gtk_widget_show_all(imd->eventbox);
+
+       image_dnd_init(imd);
+
+       image_area_set_button(imd, 3, button3_cb, NULL);
+
+       gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc) view_window_delete_cb, NULL);
+       gtk_signal_connect(GTK_OBJECT(window), "destroy_event", (GtkSignalFunc) view_window_destroy_cb, imd);
+       gtk_signal_connect(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(view_window_key_press_cb), imd);
+
+       image_area_set_image(imd, path, get_default_zoom(NULL));
+
+       w = imd->width;
+       h = imd->height;
+       if (limit_window_size)
+               {
+               gint mw = gdk_screen_width() * max_window_size / 100;
+               gint mh = gdk_screen_height() * max_window_size / 100;
+
+               if (w > mw) w = mw;
+               if (h > mh) h = mh;
+               }
+
+       gtk_window_set_default_size (GTK_WINDOW(window), w, h);
+       req_size.x = req_size.y = 0;
+       req_size.width = w;
+       req_size.height = h;
+       gtk_widget_size_allocate(GTK_WIDGET(window), &req_size);
+
+       gtk_widget_set_usize(imd->eventbox, w, h);
+
+       gtk_widget_show(window);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * view window menu routines and callbacks
+ *-----------------------------------------------------------------------------
+ */ 
+
+static ImageWindow *view_window_get_active()
+{
+       return gtk_object_get_data(GTK_OBJECT(menu_window_view), "view_active");
+}
+
+void view_window_active_edit(gint n)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       start_editor_from_file(n, image_area_get_path(imd));
+}
+
+static void view_zoom_in_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       image_area_adjust_zoom(imd, 1);
+}
+
+static void view_zoom_out_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       image_area_adjust_zoom(imd, -1);
+}
+
+static void view_zoom_1_1_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       image_area_set_zoom(imd, 1);
+}
+
+static void view_zoom_fit_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       image_area_set_zoom(imd, 0);
+}
+
+static void view_copy_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       file_util_copy(image_area_get_path(imd), NULL, current_path);
+}
+
+static void view_move_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       file_util_move(image_area_get_path(imd), NULL, current_path);
+}
+
+static void view_rename_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       file_util_rename(image_area_get_path(imd), NULL);
+}
+
+static void view_delete_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       file_util_delete(image_area_get_path(imd), NULL);
+}
+
+static void view_close_cb(GtkWidget *widget, gpointer data)
+{
+       ImageWindow *imd = view_window_get_active();
+       if (!imd) return;
+       gtk_widget_destroy(imd->top_window);
+}
+
+void create_menu_view_popup()
+{
+       menu_window_view = gtk_menu_new();
+       add_menu_popup_item(menu_window_view, _("Zoom in"), view_zoom_in_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Zoom out"), view_zoom_out_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Zoom 1:1"), view_zoom_1_1_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Fit image to window"), view_zoom_fit_cb, NULL);
+       add_menu_divider(menu_window_view);
+
+       menu_window_view_edit = gtk_menu_item_new_with_label(_("Edit"));
+       gtk_menu_append(GTK_MENU(menu_window_view), menu_window_view_edit);
+       gtk_widget_show(menu_window_view_edit);
+
+       add_menu_divider(menu_window_view);
+       add_menu_popup_item(menu_window_view, _("Copy..."), view_copy_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Move..."), view_move_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Rename..."), view_rename_cb, NULL);
+       add_menu_popup_item(menu_window_view, _("Delete..."), view_delete_cb, NULL);
+
+       add_menu_divider(menu_window_view);
+       add_menu_popup_item(menu_window_view, _("Close window"), view_close_cb, NULL);
+}
+
+
diff --git a/src/intl.h b/src/intl.h
new file mode 100644 (file)
index 0000000..0f172d7
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __INTL_H__
+#define __INTL_H__
+
+#ifdef ENABLE_NLS
+#  include <libintl.h>
+#  define _(String) dgettext(PACKAGE,String)
+#  ifdef gettext_noop
+#    define N_(String) gettext_noop(String)
+#  else
+#    define N_(String) (String)
+#  endif /* gettext_noop */
+#else
+#  define _(String) (String)
+#  define N_(String) (String)
+#  define textdomain(String) (String)
+#  define gettext(String) (String)
+#  define dgettext(Domain,String) (String)
+#  define dcgettext(Domain,String,Type) (String)
+#  define bindtextdomain(Domain,Directory) (Domain) 
+#endif /* ENABLE_NLS */
+
+#endif /* __INTL_H__ */
diff --git a/src/logo.h b/src/logo.h
new file mode 100644 (file)
index 0000000..fc310f6
--- /dev/null
@@ -0,0 +1,3507 @@
+/* Imlib raw rgb data file created by convertrgb */
+
+const int logo_width  = 200;
+const int logo_height = 70;
+const GdkImlibColor logo_alpha  = { -1, -1, -1, 0 };
+const unsigned char logo[] = {
+0x13, 0x16, 0x42, 0x23, 0x28, 0x75, 0x19, 0x1d, 0x53, 0x12, 0x15, 0x3a,
+0x12, 0x16, 0x3b, 0x13, 0x17, 0x3c, 0x15, 0x17, 0x3d, 0x15, 0x18, 0x3d,
+0x16, 0x19, 0x3e, 0x17, 0x1a, 0x3f, 0x18, 0x1b, 0x3f, 0x17, 0x1a, 0x40,
+0x16, 0x1a, 0x41, 0x15, 0x18, 0x42, 0x15, 0x18, 0x42, 0x14, 0x17, 0x43,
+0x13, 0x16, 0x44, 0x12, 0x16, 0x45, 0x13, 0x16, 0x46, 0x15, 0x18, 0x47,
+0x16, 0x1a, 0x47, 0x18, 0x1c, 0x48, 0x1a, 0x1e, 0x4a, 0x1d, 0x20, 0x4a,
+0x1a, 0x1e, 0x4b, 0x17, 0x1b, 0x4d, 0x15, 0x18, 0x4e, 0x12, 0x16, 0x4e,
+0x10, 0x15, 0x4f, 0x12, 0x15, 0x51, 0x14, 0x17, 0x52, 0x16, 0x1a, 0x53,
+0x1a, 0x1e, 0x54, 0x1d, 0x22, 0x55, 0x1e, 0x22, 0x57, 0x1f, 0x24, 0x58,
+0x20, 0x25, 0x59, 0x21, 0x26, 0x5a, 0x22, 0x27, 0x5c, 0x22, 0x27, 0x5d,
+0x24, 0x29, 0x5e, 0x21, 0x26, 0x5f, 0x1e, 0x23, 0x61, 0x1c, 0x21, 0x62,
+0x1a, 0x1f, 0x64, 0x1a, 0x1f, 0x64, 0x18, 0x1d, 0x66, 0x20, 0x26, 0x67,
+0x28, 0x2f, 0x5f, 0x1b, 0x1f, 0x3b, 0x2b, 0x31, 0x6b, 0x23, 0x29, 0x6c,
+0x1f, 0x24, 0x6d, 0x1b, 0x21, 0x6e, 0x20, 0x26, 0x6f, 0x2f, 0x35, 0x6f,
+0x1e, 0x22, 0x41, 0x22, 0x27, 0x4d, 0x27, 0x2d, 0x58, 0x2b, 0x32, 0x62,
+0x2d, 0x35, 0x73, 0x25, 0x2c, 0x74, 0x23, 0x29, 0x74, 0x25, 0x2c, 0x74,
+0x22, 0x28, 0x74, 0x1d, 0x23, 0x75, 0x21, 0x27, 0x75, 0x2a, 0x32, 0x75,
+0x27, 0x2d, 0x74, 0x23, 0x29, 0x74, 0x22, 0x27, 0x74, 0x20, 0x26, 0x74,
+0x1e, 0x23, 0x73, 0x1f, 0x25, 0x73, 0x2c, 0x33, 0x72, 0x25, 0x2b, 0x55,
+0x26, 0x2d, 0x71, 0x22, 0x27, 0x6f, 0x27, 0x2f, 0x6f, 0x2b, 0x32, 0x6d,
+0x24, 0x2a, 0x6d, 0x20, 0x25, 0x6c, 0x22, 0x27, 0x6b, 0x24, 0x2a, 0x6a,
+0x26, 0x2d, 0x69, 0x28, 0x2f, 0x67, 0x28, 0x2e, 0x67, 0x25, 0x2a, 0x65,
+0x22, 0x27, 0x64, 0x21, 0x26, 0x64, 0x21, 0x26, 0x62, 0x20, 0x25, 0x62,
+0x1f, 0x24, 0x60, 0x1e, 0x22, 0x5f, 0x1d, 0x21, 0x5e, 0x1d, 0x22, 0x5d,
+0x1e, 0x24, 0x5c, 0x1f, 0x25, 0x5a, 0x21, 0x26, 0x5a, 0x22, 0x27, 0x58,
+0x24, 0x29, 0x57, 0x20, 0x25, 0x4a, 0x20, 0x25, 0x4b, 0x21, 0x26, 0x54,
+0x1e, 0x22, 0x53, 0x1b, 0x1f, 0x52, 0x19, 0x1d, 0x50, 0x19, 0x1d, 0x50,
+0x1a, 0x1e, 0x4f, 0x1a, 0x1e, 0x4d, 0x1a, 0x1f, 0x4d, 0x1c, 0x1f, 0x4b,
+0x1a, 0x1e, 0x4a, 0x18, 0x1c, 0x4a, 0x16, 0x1a, 0x48, 0x15, 0x18, 0x47,
+0x13, 0x16, 0x47, 0x12, 0x15, 0x46, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x43, 0x12, 0x15, 0x42, 0x12, 0x15, 0x41, 0x11, 0x15, 0x41,
+0x11, 0x15, 0x3f, 0x11, 0x15, 0x3f, 0x11, 0x15, 0x3f, 0x11, 0x15, 0x3d,
+0x11, 0x15, 0x3d, 0x11, 0x15, 0x3d, 0x11, 0x14, 0x3b, 0x11, 0x14, 0x3b,
+0x11, 0x14, 0x3a, 0x10, 0x13, 0x39, 0x10, 0x13, 0x39, 0x10, 0x12, 0x38,
+0x10, 0x12, 0x37, 0x0f, 0x12, 0x37, 0x0f, 0x12, 0x36, 0x0f, 0x12, 0x35,
+0x0f, 0x12, 0x35, 0x0f, 0x11, 0x35, 0x0e, 0x10, 0x34, 0x0e, 0x10, 0x33,
+0x0e, 0x10, 0x33, 0x0e, 0x10, 0x32, 0x0d, 0x0f, 0x32, 0x0d, 0x0f, 0x32,
+0x0d, 0x0f, 0x31, 0x0d, 0x0f, 0x30, 0x0d, 0x0f, 0x2f, 0x0d, 0x0f, 0x2f,
+0x0c, 0x0e, 0x2f, 0x0b, 0x0d, 0x2e, 0x0b, 0x0d, 0x2d, 0x0b, 0x0d, 0x2d,
+0x0a, 0x0d, 0x2d, 0x0a, 0x0d, 0x2d, 0x0a, 0x0d, 0x2c, 0x0a, 0x0d, 0x2c,
+0x0a, 0x0d, 0x2c, 0x0a, 0x0c, 0x2b, 0x0a, 0x0c, 0x2a, 0x0a, 0x0c, 0x2a,
+0x0a, 0x0c, 0x2a, 0x0a, 0x0b, 0x2a, 0x0a, 0x0b, 0x29, 0x0a, 0x0b, 0x29,
+0x0a, 0x0b, 0x28, 0x0a, 0x0b, 0x28, 0x0a, 0x0b, 0x27, 0x0a, 0x0b, 0x27,
+0x0a, 0x0b, 0x27, 0x09, 0x0b, 0x26, 0x09, 0x0b, 0x26, 0x0a, 0x0b, 0x26,
+0x09, 0x0a, 0x26, 0x0a, 0x0b, 0x26, 0x09, 0x0a, 0x25, 0x09, 0x0a, 0x25,
+0x09, 0x0a, 0x24, 0x09, 0x0a, 0x24, 0x09, 0x0a, 0x24, 0x09, 0x0a, 0x24,
+0x09, 0x0a, 0x23, 0x09, 0x0a, 0x23, 0x09, 0x0a, 0x22, 0x09, 0x0a, 0x22,
+0x09, 0x0a, 0x22, 0x09, 0x0a, 0x22, 0x08, 0x0a, 0x22, 0x08, 0x0a, 0x22,
+0x08, 0x0a, 0x21, 0x08, 0x0a, 0x21, 0x07, 0x09, 0x20, 0x07, 0x09, 0x20,
+0x07, 0x09, 0x20, 0x07, 0x09, 0x20, 0x07, 0x09, 0x1f, 0x02, 0x02, 0x08,
+0x2c, 0x34, 0x9d, 0x3d, 0x4a, 0xd5, 0x3b, 0x45, 0xc6, 0x37, 0x41, 0xba,
+0x3a, 0x42, 0xbb, 0x3c, 0x46, 0xbc, 0x3d, 0x47, 0xbe, 0x3e, 0x4a, 0xc1,
+0x43, 0x4c, 0xc2, 0x47, 0x51, 0xc4, 0x4a, 0x55, 0xc7, 0x4e, 0x58, 0xca,
+0x4e, 0x59, 0xcc, 0x4c, 0x58, 0xcf, 0x49, 0x54, 0xd0, 0x47, 0x51, 0xd4,
+0x43, 0x4e, 0xd5, 0x41, 0x4c, 0xd9, 0x3e, 0x49, 0xdc, 0x3d, 0x47, 0xde,
+0x41, 0x4e, 0xe1, 0x47, 0x51, 0xe5, 0x4a, 0x58, 0xe7, 0x51, 0x60, 0xeb,
+0x59, 0x66, 0xef, 0x59, 0x67, 0xf2, 0x51, 0x5d, 0xf3, 0x47, 0x54, 0xf8,
+0x3e, 0x4c, 0xfc, 0x38, 0x46, 0xfe, 0x38, 0x43, 0xff, 0x3e, 0x4a, 0xff,
+0x47, 0x53, 0xff, 0x51, 0x5e, 0xff, 0x5e, 0x6c, 0xff, 0x63, 0x70, 0xff,
+0x66, 0x75, 0xff, 0x6a, 0x78, 0xff, 0x6c, 0x7d, 0xff, 0x6f, 0x81, 0xff,
+0x70, 0x82, 0xff, 0x73, 0x83, 0xff, 0x6a, 0x7a, 0xff, 0x60, 0x70, 0xff,
+0x59, 0x67, 0xff, 0x55, 0x65, 0xff, 0x53, 0x61, 0xff, 0x55, 0x66, 0xff,
+0x75, 0x87, 0xff, 0x4a, 0x54, 0xa0, 0x73, 0x86, 0xff, 0x7e, 0x93, 0xff,
+0x6b, 0x7d, 0xff, 0x5e, 0x70, 0xff, 0x5d, 0x6c, 0xff, 0x82, 0x95, 0xff,
+0x4f, 0x5d, 0xac, 0x66, 0x77, 0xdc, 0x78, 0x89, 0xff, 0x86, 0x98, 0xff,
+0x98, 0xab, 0xff, 0x7d, 0x92, 0xff, 0x70, 0x83, 0xff, 0x7a, 0x8e, 0xff,
+0x70, 0x83, 0xff, 0x60, 0x70, 0xff, 0x6a, 0x7e, 0xff, 0x89, 0xa0, 0xff,
+0x7e, 0x94, 0xff, 0x70, 0x86, 0xff, 0x6b, 0x7e, 0xff, 0x66, 0x7a, 0xff,
+0x60, 0x72, 0xff, 0x6a, 0x7e, 0xff, 0x8a, 0x9e, 0xff, 0x8a, 0xa0, 0xff,
+0x72, 0x86, 0xff, 0x73, 0x87, 0xff, 0x8a, 0xa0, 0xff, 0x82, 0x98, 0xff,
+0x6f, 0x82, 0xff, 0x6b, 0x7d, 0xff, 0x72, 0x86, 0xff, 0x7c, 0x8e, 0xff,
+0x81, 0x94, 0xff, 0x89, 0x9c, 0xff, 0x7c, 0x8f, 0xff, 0x72, 0x83, 0xff,
+0x6b, 0x7d, 0xff, 0x6b, 0x7c, 0xff, 0x6b, 0x7a, 0xff, 0x65, 0x77, 0xff,
+0x61, 0x72, 0xff, 0x5e, 0x6f, 0xff, 0x60, 0x70, 0xff, 0x63, 0x73, 0xff,
+0x67, 0x78, 0xff, 0x6c, 0x7c, 0xff, 0x72, 0x81, 0xff, 0x72, 0x7e, 0xff,
+0x65, 0x70, 0xe1, 0x67, 0x73, 0xed, 0x6b, 0x7a, 0xff, 0x60, 0x6c, 0xff,
+0x58, 0x65, 0xff, 0x51, 0x5e, 0xff, 0x54, 0x61, 0xfe, 0x55, 0x63, 0xfc,
+0x55, 0x65, 0xf8, 0x59, 0x66, 0xf5, 0x5a, 0x67, 0xf2, 0x53, 0x5e, 0xef,
+0x4a, 0x58, 0xeb, 0x46, 0x51, 0xe7, 0x41, 0x4c, 0xe5, 0x3d, 0x47, 0xe1,
+0x3a, 0x43, 0xde, 0x3a, 0x43, 0xdb, 0x3a, 0x43, 0xd9, 0x3a, 0x46, 0xd8,
+0x3a, 0x43, 0xd4, 0x3a, 0x43, 0xd0, 0x3a, 0x46, 0xce, 0x3a, 0x46, 0xcc,
+0x3a, 0x43, 0xc9, 0x38, 0x43, 0xc7, 0x38, 0x43, 0xc4, 0x38, 0x42, 0xc2,
+0x38, 0x41, 0xbe, 0x38, 0x41, 0xbd, 0x38, 0x41, 0xbc, 0x38, 0x41, 0xbb,
+0x37, 0x3e, 0xb7, 0x37, 0x3e, 0xb5, 0x35, 0x3d, 0xb3, 0x33, 0x3c, 0xb0,
+0x33, 0x3c, 0xaf, 0x31, 0x3a, 0xac, 0x31, 0x3a, 0xab, 0x30, 0x38, 0xaa,
+0x2f, 0x37, 0xa6, 0x2f, 0x35, 0xa5, 0x2c, 0x35, 0xa3, 0x2c, 0x33, 0xa1,
+0x2c, 0x33, 0xa0, 0x2b, 0x33, 0x9e, 0x2b, 0x31, 0x9c, 0x2a, 0x30, 0x9b,
+0x28, 0x30, 0x99, 0x28, 0x2f, 0x98, 0x28, 0x2f, 0x95, 0x26, 0x2c, 0x94,
+0x25, 0x2b, 0x93, 0x25, 0x2b, 0x93, 0x25, 0x2b, 0x92, 0x23, 0x2a, 0x8f,
+0x23, 0x2a, 0x8e, 0x23, 0x28, 0x8c, 0x21, 0x28, 0x8c, 0x21, 0x28, 0x8a,
+0x21, 0x26, 0x89, 0x21, 0x26, 0x87, 0x20, 0x26, 0x86, 0x20, 0x26, 0x86,
+0x20, 0x26, 0x83, 0x20, 0x26, 0x82, 0x20, 0x26, 0x82, 0x20, 0x26, 0x81,
+0x20, 0x26, 0x7e, 0x20, 0x26, 0x7e, 0x20, 0x26, 0x7d, 0x20, 0x25, 0x7c,
+0x20, 0x25, 0x7c, 0x20, 0x25, 0x78, 0x20, 0x25, 0x78, 0x20, 0x25, 0x78,
+0x20, 0x25, 0x77, 0x20, 0x25, 0x77, 0x1e, 0x23, 0x73, 0x1e, 0x23, 0x73,
+0x1e, 0x23, 0x72, 0x1e, 0x23, 0x72, 0x1e, 0x23, 0x70, 0x1e, 0x23, 0x70,
+0x1d, 0x23, 0x6f, 0x1d, 0x23, 0x6f, 0x1d, 0x21, 0x6c, 0x1d, 0x21, 0x6c,
+0x1d, 0x21, 0x6b, 0x1a, 0x21, 0x6b, 0x1a, 0x20, 0x6a, 0x1a, 0x20, 0x6a,
+0x1a, 0x20, 0x67, 0x1a, 0x20, 0x67, 0x1a, 0x20, 0x67, 0x19, 0x1e, 0x66,
+0x19, 0x1e, 0x66, 0x19, 0x1e, 0x65, 0x19, 0x1e, 0x65, 0x0c, 0x0e, 0x2e,
+0x1a, 0x20, 0x62, 0x2c, 0x36, 0xa2, 0x33, 0x3d, 0xb2, 0x32, 0x39, 0xa7,
+0x33, 0x3a, 0xaa, 0x34, 0x3d, 0xac, 0x36, 0x3f, 0xad, 0x38, 0x40, 0xb0,
+0x3a, 0x44, 0xb2, 0x3e, 0x46, 0xb3, 0x40, 0x4a, 0xb7, 0x44, 0x4e, 0xb9,
+0x46, 0x4f, 0xba, 0x4a, 0x54, 0xbe, 0x4a, 0x55, 0xbf, 0x47, 0x52, 0xc1,
+0x45, 0x4f, 0xc5, 0x41, 0x4b, 0xc6, 0x3f, 0x47, 0xc9, 0x3d, 0x46, 0xcb,
+0x39, 0x45, 0xcf, 0x3a, 0x45, 0xd3, 0x40, 0x4a, 0xd4, 0x45, 0x4f, 0xd6,
+0x4a, 0x55, 0xda, 0x51, 0x5f, 0xdc, 0x5a, 0x67, 0xe0, 0x51, 0x5b, 0xe4,
+0x45, 0x51, 0xe6, 0x3e, 0x47, 0xea, 0x36, 0x41, 0xed, 0x33, 0x3e, 0xf0,
+0x39, 0x44, 0xf5, 0x40, 0x4c, 0xf7, 0x4b, 0x59, 0xfc, 0x5a, 0x67, 0xff,
+0x5c, 0x6a, 0xff, 0x60, 0x6d, 0xff, 0x62, 0x73, 0xff, 0x66, 0x75, 0xff,
+0x68, 0x77, 0xff, 0x6c, 0x7c, 0xff, 0x6c, 0x7c, 0xff, 0x62, 0x70, 0xff,
+0x5a, 0x68, 0xff, 0x52, 0x60, 0xff, 0x4f, 0x5f, 0xff, 0x4b, 0x5a, 0xff,
+0x59, 0x68, 0xff, 0x81, 0x92, 0xff, 0x2b, 0x34, 0x67, 0x83, 0x96, 0xff,
+0x6d, 0x7d, 0xff, 0x5c, 0x6d, 0xff, 0x51, 0x61, 0xff, 0x67, 0x7b, 0xff,
+0x67, 0x76, 0xdc, 0x51, 0x5f, 0xad, 0x62, 0x71, 0xd5, 0x73, 0x83, 0xfd,
+0x7c, 0x8e, 0xff, 0x7c, 0x8f, 0xff, 0x67, 0x7b, 0xff, 0x71, 0x84, 0xff,
+0x6d, 0x7e, 0xff, 0x5b, 0x6d, 0xff, 0x64, 0x77, 0xff, 0x83, 0x98, 0xff,
+0x77, 0x8c, 0xff, 0x6c, 0x7e, 0xff, 0x66, 0x77, 0xff, 0x5f, 0x71, 0xff,
+0x56, 0x68, 0xff, 0x6d, 0x81, 0xff, 0x56, 0x66, 0xc1, 0x84, 0x99, 0xff,
+0x61, 0x73, 0xff, 0x71, 0x87, 0xff, 0x8b, 0x9e, 0xff, 0x71, 0x84, 0xff,
+0x5f, 0x70, 0xff, 0x67, 0x7a, 0xff, 0x6f, 0x81, 0xff, 0x76, 0x88, 0xff,
+0x7e, 0x91, 0xff, 0x7a, 0x8b, 0xff, 0x6f, 0x7e, 0xff, 0x64, 0x75, 0xff,
+0x66, 0x75, 0xff, 0x62, 0x73, 0xff, 0x61, 0x70, 0xff, 0x5c, 0x6c, 0xff,
+0x59, 0x67, 0xff, 0x5a, 0x68, 0xff, 0x5c, 0x6d, 0xff, 0x61, 0x6f, 0xff,
+0x66, 0x76, 0xff, 0x6c, 0x7a, 0xff, 0x67, 0x75, 0xf0, 0x5a, 0x64, 0xc6,
+0x61, 0x6f, 0xe1, 0x62, 0x70, 0xfc, 0x5a, 0x66, 0xf7, 0x51, 0x5c, 0xf5,
+0x4e, 0x5a, 0xf0, 0x4f, 0x5b, 0xed, 0x51, 0x5f, 0xea, 0x54, 0x60, 0xe7,
+0x55, 0x61, 0xe2, 0x52, 0x5c, 0xe0, 0x4b, 0x55, 0xdc, 0x45, 0x4f, 0xda,
+0x3f, 0x4b, 0xd6, 0x3a, 0x45, 0xd4, 0x38, 0x40, 0xd3, 0x38, 0x40, 0xce,
+0x38, 0x3f, 0xcb, 0x38, 0x3f, 0xc8, 0x38, 0x40, 0xc6, 0x36, 0x40, 0xc4,
+0x36, 0x40, 0xc1, 0x36, 0x40, 0xbf, 0x36, 0x3f, 0xbb, 0x36, 0x3f, 0xba,
+0x36, 0x3f, 0xb8, 0x36, 0x3e, 0xb4, 0x36, 0x3e, 0xb3, 0x34, 0x3d, 0xb0,
+0x34, 0x3e, 0xae, 0x34, 0x3d, 0xac, 0x34, 0x3d, 0xac, 0x33, 0x3a, 0xa9,
+0x32, 0x39, 0xa7, 0x32, 0x39, 0xa5, 0x30, 0x38, 0xa3, 0x2f, 0x36, 0xa1,
+0x2f, 0x36, 0x9f, 0x2d, 0x34, 0x9d, 0x2d, 0x34, 0x9c, 0x2b, 0x33, 0x99,
+0x2a, 0x32, 0x98, 0x2a, 0x32, 0x97, 0x2a, 0x30, 0x96, 0x29, 0x2f, 0x94,
+0x27, 0x2f, 0x92, 0x27, 0x2d, 0x8f, 0x25, 0x2b, 0x8e, 0x24, 0x2b, 0x8c,
+0x24, 0x2a, 0x8b, 0x24, 0x2a, 0x8b, 0x23, 0x29, 0x89, 0x23, 0x29, 0x88,
+0x22, 0x27, 0x87, 0x22, 0x27, 0x84, 0x1f, 0x25, 0x83, 0x1f, 0x25, 0x82,
+0x1f, 0x24, 0x81, 0x1e, 0x24, 0x81, 0x1e, 0x24, 0x7e, 0x1e, 0x24, 0x7d,
+0x1e, 0x24, 0x7c, 0x1e, 0x24, 0x7b, 0x1e, 0x24, 0x7b, 0x1e, 0x24, 0x7a,
+0x1e, 0x24, 0x77, 0x1e, 0x24, 0x77, 0x1e, 0x24, 0x76, 0x1e, 0x23, 0x75,
+0x1e, 0x24, 0x75, 0x1e, 0x23, 0x73, 0x1e, 0x23, 0x71, 0x1e, 0x23, 0x71,
+0x1e, 0x23, 0x70, 0x1d, 0x22, 0x6d, 0x1d, 0x22, 0x6d, 0x1d, 0x22, 0x6d,
+0x1d, 0x22, 0x6d, 0x1d, 0x22, 0x6c, 0x1d, 0x22, 0x6a, 0x1c, 0x22, 0x68,
+0x1c, 0x22, 0x67, 0x1c, 0x22, 0x67, 0x1c, 0x1f, 0x66, 0x1c, 0x1f, 0x66,
+0x19, 0x1e, 0x66, 0x19, 0x1e, 0x64, 0x19, 0x1e, 0x62, 0x19, 0x1e, 0x62,
+0x18, 0x1e, 0x61, 0x18, 0x1e, 0x61, 0x18, 0x1d, 0x60, 0x18, 0x1d, 0x60,
+0x18, 0x1d, 0x60, 0x17, 0x1c, 0x5f, 0x17, 0x1c, 0x5f, 0x17, 0x1c, 0x5c,
+0x17, 0x1c, 0x5c, 0x17, 0x1c, 0x5b, 0x16, 0x1a, 0x57, 0x04, 0x04, 0x0f,
+0x12, 0x16, 0x44, 0x25, 0x2d, 0x89, 0x28, 0x30, 0x92, 0x25, 0x2b, 0x82,
+0x26, 0x2b, 0x80, 0x26, 0x2c, 0x82, 0x28, 0x2d, 0x83, 0x29, 0x2f, 0x85,
+0x2a, 0x30, 0x86, 0x2c, 0x32, 0x88, 0x2e, 0x34, 0x8a, 0x30, 0x36, 0x8b,
+0x31, 0x3b, 0x8d, 0x34, 0x3c, 0x8f, 0x37, 0x3f, 0x91, 0x3b, 0x42, 0x93,
+0x3b, 0x42, 0x95, 0x37, 0x40, 0x98, 0x34, 0x3d, 0x99, 0x32, 0x3b, 0x9b,
+0x31, 0x39, 0x9d, 0x2e, 0x36, 0x9e, 0x2c, 0x33, 0xa1, 0x2f, 0x37, 0xa4,
+0x32, 0x3c, 0xa5, 0x37, 0x41, 0xa7, 0x3e, 0x46, 0xab, 0x43, 0x4e, 0xad,
+0x42, 0x4c, 0xaf, 0x39, 0x42, 0xb3, 0x30, 0x3b, 0xb5, 0x2b, 0x33, 0xb7,
+0x28, 0x2f, 0xb9, 0x2b, 0x33, 0xbd, 0x31, 0x3b, 0xbf, 0x39, 0x42, 0xc2,
+0x44, 0x4f, 0xc6, 0x48, 0x53, 0xc8, 0x4a, 0x56, 0xcb, 0x4e, 0x58, 0xce,
+0x51, 0x5c, 0xd1, 0x52, 0x5f, 0xd4, 0x54, 0x61, 0xd8, 0x54, 0x60, 0xdb,
+0x4c, 0x56, 0xde, 0x44, 0x50, 0xe1, 0x3f, 0x4a, 0xe5, 0x3c, 0x46, 0xe7,
+0x39, 0x43, 0xeb, 0x4e, 0x5a, 0xee, 0x41, 0x4a, 0x8b, 0x41, 0x4d, 0x8d,
+0x5f, 0x6d, 0xf8, 0x4e, 0x5b, 0xfb, 0x42, 0x50, 0xfe, 0x44, 0x52, 0xff,
+0x68, 0x78, 0xff, 0x2c, 0x33, 0x64, 0x41, 0x4c, 0x8c, 0x49, 0x53, 0x9c,
+0x51, 0x5d, 0xb0, 0x67, 0x77, 0xff, 0x52, 0x61, 0xff, 0x58, 0x67, 0xff,
+0x57, 0x67, 0xff, 0x49, 0x57, 0xff, 0x4f, 0x5d, 0xff, 0x69, 0x79, 0xff,
+0x5f, 0x6e, 0xff, 0x54, 0x63, 0xff, 0x50, 0x5f, 0xff, 0x4a, 0x58, 0xff,
+0x44, 0x52, 0xff, 0x5d, 0x6d, 0xff, 0x1d, 0x24, 0x4e, 0x60, 0x6e, 0xff,
+0x4f, 0x5c, 0xff, 0x60, 0x6f, 0xfe, 0x63, 0x73, 0xfc, 0x51, 0x60, 0xf9,
+0x4d, 0x5a, 0xf7, 0x53, 0x62, 0xf3, 0x5b, 0x68, 0xf1, 0x60, 0x6e, 0xee,
+0x63, 0x72, 0xec, 0x58, 0x67, 0xea, 0x50, 0x5d, 0xe6, 0x4f, 0x5b, 0xe4,
+0x4e, 0x5b, 0xe1, 0x4c, 0x57, 0xde, 0x48, 0x54, 0xdc, 0x45, 0x51, 0xda,
+0x45, 0x51, 0xd8, 0x49, 0x54, 0xd5, 0x4d, 0x57, 0xd2, 0x50, 0x5c, 0xd0,
+0x55, 0x60, 0xcc, 0x4c, 0x55, 0xad, 0x40, 0x4a, 0x90, 0x4c, 0x56, 0xae,
+0x4d, 0x57, 0xc2, 0x44, 0x4f, 0xbf, 0x3e, 0x46, 0xbd, 0x3d, 0x45, 0xb9,
+0x3e, 0x48, 0xb7, 0x40, 0x49, 0xb5, 0x41, 0x4c, 0xb1, 0x44, 0x4d, 0xb0,
+0x3e, 0x45, 0xad, 0x39, 0x41, 0xaa, 0x32, 0x3b, 0xa7, 0x2f, 0x39, 0xa6,
+0x2c, 0x33, 0xa3, 0x2b, 0x31, 0xa1, 0x2b, 0x31, 0x9e, 0x2b, 0x32, 0x9d,
+0x2a, 0x32, 0x9b, 0x2a, 0x31, 0x99, 0x2a, 0x31, 0x97, 0x2b, 0x32, 0x94,
+0x2b, 0x32, 0x93, 0x2a, 0x31, 0x91, 0x2a, 0x31, 0x8f, 0x2a, 0x30, 0x8c,
+0x2a, 0x30, 0x8b, 0x2a, 0x2f, 0x89, 0x2a, 0x2f, 0x87, 0x29, 0x2f, 0x86,
+0x29, 0x2e, 0x83, 0x28, 0x2e, 0x82, 0x28, 0x2d, 0x81, 0x27, 0x2c, 0x7f,
+0x26, 0x2b, 0x7e, 0x24, 0x2a, 0x7c, 0x24, 0x2a, 0x7b, 0x22, 0x29, 0x79,
+0x21, 0x28, 0x78, 0x21, 0x28, 0x77, 0x21, 0x28, 0x76, 0x20, 0x26, 0x74,
+0x1f, 0x26, 0x73, 0x1f, 0x24, 0x72, 0x1e, 0x22, 0x70, 0x1d, 0x21, 0x6f,
+0x1c, 0x21, 0x6e, 0x1c, 0x20, 0x6d, 0x1c, 0x20, 0x6c, 0x1b, 0x1f, 0x6a,
+0x1b, 0x1f, 0x69, 0x1a, 0x1e, 0x68, 0x19, 0x1d, 0x67, 0x19, 0x1e, 0x66,
+0x19, 0x1d, 0x65, 0x18, 0x1c, 0x64, 0x18, 0x1c, 0x63, 0x18, 0x1c, 0x62,
+0x18, 0x1c, 0x62, 0x18, 0x1c, 0x61, 0x18, 0x1c, 0x60, 0x18, 0x1b, 0x5f,
+0x18, 0x1b, 0x5d, 0x18, 0x1c, 0x5d, 0x18, 0x1b, 0x5c, 0x18, 0x1b, 0x5b,
+0x18, 0x1b, 0x5a, 0x18, 0x1b, 0x5a, 0x18, 0x1b, 0x58, 0x18, 0x1b, 0x57,
+0x17, 0x1b, 0x57, 0x17, 0x1b, 0x56, 0x17, 0x1b, 0x55, 0x17, 0x1b, 0x55,
+0x17, 0x1b, 0x54, 0x16, 0x1a, 0x53, 0x16, 0x1a, 0x52, 0x16, 0x1a, 0x52,
+0x16, 0x1a, 0x52, 0x16, 0x19, 0x51, 0x16, 0x19, 0x51, 0x15, 0x19, 0x4f,
+0x15, 0x19, 0x4f, 0x15, 0x18, 0x4e, 0x14, 0x18, 0x4d, 0x14, 0x18, 0x4d,
+0x14, 0x17, 0x4d, 0x14, 0x17, 0x4c, 0x14, 0x17, 0x4a, 0x14, 0x17, 0x4a,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x48, 0x10, 0x15, 0x46, 0x10, 0x15, 0x46, 0x10, 0x15, 0x45,
+0x10, 0x15, 0x45, 0x10, 0x15, 0x44, 0x0f, 0x12, 0x3e, 0x01, 0x01, 0x06,
+0x12, 0x15, 0x44, 0x25, 0x2c, 0x8a, 0x27, 0x2e, 0x8f, 0x21, 0x28, 0x7a,
+0x1f, 0x25, 0x72, 0x1f, 0x25, 0x73, 0x21, 0x26, 0x75, 0x22, 0x28, 0x76,
+0x23, 0x29, 0x77, 0x25, 0x2b, 0x79, 0x26, 0x2d, 0x7b, 0x27, 0x2e, 0x7c,
+0x29, 0x30, 0x7e, 0x2c, 0x32, 0x80, 0x2e, 0x35, 0x81, 0x31, 0x38, 0x83,
+0x33, 0x3b, 0x85, 0x36, 0x3e, 0x87, 0x35, 0x3d, 0x88, 0x32, 0x3b, 0x8a,
+0x30, 0x37, 0x8c, 0x2d, 0x35, 0x8e, 0x2c, 0x32, 0x90, 0x29, 0x31, 0x92,
+0x29, 0x31, 0x94, 0x2c, 0x34, 0x96, 0x30, 0x39, 0x98, 0x35, 0x3e, 0x9a,
+0x3b, 0x43, 0x9d, 0x40, 0x49, 0x9f, 0x36, 0x40, 0xa2, 0x2f, 0x37, 0xa4,
+0x29, 0x31, 0xa7, 0x24, 0x2c, 0xa9, 0x25, 0x2d, 0xab, 0x2a, 0x33, 0xae,
+0x32, 0x3b, 0xb1, 0x3e, 0x47, 0xb3, 0x42, 0x4c, 0xb6, 0x44, 0x4f, 0xb9,
+0x47, 0x52, 0xbc, 0x4a, 0x55, 0xbf, 0x4b, 0x57, 0xc2, 0x4e, 0x59, 0xc5,
+0x4b, 0x56, 0xc8, 0x44, 0x4d, 0xcb, 0x3c, 0x46, 0xce, 0x38, 0x42, 0xd1,
+0x34, 0x3f, 0xd4, 0x38, 0x42, 0xd7, 0x52, 0x60, 0xda, 0x11, 0x15, 0x31,
+0x52, 0x5e, 0xb8, 0x4c, 0x59, 0xe3, 0x40, 0x4b, 0xe6, 0x37, 0x43, 0xe7,
+0x50, 0x5d, 0xe7, 0x13, 0x18, 0x36, 0x1d, 0x24, 0x48, 0x2e, 0x37, 0x67,
+0x36, 0x3f, 0x75, 0x56, 0x64, 0xc6, 0x50, 0x5e, 0xe4, 0x51, 0x5f, 0xe3,
+0x54, 0x63, 0xe3, 0x44, 0x52, 0xe3, 0x48, 0x56, 0xe3, 0x58, 0x66, 0xcf,
+0x58, 0x66, 0xe2, 0x4e, 0x5d, 0xe2, 0x4a, 0x58, 0xe2, 0x43, 0x51, 0xe1,
+0x3f, 0x4c, 0xe1, 0x56, 0x65, 0xcd, 0x27, 0x2e, 0x5c, 0x50, 0x5e, 0xe1,
+0x4e, 0x5c, 0xe1, 0x54, 0x61, 0xc5, 0x54, 0x63, 0xe1, 0x44, 0x50, 0xe1,
+0x47, 0x54, 0xdf, 0x4f, 0x5c, 0xdd, 0x55, 0x62, 0xda, 0x4f, 0x5c, 0xbf,
+0x55, 0x62, 0xd5, 0x4c, 0x59, 0xd2, 0x47, 0x53, 0xd0, 0x47, 0x52, 0xce,
+0x45, 0x51, 0xcc, 0x43, 0x4e, 0xca, 0x40, 0x4b, 0xc7, 0x3f, 0x49, 0xc5,
+0x43, 0x4d, 0xc2, 0x45, 0x50, 0xbf, 0x4a, 0x54, 0xbe, 0x4b, 0x55, 0xb2,
+0x41, 0x4b, 0x94, 0x36, 0x3d, 0x76, 0x44, 0x4d, 0x9c, 0x44, 0x4f, 0xb1,
+0x3c, 0x46, 0xae, 0x36, 0x3f, 0xac, 0x37, 0x41, 0xa9, 0x3a, 0x42, 0xa7,
+0x3c, 0x44, 0xa4, 0x3e, 0x47, 0xa2, 0x3b, 0x43, 0x9f, 0x35, 0x3e, 0x9c,
+0x30, 0x38, 0x9b, 0x2d, 0x34, 0x98, 0x29, 0x30, 0x96, 0x26, 0x2d, 0x94,
+0x26, 0x2d, 0x92, 0x27, 0x2d, 0x8f, 0x26, 0x2d, 0x8d, 0x26, 0x2e, 0x8c,
+0x26, 0x2d, 0x8a, 0x26, 0x2d, 0x88, 0x26, 0x2d, 0x86, 0x26, 0x2d, 0x84,
+0x26, 0x2c, 0x82, 0x26, 0x2c, 0x81, 0x26, 0x2b, 0x7f, 0x25, 0x2b, 0x7d,
+0x26, 0x2b, 0x7c, 0x25, 0x2b, 0x7a, 0x25, 0x2a, 0x78, 0x24, 0x2a, 0x77,
+0x23, 0x28, 0x75, 0x22, 0x27, 0x73, 0x22, 0x27, 0x72, 0x21, 0x26, 0x71,
+0x20, 0x25, 0x70, 0x20, 0x25, 0x6f, 0x1e, 0x24, 0x6d, 0x1e, 0x23, 0x6c,
+0x1e, 0x23, 0x6b, 0x1d, 0x21, 0x69, 0x1c, 0x21, 0x68, 0x1b, 0x20, 0x67,
+0x1b, 0x1f, 0x66, 0x19, 0x1e, 0x65, 0x19, 0x1d, 0x63, 0x18, 0x1d, 0x62,
+0x18, 0x1c, 0x61, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x15, 0x19, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x19, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x19, 0x58, 0x15, 0x19, 0x58, 0x15, 0x19, 0x57,
+0x15, 0x18, 0x56, 0x15, 0x18, 0x55, 0x15, 0x18, 0x54, 0x15, 0x18, 0x53,
+0x15, 0x18, 0x53, 0x14, 0x18, 0x52, 0x14, 0x18, 0x51, 0x14, 0x18, 0x50,
+0x14, 0x18, 0x50, 0x14, 0x18, 0x4f, 0x14, 0x18, 0x4e, 0x14, 0x18, 0x4e,
+0x13, 0x17, 0x4d, 0x13, 0x17, 0x4c, 0x13, 0x17, 0x4c, 0x13, 0x17, 0x4b,
+0x13, 0x17, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x12, 0x16, 0x48,
+0x12, 0x16, 0x47, 0x11, 0x15, 0x47, 0x11, 0x15, 0x47, 0x11, 0x15, 0x45,
+0x11, 0x14, 0x45, 0x11, 0x14, 0x44, 0x10, 0x14, 0x44, 0x10, 0x14, 0x43,
+0x10, 0x14, 0x43, 0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x0f, 0x13, 0x41,
+0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f,
+0x0e, 0x12, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3d,
+0x0e, 0x11, 0x3d, 0x0e, 0x11, 0x3d, 0x0d, 0x0f, 0x36, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x45, 0x25, 0x2b, 0x8a, 0x27, 0x2d, 0x90, 0x22, 0x27, 0x7b,
+0x1e, 0x24, 0x73, 0x1f, 0x25, 0x74, 0x20, 0x26, 0x76, 0x21, 0x27, 0x77,
+0x22, 0x28, 0x78, 0x24, 0x2a, 0x7a, 0x25, 0x2b, 0x7b, 0x26, 0x2c, 0x7d,
+0x27, 0x2e, 0x7f, 0x29, 0x30, 0x80, 0x2c, 0x32, 0x82, 0x2d, 0x35, 0x84,
+0x31, 0x37, 0x86, 0x33, 0x3b, 0x87, 0x36, 0x3e, 0x89, 0x3a, 0x41, 0x8b,
+0x37, 0x3f, 0x8d, 0x35, 0x3c, 0x8f, 0x32, 0x3a, 0x91, 0x2f, 0x36, 0x93,
+0x2c, 0x34, 0x95, 0x2a, 0x31, 0x98, 0x2c, 0x33, 0x99, 0x30, 0x38, 0x9c,
+0x35, 0x3e, 0x9e, 0x3c, 0x44, 0xa1, 0x43, 0x4c, 0xa3, 0x3d, 0x46, 0xa6,
+0x33, 0x3c, 0xa8, 0x2b, 0x34, 0xaa, 0x26, 0x2f, 0xae, 0x25, 0x2d, 0xb0,
+0x2b, 0x33, 0xb3, 0x32, 0x3c, 0xb6, 0x3f, 0x47, 0xb9, 0x45, 0x4f, 0xbc,
+0x48, 0x52, 0xbe, 0x4a, 0x56, 0xc2, 0x4e, 0x59, 0xc5, 0x50, 0x5b, 0xc8,
+0x51, 0x5d, 0xcb, 0x4d, 0x58, 0xce, 0x43, 0x4f, 0xd1, 0x3c, 0x47, 0xd5,
+0x38, 0x43, 0xd7, 0x35, 0x40, 0xdb, 0x41, 0x4d, 0xde, 0x4c, 0x56, 0xa8,
+0x1c, 0x21, 0x45, 0x5c, 0x6a, 0xe7, 0x49, 0x56, 0xe7, 0x3f, 0x4b, 0xe7,
+0x46, 0x53, 0xe6, 0x3c, 0x45, 0x81, 0x14, 0x19, 0x39, 0x15, 0x1a, 0x3a,
+0x1d, 0x23, 0x48, 0x3a, 0x43, 0x7e, 0x58, 0x67, 0xe3, 0x55, 0x64, 0xe3,
+0x5c, 0x6b, 0xe3, 0x4a, 0x57, 0xe2, 0x4c, 0x5b, 0xe2, 0x4c, 0x59, 0xab,
+0x5d, 0x6d, 0xe2, 0x53, 0x62, 0xe2, 0x4e, 0x5c, 0xe1, 0x47, 0x55, 0xe1,
+0x47, 0x55, 0xe1, 0x2d, 0x35, 0x68, 0x32, 0x3b, 0x73, 0x4c, 0x5a, 0xe0,
+0x59, 0x68, 0xe0, 0x45, 0x50, 0x9d, 0x52, 0x60, 0xe0, 0x48, 0x55, 0xe0,
+0x4f, 0x5d, 0xe0, 0x57, 0x65, 0xe1, 0x54, 0x62, 0xcd, 0x52, 0x5f, 0xc6,
+0x52, 0x5f, 0xd9, 0x4a, 0x57, 0xd6, 0x49, 0x56, 0xd4, 0x49, 0x55, 0xd2,
+0x46, 0x52, 0xd0, 0x43, 0x4d, 0xcd, 0x41, 0x4b, 0xca, 0x44, 0x4f, 0xc8,
+0x48, 0x54, 0xc5, 0x4c, 0x58, 0xc3, 0x4a, 0x54, 0xae, 0x3f, 0x47, 0x8c,
+0x30, 0x38, 0x6a, 0x46, 0x50, 0xa1, 0x46, 0x51, 0xb6, 0x3d, 0x48, 0xb3,
+0x39, 0x42, 0xb1, 0x3b, 0x43, 0xad, 0x3e, 0x46, 0xab, 0x3f, 0x48, 0xa8,
+0x41, 0x4a, 0xa6, 0x3c, 0x44, 0xa3, 0x35, 0x3d, 0xa1, 0x30, 0x38, 0x9e,
+0x2b, 0x33, 0x9b, 0x29, 0x30, 0x9a, 0x28, 0x2e, 0x97, 0x28, 0x2f, 0x95,
+0x28, 0x2f, 0x93, 0x27, 0x2f, 0x91, 0x28, 0x2f, 0x8e, 0x28, 0x30, 0x8d,
+0x28, 0x2f, 0x8b, 0x28, 0x2e, 0x89, 0x28, 0x2e, 0x87, 0x28, 0x2e, 0x85,
+0x28, 0x2e, 0x83, 0x27, 0x2d, 0x81, 0x27, 0x2d, 0x80, 0x27, 0x2d, 0x7e,
+0x26, 0x2c, 0x7c, 0x25, 0x2b, 0x7b, 0x24, 0x2a, 0x79, 0x24, 0x29, 0x77,
+0x23, 0x28, 0x76, 0x22, 0x27, 0x74, 0x21, 0x26, 0x73, 0x20, 0x26, 0x71,
+0x20, 0x25, 0x70, 0x1f, 0x24, 0x6f, 0x1e, 0x24, 0x6d, 0x1d, 0x22, 0x6c,
+0x1d, 0x21, 0x6b, 0x1c, 0x21, 0x6a, 0x1b, 0x20, 0x69, 0x1a, 0x1f, 0x67,
+0x1a, 0x1e, 0x66, 0x19, 0x1d, 0x65, 0x18, 0x1d, 0x64, 0x18, 0x1c, 0x63,
+0x18, 0x1b, 0x62, 0x17, 0x1b, 0x61, 0x17, 0x1b, 0x60, 0x16, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x16, 0x1a, 0x5d, 0x16, 0x1a, 0x5c, 0x16, 0x1a, 0x5b,
+0x16, 0x1a, 0x5a, 0x16, 0x1a, 0x59, 0x16, 0x1a, 0x58, 0x15, 0x19, 0x57,
+0x15, 0x19, 0x56, 0x15, 0x19, 0x55, 0x15, 0x19, 0x54, 0x15, 0x19, 0x54,
+0x15, 0x19, 0x53, 0x15, 0x19, 0x52, 0x15, 0x19, 0x51, 0x15, 0x19, 0x51,
+0x14, 0x19, 0x50, 0x14, 0x19, 0x4f, 0x14, 0x19, 0x4e, 0x14, 0x19, 0x4e,
+0x14, 0x19, 0x4d, 0x14, 0x17, 0x4c, 0x14, 0x17, 0x4c, 0x13, 0x17, 0x4b,
+0x13, 0x17, 0x4a, 0x13, 0x17, 0x4a, 0x12, 0x16, 0x48, 0x12, 0x15, 0x48,
+0x12, 0x15, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x45,
+0x11, 0x14, 0x45, 0x10, 0x14, 0x44, 0x10, 0x14, 0x44, 0x10, 0x13, 0x43,
+0x10, 0x13, 0x43, 0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0e, 0x12, 0x3f,
+0x0e, 0x12, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3d,
+0x0e, 0x11, 0x3d, 0x0e, 0x11, 0x3d, 0x0d, 0x0f, 0x36, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x45, 0x27, 0x2d, 0x8b, 0x28, 0x2e, 0x90, 0x22, 0x27, 0x7c,
+0x1e, 0x23, 0x73, 0x1f, 0x24, 0x75, 0x1f, 0x25, 0x76, 0x20, 0x26, 0x77,
+0x21, 0x28, 0x79, 0x22, 0x28, 0x7a, 0x23, 0x29, 0x7c, 0x25, 0x2b, 0x7e,
+0x26, 0x2d, 0x7f, 0x27, 0x2e, 0x81, 0x2a, 0x30, 0x83, 0x2c, 0x32, 0x85,
+0x2e, 0x35, 0x87, 0x31, 0x37, 0x88, 0x33, 0x3b, 0x8a, 0x36, 0x3e, 0x8c,
+0x3a, 0x42, 0x8e, 0x3d, 0x44, 0x90, 0x3a, 0x42, 0x93, 0x36, 0x3f, 0x94,
+0x34, 0x3b, 0x97, 0x30, 0x38, 0x98, 0x2d, 0x35, 0x9b, 0x2c, 0x33, 0x9d,
+0x30, 0x38, 0xa0, 0x34, 0x3e, 0xa2, 0x3a, 0x43, 0xa5, 0x42, 0x4b, 0xa7,
+0x45, 0x4f, 0xa9, 0x39, 0x42, 0xad, 0x2f, 0x38, 0xaf, 0x28, 0x31, 0xb2,
+0x25, 0x2d, 0xb5, 0x2a, 0x32, 0xb8, 0x32, 0x3c, 0xbb, 0x3f, 0x49, 0xbe,
+0x48, 0x52, 0xc1, 0x4b, 0x56, 0xc4, 0x4f, 0x5a, 0xc8, 0x51, 0x5d, 0xcb,
+0x54, 0x60, 0xce, 0x55, 0x63, 0xd2, 0x4f, 0x5a, 0xd5, 0x44, 0x51, 0xd9,
+0x3d, 0x48, 0xdb, 0x39, 0x44, 0xdf, 0x35, 0x40, 0xe3, 0x4f, 0x5c, 0xe5,
+0x13, 0x17, 0x35, 0x3a, 0x43, 0x7d, 0x56, 0x64, 0xe7, 0x48, 0x54, 0xe7,
+0x3f, 0x4b, 0xe6, 0x5c, 0x6a, 0xd6, 0x16, 0x1b, 0x3c, 0x16, 0x1b, 0x3c,
+0x16, 0x1b, 0x3d, 0x16, 0x1b, 0x3d, 0x59, 0x68, 0xd0, 0x59, 0x69, 0xe2,
+0x58, 0x67, 0xcf, 0x4f, 0x5e, 0xe2, 0x4f, 0x5e, 0xe1, 0x3d, 0x48, 0x89,
+0x56, 0x64, 0xc7, 0x57, 0x67, 0xe1, 0x52, 0x61, 0xe0, 0x4a, 0x59, 0xe0,
+0x53, 0x62, 0xe0, 0x12, 0x17, 0x39, 0x3f, 0x4b, 0x90, 0x51, 0x60, 0xdf,
+0x47, 0x54, 0xa5, 0x4a, 0x56, 0xab, 0x4f, 0x5d, 0xdf, 0x50, 0x5d, 0xdf,
+0x58, 0x67, 0xdf, 0x53, 0x5f, 0xc4, 0x47, 0x52, 0xa3, 0x59, 0x67, 0xdf,
+0x4e, 0x5b, 0xdd, 0x4d, 0x59, 0xdb, 0x4d, 0x59, 0xd8, 0x4a, 0x56, 0xd6,
+0x45, 0x51, 0xd3, 0x42, 0x4e, 0xd1, 0x47, 0x52, 0xce, 0x4c, 0x57, 0xcc,
+0x50, 0x5b, 0xc9, 0x4b, 0x55, 0xad, 0x3b, 0x43, 0x83, 0x2f, 0x37, 0x67,
+0x48, 0x53, 0xa8, 0x48, 0x53, 0xbb, 0x3e, 0x49, 0xb9, 0x3c, 0x45, 0xb5,
+0x3f, 0x48, 0xb2, 0x41, 0x4b, 0xb0, 0x43, 0x4d, 0xac, 0x42, 0x4c, 0xaa,
+0x3b, 0x44, 0xa7, 0x35, 0x3d, 0xa5, 0x30, 0x37, 0xa2, 0x2c, 0x33, 0xa0,
+0x29, 0x30, 0x9d, 0x29, 0x30, 0x9b, 0x29, 0x31, 0x99, 0x29, 0x31, 0x96,
+0x2a, 0x31, 0x94, 0x2a, 0x31, 0x92, 0x2a, 0x31, 0x90, 0x29, 0x30, 0x8d,
+0x2a, 0x30, 0x8b, 0x2a, 0x30, 0x8a, 0x29, 0x30, 0x88, 0x28, 0x2f, 0x86,
+0x28, 0x30, 0x84, 0x28, 0x2f, 0x82, 0x27, 0x2e, 0x80, 0x26, 0x2d, 0x7f,
+0x25, 0x2c, 0x7d, 0x24, 0x2b, 0x7b, 0x24, 0x2a, 0x7a, 0x23, 0x29, 0x78,
+0x22, 0x28, 0x76, 0x22, 0x27, 0x75, 0x21, 0x26, 0x73, 0x21, 0x26, 0x72,
+0x1f, 0x25, 0x70, 0x1f, 0x24, 0x6f, 0x1e, 0x22, 0x6e, 0x1d, 0x22, 0x6c,
+0x1c, 0x20, 0x6c, 0x1b, 0x1f, 0x6a, 0x1a, 0x1f, 0x69, 0x1a, 0x1e, 0x68,
+0x19, 0x1e, 0x67, 0x18, 0x1d, 0x65, 0x18, 0x1c, 0x64, 0x17, 0x1c, 0x63,
+0x17, 0x1b, 0x62, 0x16, 0x1b, 0x61, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f,
+0x17, 0x1a, 0x5e, 0x17, 0x1b, 0x5d, 0x17, 0x1b, 0x5c, 0x16, 0x1a, 0x5b,
+0x17, 0x1b, 0x5a, 0x17, 0x1b, 0x59, 0x16, 0x1a, 0x58, 0x16, 0x1a, 0x57,
+0x16, 0x1a, 0x56, 0x16, 0x1a, 0x56, 0x16, 0x1a, 0x55, 0x16, 0x1a, 0x54,
+0x15, 0x1a, 0x53, 0x15, 0x1a, 0x52, 0x15, 0x1a, 0x52, 0x15, 0x1a, 0x51,
+0x15, 0x19, 0x50, 0x15, 0x19, 0x4f, 0x15, 0x19, 0x4f, 0x14, 0x19, 0x4e,
+0x14, 0x18, 0x4d, 0x14, 0x17, 0x4d, 0x13, 0x17, 0x4c, 0x13, 0x17, 0x4b,
+0x13, 0x17, 0x4b, 0x12, 0x16, 0x4a, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48,
+0x11, 0x15, 0x47, 0x11, 0x15, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x45,
+0x10, 0x14, 0x45, 0x10, 0x14, 0x44, 0x10, 0x14, 0x44, 0x10, 0x13, 0x43,
+0x10, 0x13, 0x43, 0x10, 0x13, 0x43, 0x10, 0x13, 0x42, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e,
+0x0e, 0x11, 0x3d, 0x0e, 0x11, 0x3d, 0x0d, 0x0f, 0x36, 0x01, 0x01, 0x05,
+0x13, 0x17, 0x45, 0x27, 0x2e, 0x8b, 0x28, 0x2f, 0x93, 0x22, 0x28, 0x7c,
+0x1f, 0x24, 0x74, 0x1f, 0x24, 0x75, 0x1f, 0x25, 0x77, 0x1f, 0x25, 0x78,
+0x20, 0x26, 0x79, 0x21, 0x28, 0x7b, 0x22, 0x29, 0x7d, 0x23, 0x29, 0x7f,
+0x25, 0x2b, 0x80, 0x26, 0x2d, 0x82, 0x27, 0x2e, 0x84, 0x29, 0x30, 0x86,
+0x2b, 0x31, 0x87, 0x2d, 0x34, 0x89, 0x30, 0x37, 0x8b, 0x33, 0x3b, 0x8d,
+0x35, 0x3e, 0x8f, 0x3a, 0x41, 0x91, 0x37, 0x3f, 0x85, 0x36, 0x3f, 0x81,
+0x3c, 0x44, 0x98, 0x38, 0x40, 0x9a, 0x34, 0x3d, 0x9d, 0x32, 0x3a, 0x9f,
+0x2e, 0x36, 0xa1, 0x30, 0x37, 0xa4, 0x34, 0x3d, 0xa6, 0x3b, 0x44, 0xa8,
+0x42, 0x4c, 0xac, 0x4b, 0x56, 0xae, 0x40, 0x4a, 0xb1, 0x35, 0x3e, 0xb4,
+0x2b, 0x34, 0xb7, 0x26, 0x2e, 0xba, 0x2a, 0x33, 0xbe, 0x32, 0x3c, 0xc1,
+0x3f, 0x4a, 0xc4, 0x4a, 0x56, 0xc7, 0x4e, 0x5a, 0xcb, 0x52, 0x5e, 0xce,
+0x54, 0x62, 0xd1, 0x57, 0x63, 0xd3, 0x59, 0x66, 0xd7, 0x50, 0x5c, 0xdc,
+0x44, 0x51, 0xe0, 0x3e, 0x49, 0xe3, 0x3a, 0x45, 0xe5, 0x3e, 0x4a, 0xe6,
+0x56, 0x63, 0xc3, 0x14, 0x19, 0x39, 0x50, 0x5c, 0xae, 0x53, 0x61, 0xe7,
+0x46, 0x53, 0xe6, 0x56, 0x65, 0xe5, 0x17, 0x1d, 0x3f, 0x17, 0x1d, 0x3f,
+0x17, 0x1d, 0x40, 0x17, 0x1d, 0x40, 0x41, 0x4c, 0x8e, 0x5e, 0x6d, 0xe2,
+0x51, 0x5e, 0xb7, 0x56, 0x66, 0xe1, 0x53, 0x63, 0xe1, 0x2a, 0x32, 0x61,
+0x4b, 0x58, 0xa9, 0x5c, 0x6c, 0xdf, 0x56, 0x66, 0xdf, 0x4d, 0x5c, 0xdf,
+0x52, 0x61, 0xc2, 0x12, 0x18, 0x3b, 0x49, 0x56, 0xa9, 0x55, 0x65, 0xcf,
+0x18, 0x1f, 0x45, 0x51, 0x5f, 0xc0, 0x51, 0x60, 0xde, 0x59, 0x68, 0xdd,
+0x4c, 0x58, 0xb1, 0x3a, 0x44, 0x85, 0x48, 0x53, 0xa6, 0x57, 0x65, 0xdf,
+0x50, 0x5e, 0xe0, 0x4f, 0x5d, 0xe0, 0x4e, 0x5a, 0xdd, 0x48, 0x54, 0xda,
+0x45, 0x50, 0xd8, 0x49, 0x55, 0xd5, 0x4f, 0x5b, 0xd2, 0x54, 0x61, 0xcf,
+0x4a, 0x55, 0xa9, 0x38, 0x40, 0x7a, 0x2e, 0x36, 0x65, 0x4b, 0x56, 0xad,
+0x49, 0x54, 0xc1, 0x3f, 0x4a, 0xbd, 0x3f, 0x49, 0xbb, 0x42, 0x4c, 0xb8,
+0x45, 0x4f, 0xb5, 0x48, 0x52, 0xb1, 0x42, 0x4b, 0xaf, 0x3b, 0x43, 0xac,
+0x34, 0x3d, 0xa9, 0x2f, 0x38, 0xa7, 0x2b, 0x33, 0xa4, 0x2b, 0x32, 0xa1,
+0x2b, 0x33, 0x9f, 0x2b, 0x33, 0x9c, 0x2c, 0x33, 0x9a, 0x2c, 0x33, 0x98,
+0x2c, 0x33, 0x95, 0x2c, 0x33, 0x93, 0x2c, 0x32, 0x91, 0x2b, 0x32, 0x8f,
+0x2b, 0x32, 0x8c, 0x2b, 0x32, 0x8a, 0x2b, 0x32, 0x89, 0x2a, 0x31, 0x87,
+0x29, 0x30, 0x85, 0x28, 0x2f, 0x83, 0x27, 0x2e, 0x81, 0x26, 0x2d, 0x7f,
+0x25, 0x2c, 0x7e, 0x24, 0x2b, 0x7c, 0x24, 0x2a, 0x7a, 0x23, 0x29, 0x79,
+0x22, 0x28, 0x77, 0x21, 0x27, 0x75, 0x20, 0x25, 0x74, 0x1f, 0x25, 0x72,
+0x1e, 0x24, 0x71, 0x1e, 0x22, 0x6f, 0x1d, 0x21, 0x6e, 0x1c, 0x20, 0x6c,
+0x1b, 0x20, 0x6c, 0x1a, 0x20, 0x6b, 0x1a, 0x1e, 0x69, 0x19, 0x1e, 0x68,
+0x18, 0x1d, 0x67, 0x18, 0x1d, 0x66, 0x18, 0x1c, 0x65, 0x17, 0x1c, 0x63,
+0x18, 0x1b, 0x62, 0x17, 0x1c, 0x61, 0x18, 0x1c, 0x60, 0x18, 0x1c, 0x5f,
+0x17, 0x1b, 0x5e, 0x17, 0x1c, 0x5d, 0x17, 0x1c, 0x5c, 0x17, 0x1b, 0x5b,
+0x18, 0x1c, 0x5a, 0x18, 0x1c, 0x59, 0x18, 0x1c, 0x58, 0x17, 0x1b, 0x57,
+0x17, 0x1c, 0x57, 0x17, 0x1b, 0x56, 0x17, 0x1b, 0x55, 0x16, 0x1b, 0x54,
+0x16, 0x1a, 0x53, 0x16, 0x1a, 0x53, 0x15, 0x1a, 0x52, 0x15, 0x1a, 0x51,
+0x15, 0x19, 0x50, 0x15, 0x19, 0x50, 0x14, 0x19, 0x4f, 0x14, 0x19, 0x4e,
+0x14, 0x18, 0x4d, 0x13, 0x17, 0x4d, 0x13, 0x17, 0x4c, 0x13, 0x16, 0x4b,
+0x13, 0x16, 0x4b, 0x12, 0x16, 0x4a, 0x12, 0x15, 0x49, 0x11, 0x15, 0x48,
+0x11, 0x15, 0x47, 0x11, 0x15, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x10, 0x14, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x10, 0x13, 0x43,
+0x10, 0x13, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e,
+0x0d, 0x10, 0x3d, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x36, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x45, 0x29, 0x31, 0x8d, 0x29, 0x32, 0x93, 0x24, 0x2a, 0x7d,
+0x1f, 0x26, 0x74, 0x20, 0x26, 0x76, 0x20, 0x26, 0x77, 0x20, 0x26, 0x78,
+0x20, 0x26, 0x7a, 0x20, 0x26, 0x7c, 0x21, 0x28, 0x7e, 0x22, 0x29, 0x7f,
+0x24, 0x2a, 0x80, 0x25, 0x2b, 0x82, 0x26, 0x2d, 0x85, 0x27, 0x2e, 0x87,
+0x29, 0x31, 0x89, 0x2b, 0x32, 0x8a, 0x2d, 0x34, 0x8c, 0x30, 0x37, 0x8f,
+0x32, 0x3a, 0x90, 0x36, 0x3e, 0x93, 0x3a, 0x41, 0x94, 0x3b, 0x44, 0x92,
+0x36, 0x3e, 0x7f, 0x36, 0x3f, 0x81, 0x3e, 0x48, 0x9e, 0x3a, 0x44, 0xa1,
+0x36, 0x3f, 0xa3, 0x32, 0x3b, 0xa6, 0x2f, 0x37, 0xa8, 0x34, 0x3c, 0xab,
+0x39, 0x43, 0xad, 0x42, 0x4b, 0xb0, 0x4b, 0x56, 0xb3, 0x49, 0x54, 0xb6,
+0x3a, 0x44, 0xba, 0x2f, 0x39, 0xbd, 0x28, 0x31, 0xc0, 0x2a, 0x32, 0xc3,
+0x32, 0x3c, 0xc6, 0x40, 0x4a, 0xc9, 0x4d, 0x59, 0xcd, 0x52, 0x5e, 0xd1,
+0x56, 0x63, 0xd4, 0x56, 0x62, 0xce, 0x57, 0x65, 0xd1, 0x57, 0x64, 0xce,
+0x52, 0x5e, 0xe4, 0x46, 0x53, 0xe5, 0x41, 0x4d, 0xe5, 0x3d, 0x49, 0xe5,
+0x4d, 0x5c, 0xe5, 0x16, 0x1b, 0x3b, 0x16, 0x1c, 0x3d, 0x60, 0x6f, 0xe0,
+0x51, 0x5f, 0xe6, 0x4b, 0x5a, 0xe5, 0x19, 0x1e, 0x42, 0x19, 0x1f, 0x43,
+0x19, 0x1e, 0x43, 0x19, 0x1e, 0x43, 0x19, 0x1e, 0x43, 0x57, 0x66, 0xc8,
+0x44, 0x4f, 0x96, 0x5d, 0x6d, 0xe0, 0x58, 0x68, 0xe0, 0x18, 0x1e, 0x44,
+0x3e, 0x4a, 0x8c, 0x53, 0x63, 0xc3, 0x5b, 0x6b, 0xdf, 0x51, 0x61, 0xde,
+0x24, 0x2c, 0x5a, 0x14, 0x19, 0x3e, 0x51, 0x5f, 0xc1, 0x36, 0x40, 0x7c,
+0x11, 0x17, 0x3a, 0x54, 0x64, 0xcd, 0x57, 0x67, 0xd8, 0x46, 0x53, 0xa3,
+0x2e, 0x37, 0x6d, 0x23, 0x2a, 0x57, 0x4c, 0x58, 0xb1, 0x57, 0x65, 0xdf,
+0x55, 0x63, 0xe0, 0x53, 0x60, 0xe2, 0x4d, 0x5a, 0xe1, 0x48, 0x55, 0xdf,
+0x4c, 0x58, 0xdc, 0x51, 0x5e, 0xd9, 0x58, 0x65, 0xd6, 0x47, 0x52, 0x9f,
+0x31, 0x38, 0x6a, 0x2e, 0x36, 0x65, 0x4f, 0x5a, 0xb7, 0x4a, 0x55, 0xc6,
+0x40, 0x4b, 0xc4, 0x44, 0x4e, 0xc0, 0x47, 0x52, 0xbd, 0x4a, 0x55, 0xba,
+0x4c, 0x56, 0xb7, 0x41, 0x4b, 0xb4, 0x3a, 0x43, 0xb0, 0x33, 0x3c, 0xae,
+0x2e, 0x36, 0xab, 0x2d, 0x35, 0xa8, 0x2d, 0x35, 0xa5, 0x2d, 0x36, 0xa3,
+0x2e, 0x35, 0xa0, 0x2e, 0x35, 0x9e, 0x2e, 0x35, 0x9b, 0x2e, 0x36, 0x99,
+0x2d, 0x35, 0x96, 0x2d, 0x35, 0x94, 0x2d, 0x35, 0x92, 0x2d, 0x35, 0x90,
+0x2c, 0x34, 0x8d, 0x2d, 0x33, 0x8b, 0x2c, 0x32, 0x89, 0x2a, 0x31, 0x88,
+0x29, 0x30, 0x86, 0x28, 0x2f, 0x83, 0x27, 0x2d, 0x81, 0x26, 0x2d, 0x80,
+0x25, 0x2b, 0x7e, 0x24, 0x2a, 0x7d, 0x23, 0x2a, 0x7b, 0x22, 0x28, 0x79,
+0x21, 0x27, 0x78, 0x20, 0x25, 0x76, 0x1f, 0x24, 0x74, 0x1e, 0x23, 0x73,
+0x1d, 0x22, 0x71, 0x1c, 0x22, 0x70, 0x1c, 0x21, 0x6e, 0x1b, 0x20, 0x6d,
+0x1a, 0x1f, 0x6c, 0x1a, 0x1f, 0x6b, 0x19, 0x1e, 0x69, 0x19, 0x1e, 0x69,
+0x18, 0x1d, 0x67, 0x19, 0x1d, 0x66, 0x19, 0x1d, 0x65, 0x19, 0x1d, 0x64,
+0x19, 0x1d, 0x63, 0x19, 0x1d, 0x62, 0x19, 0x1d, 0x61, 0x19, 0x1d, 0x5f,
+0x19, 0x1d, 0x5e, 0x18, 0x1d, 0x5d, 0x18, 0x1d, 0x5c, 0x18, 0x1d, 0x5b,
+0x19, 0x1d, 0x5a, 0x18, 0x1d, 0x5a, 0x18, 0x1d, 0x59, 0x18, 0x1d, 0x58,
+0x17, 0x1c, 0x57, 0x17, 0x1c, 0x56, 0x17, 0x1c, 0x55, 0x16, 0x1b, 0x54,
+0x16, 0x1a, 0x54, 0x16, 0x1a, 0x53, 0x15, 0x1a, 0x52, 0x15, 0x1a, 0x51,
+0x15, 0x19, 0x50, 0x14, 0x19, 0x50, 0x14, 0x19, 0x4f, 0x14, 0x18, 0x4e,
+0x14, 0x18, 0x4e, 0x13, 0x17, 0x4c, 0x13, 0x16, 0x4c, 0x13, 0x16, 0x4c,
+0x12, 0x16, 0x4b, 0x12, 0x16, 0x4a, 0x12, 0x15, 0x49, 0x11, 0x15, 0x48,
+0x11, 0x15, 0x47, 0x11, 0x15, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x10, 0x14, 0x45, 0x10, 0x14, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x10, 0x13, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x41, 0x0e, 0x12, 0x40, 0x0e, 0x12, 0x40, 0x0e, 0x12, 0x40,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e,
+0x0d, 0x10, 0x3d, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x36, 0x01, 0x01, 0x05,
+0x15, 0x18, 0x46, 0x2b, 0x31, 0x8d, 0x2c, 0x34, 0x94, 0x25, 0x2a, 0x7d,
+0x21, 0x27, 0x75, 0x22, 0x27, 0x76, 0x22, 0x28, 0x77, 0x22, 0x28, 0x79,
+0x22, 0x28, 0x7b, 0x21, 0x28, 0x7d, 0x21, 0x28, 0x7e, 0x21, 0x28, 0x80,
+0x22, 0x29, 0x81, 0x23, 0x2a, 0x83, 0x25, 0x2b, 0x85, 0x26, 0x2d, 0x88,
+0x28, 0x2f, 0x89, 0x29, 0x31, 0x8b, 0x2b, 0x32, 0x8d, 0x2d, 0x34, 0x8f,
+0x2f, 0x37, 0x91, 0x31, 0x3a, 0x94, 0x36, 0x3e, 0x96, 0x39, 0x41, 0x98,
+0x3d, 0x45, 0x9a, 0x3a, 0x43, 0x8c, 0x33, 0x3a, 0x76, 0x37, 0x3f, 0x81,
+0x41, 0x4b, 0xa5, 0x3c, 0x45, 0xa7, 0x38, 0x41, 0xa9, 0x34, 0x3c, 0xac,
+0x32, 0x3b, 0xb0, 0x38, 0x42, 0xb2, 0x40, 0x4a, 0xb5, 0x4a, 0x55, 0xb8,
+0x55, 0x61, 0xbc, 0x42, 0x4d, 0xbf, 0x34, 0x3e, 0xc2, 0x2a, 0x33, 0xc5,
+0x28, 0x33, 0xc9, 0x32, 0x3c, 0xcd, 0x40, 0x4b, 0xd0, 0x52, 0x5e, 0xd4,
+0x56, 0x63, 0xd7, 0x58, 0x65, 0xd5, 0x57, 0x63, 0xce, 0x58, 0x65, 0xce,
+0x57, 0x63, 0xc8, 0x54, 0x63, 0xe4, 0x4a, 0x57, 0xe4, 0x44, 0x51, 0xe4,
+0x41, 0x4d, 0xe4, 0x57, 0x65, 0xc7, 0x17, 0x1d, 0x3f, 0x1c, 0x22, 0x47,
+0x5f, 0x6f, 0xe6, 0x4f, 0x5d, 0xe5, 0x4f, 0x5c, 0xae, 0x1b, 0x20, 0x46,
+0x1b, 0x20, 0x46, 0x1b, 0x20, 0x47, 0x1a, 0x20, 0x47, 0x49, 0x56, 0xa2,
+0x33, 0x3d, 0x75, 0x51, 0x60, 0xb7, 0x5c, 0x6d, 0xdf, 0x1a, 0x20, 0x48,
+0x28, 0x31, 0x61, 0x46, 0x54, 0x9f, 0x54, 0x63, 0xc5, 0x55, 0x65, 0xdd,
+0x16, 0x1c, 0x42, 0x15, 0x1b, 0x41, 0x49, 0x57, 0xac, 0x13, 0x19, 0x3e,
+0x20, 0x27, 0x54, 0x53, 0x63, 0xcd, 0x3f, 0x4b, 0x93, 0x24, 0x2c, 0x5a,
+0x0f, 0x14, 0x36, 0x2a, 0x32, 0x66, 0x50, 0x5e, 0xc0, 0x58, 0x67, 0xd9,
+0x59, 0x68, 0xe0, 0x53, 0x61, 0xe2, 0x4d, 0x5b, 0xe3, 0x4e, 0x5c, 0xe3,
+0x56, 0x63, 0xe0, 0x59, 0x67, 0xd4, 0x45, 0x4f, 0x97, 0x2a, 0x31, 0x5c,
+0x2f, 0x36, 0x65, 0x54, 0x60, 0xc4, 0x4b, 0x56, 0xcd, 0x44, 0x4f, 0xc9,
+0x48, 0x53, 0xc6, 0x4c, 0x57, 0xc3, 0x50, 0x5b, 0xbf, 0x4b, 0x56, 0xbc,
+0x40, 0x4a, 0xb8, 0x38, 0x41, 0xb5, 0x32, 0x3c, 0xb3, 0x2e, 0x37, 0xaf,
+0x2e, 0x37, 0xac, 0x2f, 0x38, 0xaa, 0x30, 0x38, 0xa7, 0x30, 0x38, 0xa4,
+0x30, 0x38, 0xa1, 0x30, 0x39, 0x9f, 0x30, 0x38, 0x9c, 0x30, 0x38, 0x9a,
+0x30, 0x37, 0x98, 0x2f, 0x36, 0x95, 0x2f, 0x36, 0x92, 0x2f, 0x36, 0x91,
+0x2d, 0x34, 0x8e, 0x2d, 0x33, 0x8c, 0x2b, 0x32, 0x8a, 0x2a, 0x30, 0x88,
+0x28, 0x2f, 0x86, 0x27, 0x2f, 0x84, 0x26, 0x2d, 0x82, 0x25, 0x2c, 0x80,
+0x24, 0x2a, 0x7e, 0x23, 0x29, 0x7d, 0x22, 0x28, 0x7c, 0x21, 0x26, 0x7a,
+0x20, 0x25, 0x78, 0x1f, 0x24, 0x77, 0x1e, 0x24, 0x75, 0x1d, 0x22, 0x73,
+0x1c, 0x22, 0x72, 0x1b, 0x21, 0x70, 0x1b, 0x21, 0x6f, 0x1a, 0x20, 0x6d,
+0x1a, 0x1f, 0x6c, 0x1a, 0x1f, 0x6b, 0x1a, 0x1e, 0x69, 0x1a, 0x1f, 0x69,
+0x1a, 0x1f, 0x68, 0x1a, 0x1f, 0x66, 0x1a, 0x1f, 0x65, 0x1a, 0x1e, 0x64,
+0x1a, 0x1e, 0x63, 0x1a, 0x1e, 0x62, 0x1a, 0x1e, 0x61, 0x1a, 0x1e, 0x60,
+0x1a, 0x1f, 0x5f, 0x1a, 0x1e, 0x5e, 0x19, 0x1f, 0x5d, 0x19, 0x1f, 0x5c,
+0x19, 0x1e, 0x5b, 0x19, 0x1e, 0x5a, 0x18, 0x1d, 0x59, 0x18, 0x1d, 0x58,
+0x17, 0x1c, 0x57, 0x17, 0x1c, 0x56, 0x16, 0x1b, 0x55, 0x16, 0x1b, 0x55,
+0x16, 0x1b, 0x54, 0x15, 0x1a, 0x53, 0x15, 0x1a, 0x52, 0x15, 0x1a, 0x51,
+0x15, 0x19, 0x51, 0x14, 0x19, 0x50, 0x14, 0x18, 0x4f, 0x13, 0x18, 0x4e,
+0x13, 0x18, 0x4e, 0x13, 0x16, 0x4c, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4c,
+0x12, 0x16, 0x4b, 0x12, 0x16, 0x4a, 0x12, 0x16, 0x4a, 0x11, 0x15, 0x48,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x10, 0x13, 0x45, 0x10, 0x13, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x10, 0x13, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x42, 0x0f, 0x12, 0x42,
+0x0f, 0x12, 0x41, 0x0e, 0x12, 0x41, 0x0e, 0x11, 0x40, 0x0e, 0x11, 0x40,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e,
+0x0d, 0x10, 0x3d, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x18, 0x46, 0x2b, 0x31, 0x8e, 0x2d, 0x34, 0x94, 0x27, 0x2c, 0x7e,
+0x23, 0x28, 0x75, 0x23, 0x29, 0x77, 0x24, 0x29, 0x78, 0x24, 0x2a, 0x7a,
+0x24, 0x29, 0x7b, 0x23, 0x2a, 0x7d, 0x23, 0x2a, 0x7f, 0x24, 0x2a, 0x81,
+0x24, 0x2a, 0x82, 0x23, 0x2a, 0x84, 0x23, 0x2a, 0x86, 0x25, 0x2b, 0x88,
+0x27, 0x2d, 0x8a, 0x27, 0x2e, 0x8c, 0x29, 0x30, 0x8e, 0x2b, 0x32, 0x90,
+0x2d, 0x34, 0x93, 0x2f, 0x37, 0x94, 0x31, 0x3a, 0x97, 0x34, 0x3c, 0x99,
+0x38, 0x40, 0x9c, 0x3c, 0x45, 0x9e, 0x3f, 0x48, 0x9b, 0x39, 0x41, 0x87,
+0x31, 0x38, 0x70, 0x38, 0x40, 0x83, 0x44, 0x4e, 0xab, 0x3f, 0x48, 0xae,
+0x39, 0x43, 0xb1, 0x33, 0x3c, 0xb4, 0x37, 0x41, 0xb7, 0x3f, 0x4a, 0xba,
+0x49, 0x54, 0xbe, 0x56, 0x62, 0xc1, 0x4d, 0x58, 0xc4, 0x3b, 0x46, 0xc8,
+0x2e, 0x38, 0xcc, 0x29, 0x32, 0xcf, 0x30, 0x3b, 0xd3, 0x40, 0x4b, 0xd7,
+0x55, 0x62, 0xda, 0x5a, 0x68, 0xdf, 0x58, 0x65, 0xd1, 0x51, 0x5d, 0xb9,
+0x4b, 0x56, 0xa7, 0x4c, 0x59, 0xab, 0x59, 0x67, 0xe3, 0x4c, 0x5b, 0xe3,
+0x47, 0x55, 0xe3, 0x4c, 0x5a, 0xe4, 0x18, 0x1e, 0x41, 0x1a, 0x1f, 0x44,
+0x3e, 0x49, 0x85, 0x5b, 0x6c, 0xe5, 0x5b, 0x6c, 0xe4, 0x1d, 0x23, 0x4a,
+0x1d, 0x23, 0x4b, 0x1d, 0x23, 0x4b, 0x1d, 0x23, 0x4c, 0x25, 0x2d, 0x5b,
+0x25, 0x2d, 0x5b, 0x39, 0x44, 0x80, 0x56, 0x66, 0xc7, 0x1b, 0x22, 0x4c,
+0x1b, 0x21, 0x4b, 0x36, 0x40, 0x7b, 0x4b, 0x59, 0xac, 0x50, 0x60, 0xbe,
+0x17, 0x1d, 0x46, 0x16, 0x1c, 0x45, 0x22, 0x2a, 0x59, 0x14, 0x1a, 0x41,
+0x2d, 0x36, 0x6d, 0x3b, 0x46, 0x89, 0x15, 0x1b, 0x42, 0x10, 0x16, 0x3a,
+0x10, 0x15, 0x38, 0x33, 0x3e, 0x79, 0x49, 0x55, 0xaa, 0x50, 0x5e, 0xbd,
+0x5a, 0x69, 0xe0, 0x54, 0x62, 0xe2, 0x54, 0x62, 0xe3, 0x5c, 0x69, 0xe4,
+0x59, 0x66, 0xd0, 0x3f, 0x49, 0x8a, 0x1b, 0x20, 0x42, 0x30, 0x38, 0x69,
+0x59, 0x65, 0xd1, 0x4d, 0x58, 0xd4, 0x49, 0x55, 0xd0, 0x4e, 0x58, 0xcc,
+0x52, 0x5e, 0xc8, 0x57, 0x62, 0xc5, 0x4a, 0x54, 0xc2, 0x3f, 0x49, 0xbe,
+0x37, 0x41, 0xbb, 0x31, 0x3a, 0xb7, 0x31, 0x39, 0xb4, 0x31, 0x3a, 0xb1,
+0x32, 0x3a, 0xae, 0x32, 0x3b, 0xab, 0x33, 0x3b, 0xa8, 0x33, 0x3b, 0xa5,
+0x33, 0x3a, 0xa3, 0x33, 0x3a, 0xa0, 0x32, 0x3a, 0x9e, 0x31, 0x3a, 0x9b,
+0x31, 0x3a, 0x99, 0x30, 0x39, 0x96, 0x30, 0x37, 0x94, 0x2f, 0x35, 0x91,
+0x2d, 0x33, 0x8f, 0x2b, 0x32, 0x8d, 0x2b, 0x31, 0x8b, 0x29, 0x30, 0x88,
+0x28, 0x2f, 0x87, 0x27, 0x2e, 0x85, 0x25, 0x2c, 0x83, 0x24, 0x2b, 0x81,
+0x23, 0x29, 0x7f, 0x21, 0x27, 0x7d, 0x21, 0x27, 0x7b, 0x20, 0x25, 0x7b,
+0x1f, 0x24, 0x79, 0x1e, 0x24, 0x77, 0x1d, 0x23, 0x75, 0x1c, 0x22, 0x74,
+0x1c, 0x21, 0x72, 0x1b, 0x21, 0x71, 0x1b, 0x20, 0x6f, 0x1b, 0x20, 0x6e,
+0x1b, 0x20, 0x6c, 0x1b, 0x20, 0x6b, 0x1c, 0x20, 0x6a, 0x1b, 0x20, 0x68,
+0x1b, 0x20, 0x68, 0x1c, 0x20, 0x66, 0x1c, 0x20, 0x66, 0x1c, 0x21, 0x65,
+0x1b, 0x20, 0x63, 0x1a, 0x20, 0x62, 0x1a, 0x20, 0x61, 0x1a, 0x20, 0x60,
+0x1b, 0x20, 0x5f, 0x1a, 0x20, 0x5e, 0x1a, 0x1f, 0x5d, 0x19, 0x1f, 0x5c,
+0x19, 0x1e, 0x5b, 0x18, 0x1d, 0x5a, 0x18, 0x1d, 0x59, 0x17, 0x1c, 0x58,
+0x17, 0x1c, 0x57, 0x16, 0x1c, 0x56, 0x16, 0x1b, 0x56, 0x16, 0x1b, 0x55,
+0x16, 0x1a, 0x54, 0x15, 0x1a, 0x53, 0x15, 0x1a, 0x52, 0x15, 0x19, 0x52,
+0x15, 0x19, 0x51, 0x14, 0x18, 0x4f, 0x13, 0x18, 0x4f, 0x13, 0x18, 0x4f,
+0x13, 0x17, 0x4e, 0x13, 0x17, 0x4d, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4c,
+0x12, 0x16, 0x4b, 0x12, 0x16, 0x4b, 0x12, 0x16, 0x4a, 0x11, 0x14, 0x48,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x10, 0x13, 0x45, 0x10, 0x13, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x10, 0x12, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x42, 0x0f, 0x12, 0x42,
+0x0e, 0x12, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x40, 0x0e, 0x11, 0x40,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3d, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x47, 0x28, 0x31, 0x8e, 0x2a, 0x32, 0x95, 0x25, 0x2b, 0x7e,
+0x23, 0x28, 0x76, 0x24, 0x2a, 0x78, 0x26, 0x2b, 0x78, 0x26, 0x2b, 0x7a,
+0x25, 0x2b, 0x7c, 0x26, 0x2b, 0x7e, 0x26, 0x2c, 0x80, 0x26, 0x2c, 0x81,
+0x26, 0x2c, 0x83, 0x26, 0x2c, 0x85, 0x26, 0x2c, 0x87, 0x26, 0x2c, 0x89,
+0x25, 0x2c, 0x8b, 0x26, 0x2d, 0x8d, 0x28, 0x2f, 0x8f, 0x29, 0x31, 0x91,
+0x2b, 0x32, 0x94, 0x2d, 0x34, 0x95, 0x2f, 0x37, 0x98, 0x32, 0x39, 0x9a,
+0x34, 0x3c, 0x9d, 0x37, 0x40, 0x9f, 0x3b, 0x44, 0xa2, 0x41, 0x49, 0xa5,
+0x41, 0x49, 0x9c, 0x37, 0x3f, 0x7f, 0x29, 0x2f, 0x5d, 0x3b, 0x44, 0x89,
+0x47, 0x52, 0xb3, 0x40, 0x4a, 0xb6, 0x3a, 0x44, 0xb9, 0x36, 0x40, 0xbc,
+0x3d, 0x49, 0xc0, 0x48, 0x52, 0xc3, 0x55, 0x62, 0xc6, 0x5b, 0x68, 0xca,
+0x44, 0x50, 0xce, 0x33, 0x3e, 0xd2, 0x28, 0x32, 0xd6, 0x30, 0x3a, 0xda,
+0x3f, 0x4b, 0xde, 0x5a, 0x67, 0xe2, 0x57, 0x64, 0xce, 0x4b, 0x57, 0xaa,
+0x3e, 0x47, 0x89, 0x33, 0x3c, 0x72, 0x3f, 0x4a, 0x8b, 0x5c, 0x6b, 0xe2,
+0x51, 0x60, 0xe2, 0x4c, 0x5a, 0xe3, 0x5b, 0x6b, 0xd4, 0x1b, 0x21, 0x47,
+0x1d, 0x23, 0x49, 0x4f, 0x5b, 0xaa, 0x58, 0x6a, 0xe4, 0x1f, 0x25, 0x4e,
+0x1f, 0x26, 0x4f, 0x1f, 0x25, 0x4f, 0x1f, 0x26, 0x50, 0x1e, 0x25, 0x50,
+0x1f, 0x25, 0x51, 0x1f, 0x25, 0x51, 0x4d, 0x5c, 0xad, 0x1e, 0x24, 0x50,
+0x1d, 0x24, 0x50, 0x23, 0x2b, 0x5a, 0x3e, 0x4b, 0x8f, 0x22, 0x2a, 0x5a,
+0x18, 0x1f, 0x4a, 0x17, 0x1e, 0x47, 0x16, 0x1c, 0x46, 0x15, 0x1b, 0x44,
+0x36, 0x42, 0x81, 0x13, 0x19, 0x40, 0x12, 0x18, 0x3e, 0x11, 0x17, 0x3d,
+0x10, 0x16, 0x3b, 0x31, 0x3a, 0x73, 0x3e, 0x4a, 0x8f, 0x4d, 0x5a, 0xb3,
+0x5a, 0x6a, 0xe0, 0x5b, 0x6a, 0xe2, 0x58, 0x67, 0xd0, 0x4c, 0x58, 0xa9,
+0x2e, 0x36, 0x66, 0x13, 0x17, 0x35, 0x31, 0x38, 0x6a, 0x5d, 0x6b, 0xdf,
+0x4e, 0x5a, 0xdb, 0x4e, 0x5a, 0xd7, 0x54, 0x60, 0xd3, 0x5a, 0x66, 0xce,
+0x56, 0x62, 0xcb, 0x48, 0x54, 0xc7, 0x3e, 0x48, 0xc4, 0x36, 0x40, 0xc0,
+0x33, 0x3c, 0xbd, 0x33, 0x3d, 0xb9, 0x34, 0x3d, 0xb6, 0x34, 0x3e, 0xb3,
+0x35, 0x3d, 0xaf, 0x36, 0x3e, 0xad, 0x35, 0x3e, 0xaa, 0x35, 0x3e, 0xa7,
+0x35, 0x3e, 0xa4, 0x35, 0x3d, 0xa1, 0x35, 0x3d, 0x9e, 0x33, 0x3c, 0x9c,
+0x32, 0x3a, 0x99, 0x30, 0x39, 0x97, 0x2f, 0x36, 0x95, 0x2e, 0x35, 0x92,
+0x2c, 0x33, 0x90, 0x2b, 0x31, 0x8e, 0x2a, 0x31, 0x8c, 0x28, 0x30, 0x89,
+0x26, 0x2d, 0x87, 0x25, 0x2c, 0x86, 0x24, 0x2a, 0x84, 0x23, 0x29, 0x82,
+0x22, 0x27, 0x80, 0x21, 0x26, 0x7e, 0x1f, 0x25, 0x7c, 0x1e, 0x25, 0x7b,
+0x1d, 0x23, 0x79, 0x1d, 0x23, 0x78, 0x1d, 0x23, 0x76, 0x1c, 0x22, 0x74,
+0x1d, 0x22, 0x73, 0x1d, 0x22, 0x71, 0x1d, 0x22, 0x70, 0x1d, 0x22, 0x6e,
+0x1d, 0x22, 0x6d, 0x1d, 0x22, 0x6b, 0x1d, 0x22, 0x6a, 0x1d, 0x22, 0x69,
+0x1d, 0x22, 0x68, 0x1c, 0x22, 0x66, 0x1c, 0x22, 0x66, 0x1c, 0x22, 0x65,
+0x1c, 0x21, 0x63, 0x1c, 0x21, 0x63, 0x1b, 0x21, 0x61, 0x1b, 0x20, 0x60,
+0x1a, 0x20, 0x5f, 0x1a, 0x1f, 0x5e, 0x19, 0x1f, 0x5d, 0x19, 0x1e, 0x5c,
+0x18, 0x1e, 0x5b, 0x18, 0x1d, 0x5a, 0x17, 0x1d, 0x59, 0x17, 0x1c, 0x58,
+0x17, 0x1c, 0x57, 0x16, 0x1b, 0x57, 0x16, 0x1b, 0x56, 0x16, 0x1a, 0x55,
+0x16, 0x1a, 0x54, 0x15, 0x1a, 0x53, 0x15, 0x19, 0x52, 0x14, 0x19, 0x52,
+0x14, 0x19, 0x51, 0x13, 0x18, 0x4f, 0x13, 0x18, 0x4f, 0x13, 0x18, 0x4f,
+0x13, 0x17, 0x4e, 0x13, 0x17, 0x4d, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4c,
+0x12, 0x16, 0x4b, 0x12, 0x16, 0x4b, 0x12, 0x15, 0x4a, 0x11, 0x14, 0x48,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x10, 0x13, 0x45, 0x10, 0x13, 0x45, 0x10, 0x12, 0x44, 0x10, 0x12, 0x44,
+0x10, 0x12, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x40, 0x0e, 0x11, 0x40,
+0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x17, 0x47, 0x27, 0x2f, 0x8f, 0x29, 0x32, 0x95, 0x24, 0x2b, 0x7f,
+0x21, 0x27, 0x76, 0x22, 0x29, 0x78, 0x24, 0x2a, 0x79, 0x25, 0x2b, 0x7b,
+0x26, 0x2c, 0x7d, 0x27, 0x2e, 0x7f, 0x27, 0x2e, 0x80, 0x27, 0x2e, 0x81,
+0x27, 0x2e, 0x84, 0x27, 0x2f, 0x86, 0x28, 0x2f, 0x88, 0x27, 0x2e, 0x89,
+0x28, 0x2e, 0x8c, 0x28, 0x2f, 0x8e, 0x28, 0x2f, 0x90, 0x28, 0x2e, 0x92,
+0x29, 0x31, 0x95, 0x2b, 0x33, 0x97, 0x2d, 0x34, 0x99, 0x2e, 0x37, 0x9b,
+0x31, 0x38, 0x9e, 0x33, 0x3d, 0xa1, 0x36, 0x3f, 0xa3, 0x3a, 0x44, 0xa6,
+0x3f, 0x48, 0xa9, 0x44, 0x4e, 0xac, 0x3e, 0x47, 0x94, 0x33, 0x3a, 0x74,
+0x23, 0x2a, 0x52, 0x3d, 0x46, 0x8d, 0x49, 0x54, 0xbb, 0x41, 0x4c, 0xbe,
+0x3a, 0x45, 0xc2, 0x3c, 0x46, 0xc5, 0x46, 0x51, 0xc9, 0x53, 0x5f, 0xcc,
+0x65, 0x73, 0xd0, 0x50, 0x5d, 0xd4, 0x3a, 0x44, 0xd8, 0x2a, 0x34, 0xdd,
+0x2e, 0x39, 0xe1, 0x40, 0x4d, 0xe2, 0x56, 0x63, 0xcd, 0x49, 0x55, 0xa6,
+0x34, 0x3d, 0x74, 0x21, 0x28, 0x52, 0x14, 0x19, 0x3c, 0x2f, 0x38, 0x6b,
+0x5a, 0x69, 0xd6, 0x56, 0x65, 0xe1, 0x50, 0x60, 0xe2, 0x1c, 0x22, 0x4a,
+0x1e, 0x24, 0x4c, 0x20, 0x27, 0x4f, 0x58, 0x68, 0xc1, 0x3f, 0x49, 0x87,
+0x22, 0x29, 0x54, 0x22, 0x29, 0x55, 0x21, 0x28, 0x55, 0x22, 0x29, 0x56,
+0x21, 0x28, 0x56, 0x21, 0x28, 0x56, 0x40, 0x4c, 0x8f, 0x20, 0x27, 0x55,
+0x1f, 0x26, 0x55, 0x1e, 0x26, 0x54, 0x2f, 0x39, 0x71, 0x1c, 0x23, 0x50,
+0x1a, 0x21, 0x4e, 0x19, 0x1f, 0x4c, 0x17, 0x1e, 0x49, 0x16, 0x1d, 0x48,
+0x15, 0x1b, 0x45, 0x14, 0x1a, 0x43, 0x13, 0x19, 0x41, 0x12, 0x18, 0x3f,
+0x11, 0x17, 0x3d, 0x20, 0x27, 0x54, 0x33, 0x3c, 0x76, 0x4e, 0x5c, 0xb4,
+0x57, 0x66, 0xce, 0x49, 0x54, 0xa1, 0x34, 0x3d, 0x73, 0x15, 0x19, 0x39,
+0x15, 0x19, 0x39, 0x30, 0x38, 0x67, 0x5f, 0x6e, 0xe6, 0x4d, 0x59, 0xe2,
+0x55, 0x61, 0xdd, 0x5a, 0x66, 0xd7, 0x4a, 0x54, 0xa5, 0x54, 0x60, 0xd1,
+0x46, 0x51, 0xcd, 0x3c, 0x47, 0xca, 0x34, 0x3e, 0xc6, 0x36, 0x40, 0xc2,
+0x36, 0x40, 0xbe, 0x38, 0x40, 0xbb, 0x38, 0x41, 0xb8, 0x38, 0x42, 0xb4,
+0x38, 0x41, 0xb1, 0x39, 0x42, 0xae, 0x39, 0x41, 0xab, 0x38, 0x41, 0xa8,
+0x37, 0x41, 0xa5, 0x36, 0x3f, 0xa2, 0x35, 0x3c, 0x9f, 0x32, 0x3b, 0x9d,
+0x31, 0x39, 0x9a, 0x30, 0x38, 0x98, 0x2e, 0x36, 0x96, 0x2d, 0x34, 0x93,
+0x2c, 0x33, 0x91, 0x2a, 0x31, 0x8e, 0x3b, 0x42, 0x7e, 0x90, 0x8f, 0x41,
+0xa5, 0xa3, 0x32, 0xa5, 0xa2, 0x31, 0x4d, 0x50, 0x69, 0x21, 0x27, 0x82,
+0x20, 0x27, 0x80, 0x1f, 0x25, 0x7f, 0x1f, 0x24, 0x7d, 0x1e, 0x24, 0x7b,
+0x1e, 0x24, 0x79, 0x1e, 0x24, 0x78, 0x1f, 0x24, 0x77, 0x1f, 0x24, 0x75,
+0x1f, 0x24, 0x73, 0x1f, 0x24, 0x72, 0x1f, 0x24, 0x70, 0x1f, 0x24, 0x6f,
+0x1e, 0x24, 0x6d, 0x1e, 0x24, 0x6c, 0x1e, 0x24, 0x6a, 0x1e, 0x24, 0x69,
+0x1e, 0x24, 0x68, 0x1e, 0x24, 0x68, 0x1d, 0x22, 0x65, 0x1d, 0x22, 0x65,
+0x1c, 0x21, 0x63, 0x1c, 0x21, 0x63, 0x1b, 0x21, 0x62, 0x1a, 0x20, 0x60,
+0x1a, 0x1f, 0x5f, 0x1a, 0x1f, 0x5e, 0x19, 0x1e, 0x5d, 0x18, 0x1e, 0x5c,
+0x18, 0x1d, 0x5b, 0x18, 0x1d, 0x5a, 0x18, 0x1d, 0x5a, 0x17, 0x1c, 0x59,
+0x17, 0x1b, 0x58, 0x16, 0x1b, 0x57, 0x16, 0x1a, 0x56, 0x16, 0x1a, 0x55,
+0x15, 0x19, 0x54, 0x14, 0x19, 0x53, 0x14, 0x19, 0x53, 0x14, 0x19, 0x52,
+0x14, 0x18, 0x51, 0x13, 0x18, 0x4f, 0x13, 0x18, 0x4f, 0x13, 0x17, 0x4f,
+0x13, 0x17, 0x4e, 0x13, 0x17, 0x4d, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4c,
+0x12, 0x15, 0x4b, 0x12, 0x15, 0x4b, 0x12, 0x15, 0x4a, 0x11, 0x14, 0x49,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47,
+0x11, 0x14, 0x47, 0x10, 0x13, 0x45, 0x10, 0x12, 0x44, 0x10, 0x12, 0x44,
+0x10, 0x12, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x40, 0x0e, 0x11, 0x40,
+0x0e, 0x10, 0x3f, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x48, 0x27, 0x2d, 0x8f, 0x29, 0x31, 0x96, 0x23, 0x29, 0x7f,
+0x20, 0x26, 0x77, 0x21, 0x28, 0x78, 0x22, 0x29, 0x7a, 0x24, 0x29, 0x7b,
+0x24, 0x2a, 0x7d, 0x26, 0x2c, 0x7f, 0x27, 0x2d, 0x81, 0x28, 0x2f, 0x82,
+0x29, 0x30, 0x84, 0x2a, 0x31, 0x86, 0x2b, 0x32, 0x89, 0x2b, 0x32, 0x8a,
+0x2a, 0x32, 0x8c, 0x2a, 0x32, 0x8f, 0x2a, 0x32, 0x90, 0x2a, 0x32, 0x93,
+0x2a, 0x32, 0x95, 0x2a, 0x32, 0x98, 0x2a, 0x32, 0x9a, 0x2d, 0x34, 0x9d,
+0x2f, 0x37, 0x9f, 0x31, 0x38, 0xa2, 0x33, 0x3c, 0xa5, 0x36, 0x3f, 0xa7,
+0x3a, 0x43, 0xab, 0x3d, 0x47, 0xad, 0x44, 0x4c, 0xb0, 0x47, 0x52, 0xae,
+0x3d, 0x46, 0x8f, 0x2e, 0x35, 0x67, 0x22, 0x28, 0x50, 0x40, 0x49, 0x93,
+0x4c, 0x58, 0xc4, 0x43, 0x4f, 0xc8, 0x3a, 0x46, 0xcb, 0x44, 0x4f, 0xcf,
+0x51, 0x5e, 0xd3, 0x41, 0x4b, 0x94, 0x49, 0x54, 0xa8, 0x44, 0x4f, 0xe0,
+0x30, 0x3b, 0xe1, 0x2f, 0x3a, 0xe1, 0x42, 0x4f, 0xe1, 0x4f, 0x5c, 0xb8,
+0x31, 0x3a, 0x71, 0x17, 0x1c, 0x41, 0x15, 0x1a, 0x3d, 0x16, 0x1c, 0x40,
+0x1f, 0x26, 0x50, 0x52, 0x61, 0xbc, 0x5b, 0x6b, 0xe1, 0x5f, 0x70, 0xe0,
+0x1f, 0x26, 0x4f, 0x22, 0x29, 0x53, 0x24, 0x2b, 0x57, 0x5e, 0x70, 0xd6,
+0x25, 0x2c, 0x5a, 0x25, 0x2c, 0x5a, 0x25, 0x2c, 0x5b, 0x24, 0x2c, 0x5b,
+0x24, 0x2c, 0x5c, 0x24, 0x2b, 0x5c, 0x30, 0x3a, 0x72, 0x23, 0x2a, 0x5b,
+0x22, 0x2a, 0x5b, 0x21, 0x28, 0x58, 0x1f, 0x26, 0x56, 0x1e, 0x25, 0x55,
+0x1c, 0x23, 0x52, 0x1a, 0x21, 0x4f, 0x19, 0x20, 0x4d, 0x17, 0x1e, 0x4b,
+0x16, 0x1d, 0x48, 0x15, 0x1c, 0x46, 0x14, 0x1a, 0x43, 0x13, 0x19, 0x42,
+0x13, 0x19, 0x41, 0x14, 0x1a, 0x40, 0x34, 0x3e, 0x78, 0x48, 0x54, 0xa1,
+0x34, 0x3e, 0x75, 0x16, 0x1c, 0x3e, 0x16, 0x1b, 0x3d, 0x17, 0x1c, 0x3c,
+0x1e, 0x24, 0x48, 0x62, 0x70, 0xe6, 0x56, 0x63, 0xe7, 0x5c, 0x6a, 0xe5,
+0x55, 0x61, 0xc1, 0x4f, 0x5a, 0xb2, 0x51, 0x5d, 0xd8, 0x43, 0x4f, 0xd4,
+0x3a, 0x43, 0xcf, 0x38, 0x42, 0xcc, 0x39, 0x44, 0xc8, 0x3a, 0x44, 0xc4,
+0x3c, 0x45, 0xc1, 0x3c, 0x45, 0xbd, 0x3c, 0x46, 0xba, 0x3c, 0x46, 0xb6,
+0x3c, 0x45, 0xb2, 0x3c, 0x45, 0xaf, 0x3b, 0x45, 0xac, 0x39, 0x42, 0xa9,
+0x37, 0x40, 0xa7, 0x36, 0x3e, 0xa3, 0x34, 0x3b, 0xa1, 0x33, 0x3a, 0x9e,
+0x30, 0x38, 0x9c, 0x2f, 0x37, 0x99, 0x2e, 0x34, 0x96, 0x2b, 0x32, 0x94,
+0x29, 0x31, 0x91, 0x66, 0x69, 0x61, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0x62, 0x64, 0x59,
+0x20, 0x27, 0x81, 0x21, 0x26, 0x7f, 0x21, 0x26, 0x7d, 0x20, 0x26, 0x7b,
+0x21, 0x27, 0x7a, 0x20, 0x27, 0x78, 0x20, 0x26, 0x77, 0x20, 0x26, 0x75,
+0x20, 0x27, 0x74, 0x21, 0x27, 0x72, 0x21, 0x26, 0x71, 0x20, 0x26, 0x6f,
+0x21, 0x26, 0x6e, 0x20, 0x25, 0x6c, 0x20, 0x25, 0x6b, 0x1f, 0x24, 0x6a,
+0x1e, 0x23, 0x68, 0x1e, 0x23, 0x67, 0x1d, 0x22, 0x66, 0x1c, 0x22, 0x65,
+0x1c, 0x21, 0x64, 0x1b, 0x21, 0x63, 0x1a, 0x20, 0x62, 0x1a, 0x1f, 0x60,
+0x19, 0x1f, 0x5f, 0x19, 0x1f, 0x5f, 0x19, 0x1d, 0x5e, 0x18, 0x1d, 0x5d,
+0x18, 0x1d, 0x5c, 0x18, 0x1c, 0x5b, 0x17, 0x1c, 0x5a, 0x17, 0x1c, 0x59,
+0x17, 0x1b, 0x58, 0x17, 0x1b, 0x57, 0x16, 0x1a, 0x56, 0x16, 0x1a, 0x55,
+0x15, 0x19, 0x54, 0x15, 0x19, 0x54, 0x15, 0x19, 0x53, 0x14, 0x18, 0x52,
+0x14, 0x18, 0x51, 0x14, 0x17, 0x50, 0x13, 0x17, 0x4f, 0x13, 0x17, 0x4f,
+0x13, 0x17, 0x4e, 0x13, 0x16, 0x4e, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4c,
+0x12, 0x16, 0x4c, 0x12, 0x15, 0x4b, 0x12, 0x15, 0x4a, 0x11, 0x14, 0x49,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x47, 0x11, 0x14, 0x47, 0x10, 0x14, 0x47,
+0x10, 0x14, 0x47, 0x10, 0x12, 0x45, 0x10, 0x12, 0x45, 0x10, 0x12, 0x44,
+0x10, 0x12, 0x43, 0x10, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x40, 0x0e, 0x11, 0x40,
+0x0e, 0x10, 0x3f, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x17, 0x48, 0x27, 0x2d, 0x90, 0x28, 0x2e, 0x96, 0x23, 0x28, 0x80,
+0x20, 0x25, 0x78, 0x20, 0x26, 0x78, 0x21, 0x27, 0x7a, 0x22, 0x28, 0x7c,
+0x23, 0x2a, 0x7e, 0x24, 0x2a, 0x80, 0x26, 0x2c, 0x81, 0x27, 0x2e, 0x83,
+0x28, 0x2f, 0x85, 0x29, 0x31, 0x87, 0x2b, 0x32, 0x89, 0x2e, 0x34, 0x8b,
+0x2d, 0x34, 0x8d, 0x2e, 0x34, 0x90, 0x2e, 0x35, 0x91, 0x2d, 0x34, 0x94,
+0x2d, 0x34, 0x96, 0x2d, 0x34, 0x99, 0x2d, 0x35, 0x9b, 0x2d, 0x35, 0x9e,
+0x2c, 0x35, 0xa0, 0x2f, 0x36, 0xa4, 0x30, 0x39, 0xa6, 0x33, 0x3c, 0xa9,
+0x36, 0x3e, 0xab, 0x39, 0x42, 0xae, 0x3d, 0x46, 0xb1, 0x41, 0x4b, 0xb5,
+0x69, 0x70, 0x91, 0x7a, 0x7f, 0x71, 0xac, 0xaa, 0x30, 0xa5, 0xa3, 0x21,
+0xa3, 0xa0, 0x1d, 0xaf, 0xae, 0x38, 0xb3, 0xb3, 0x49, 0xaf, 0xaf, 0x4a,
+0xae, 0xad, 0x4c, 0x80, 0x86, 0x93, 0x81, 0x87, 0x7e, 0x0d, 0x12, 0x30,
+0x53, 0x61, 0xe0, 0x3a, 0x46, 0xe0, 0x30, 0x3c, 0xe0, 0x43, 0x51, 0xdf,
+0x48, 0x55, 0xa6, 0x13, 0x19, 0x3c, 0x15, 0x1a, 0x3f, 0x16, 0x1c, 0x42,
+0x18, 0x1e, 0x45, 0x1a, 0x21, 0x49, 0x4b, 0x58, 0xa7, 0x5c, 0x6c, 0xd6,
+0x21, 0x28, 0x53, 0x24, 0x2b, 0x57, 0x27, 0x2e, 0x5b, 0x34, 0x3d, 0x72,
+0x29, 0x30, 0x60, 0x29, 0x30, 0x61, 0x29, 0x30, 0x62, 0x28, 0x30, 0x62,
+0x27, 0x2f, 0x62, 0x50, 0x55, 0x4e, 0x66, 0x69, 0x43, 0xa6, 0xa4, 0x25,
+0xa5, 0xa3, 0x25, 0xa5, 0xa3, 0x24, 0xa4, 0xa2, 0x23, 0x8d, 0x8d, 0x2c,
+0x60, 0x63, 0x3c, 0x32, 0x37, 0x4b, 0x1a, 0x21, 0x51, 0x19, 0x20, 0x4f,
+0x17, 0x1e, 0x4c, 0x16, 0x1d, 0x49, 0x15, 0x1b, 0x47, 0x15, 0x1b, 0x46,
+0x16, 0x1c, 0x45, 0x16, 0x1c, 0x44, 0x34, 0x3e, 0x78, 0x18, 0x1d, 0x43,
+0x18, 0x1e, 0x42, 0x19, 0x1e, 0x41, 0x18, 0x1e, 0x40, 0x18, 0x1d, 0x3e,
+0x5c, 0x6b, 0xd3, 0x60, 0x6e, 0xe7, 0x58, 0x65, 0xc8, 0x46, 0x50, 0x97,
+0x5f, 0x6d, 0xe2, 0x4d, 0x5a, 0xdf, 0x40, 0x4b, 0xdb, 0x3a, 0x45, 0xd6,
+0x3b, 0x46, 0xd2, 0x3c, 0x47, 0xce, 0x3e, 0x49, 0xca, 0x3f, 0x49, 0xc6,
+0x3f, 0x49, 0xc2, 0x3f, 0x4b, 0xbf, 0x41, 0x4a, 0xbb, 0x40, 0x49, 0xb8,
+0x40, 0x49, 0xb4, 0x3e, 0x47, 0xb0, 0x3a, 0x44, 0xad, 0x39, 0x41, 0xaa,
+0x36, 0x3f, 0xa7, 0x35, 0x3d, 0xa5, 0x33, 0x3b, 0xa1, 0x31, 0x39, 0x9f,
+0x2e, 0x36, 0x9c, 0x2c, 0x34, 0x9a, 0x2a, 0x32, 0x97, 0x28, 0x30, 0x95,
+0x27, 0x2e, 0x92, 0xd0, 0xca, 0x16, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xcf, 0xca, 0x15,
+0x22, 0x29, 0x82, 0x22, 0x29, 0x80, 0x22, 0x29, 0x7e, 0x22, 0x29, 0x7c,
+0x23, 0x29, 0x7a, 0x23, 0x29, 0x78, 0x23, 0x29, 0x78, 0x23, 0x29, 0x76,
+0x23, 0x28, 0x74, 0x23, 0x28, 0x73, 0x22, 0x28, 0x71, 0x21, 0x27, 0x6f,
+0x21, 0x26, 0x6e, 0x20, 0x25, 0x6d, 0x1f, 0x24, 0x6b, 0x1e, 0x24, 0x6a,
+0x1d, 0x23, 0x68, 0x1d, 0x23, 0x67, 0x1c, 0x22, 0x66, 0x1c, 0x22, 0x65,
+0x1b, 0x21, 0x65, 0x1a, 0x20, 0x63, 0x19, 0x1f, 0x62, 0x19, 0x1f, 0x61,
+0x19, 0x1e, 0x5f, 0x19, 0x1e, 0x5f, 0x19, 0x1d, 0x5e, 0x18, 0x1d, 0x5d,
+0x18, 0x1c, 0x5c, 0x17, 0x1c, 0x5b, 0x17, 0x1c, 0x5a, 0x17, 0x1b, 0x59,
+0x17, 0x1b, 0x58, 0x16, 0x1a, 0x57, 0x16, 0x1a, 0x56, 0x15, 0x19, 0x55,
+0x15, 0x19, 0x55, 0x15, 0x18, 0x54, 0x15, 0x18, 0x53, 0x14, 0x18, 0x52,
+0x14, 0x17, 0x51, 0x14, 0x17, 0x51, 0x13, 0x17, 0x50, 0x13, 0x17, 0x4f,
+0x12, 0x16, 0x4e, 0x12, 0x16, 0x4e, 0x12, 0x16, 0x4c, 0x12, 0x15, 0x4c,
+0x12, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x15, 0x4a, 0x11, 0x14, 0x49,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x48, 0x10, 0x14, 0x47, 0x10, 0x13, 0x47,
+0x10, 0x13, 0x47, 0x10, 0x12, 0x45, 0x10, 0x12, 0x45, 0x0f, 0x12, 0x44,
+0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x10, 0x40, 0x0e, 0x10, 0x40,
+0x0e, 0x10, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x0f, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x48, 0x28, 0x2f, 0x90, 0x29, 0x32, 0x97, 0x23, 0x2a, 0x80,
+0x20, 0x26, 0x78, 0x20, 0x26, 0x79, 0x20, 0x27, 0x7b, 0x20, 0x26, 0x7c,
+0x21, 0x28, 0x7e, 0x22, 0x29, 0x80, 0x24, 0x2a, 0x81, 0x25, 0x2b, 0x83,
+0x26, 0x2d, 0x86, 0x28, 0x2e, 0x88, 0x29, 0x30, 0x8a, 0x2a, 0x32, 0x8c,
+0x2d, 0x33, 0x8e, 0x2e, 0x35, 0x90, 0x30, 0x38, 0x92, 0x31, 0x39, 0x95,
+0x31, 0x39, 0x97, 0x30, 0x39, 0x9a, 0x31, 0x39, 0x9c, 0x30, 0x39, 0x9f,
+0x2f, 0x38, 0xa1, 0x2f, 0x38, 0xa4, 0x2f, 0x38, 0xa7, 0x30, 0x39, 0xaa,
+0x32, 0x3b, 0xad, 0x70, 0x73, 0x77, 0xac, 0xaa, 0x40, 0xc7, 0xc5, 0x18,
+0xd1, 0xca, 0x1a, 0xd7, 0xd0, 0x1c, 0xde, 0xd7, 0x1d, 0xcf, 0xc9, 0x1a,
+0xdb, 0xd4, 0x1c, 0xdc, 0xda, 0x1d, 0xc7, 0xc5, 0x18, 0xcc, 0xc6, 0x19,
+0xd7, 0xd5, 0x1c, 0xdf, 0xd9, 0x22, 0xd1, 0xcf, 0x1a, 0xdf, 0xd9, 0x22,
+0xcd, 0xc7, 0x0b, 0x99, 0x9a, 0x3f, 0x69, 0x72, 0xaf, 0x33, 0x40, 0xde,
+0x45, 0x53, 0xde, 0x3d, 0x48, 0x8b, 0x15, 0x1b, 0x40, 0x17, 0x1d, 0x44,
+0x19, 0x1f, 0x47, 0x1b, 0x21, 0x4a, 0x1d, 0x24, 0x4e, 0x3a, 0x46, 0x82,
+0x54, 0x63, 0xbc, 0x25, 0x2c, 0x5b, 0x29, 0x30, 0x60, 0x2d, 0x34, 0x65,
+0x35, 0x3e, 0x74, 0x2d, 0x35, 0x69, 0x55, 0x5a, 0x53, 0x92, 0x93, 0x33,
+0xd0, 0xcb, 0x12, 0xe6, 0xdf, 0x37, 0xe3, 0xe1, 0x32, 0xdf, 0xd9, 0x22,
+0xe0, 0xd9, 0x23, 0xe0, 0xd9, 0x23, 0xde, 0xd8, 0x1f, 0xd4, 0xcd, 0x1b,
+0xd9, 0xd2, 0x1c, 0xde, 0xdb, 0x1d, 0xb8, 0xb5, 0x18, 0x74, 0x75, 0x31,
+0x18, 0x20, 0x4f, 0x17, 0x1e, 0x4c, 0x16, 0x1d, 0x4b, 0x17, 0x1e, 0x4a,
+0x18, 0x1f, 0x4a, 0x19, 0x1f, 0x49, 0x1a, 0x20, 0x48, 0x1b, 0x21, 0x48,
+0x1b, 0x21, 0x47, 0x1b, 0x21, 0x45, 0x1a, 0x1f, 0x43, 0x56, 0x63, 0xbe,
+0x50, 0x5c, 0xaf, 0x38, 0x41, 0x78, 0x2a, 0x31, 0x5d, 0x5d, 0x6b, 0xe7,
+0x49, 0x55, 0xe6, 0x3c, 0x47, 0xe1, 0x3e, 0x49, 0xdd, 0x40, 0x4b, 0xd8,
+0x42, 0x4d, 0xd4, 0x43, 0x4e, 0xd0, 0x43, 0x4f, 0xcc, 0x44, 0x4f, 0xc8,
+0x45, 0x4f, 0xc4, 0x44, 0x4e, 0xc0, 0x43, 0x4e, 0xbc, 0x41, 0x4b, 0xb9,
+0x3f, 0x47, 0xb5, 0x3b, 0x45, 0xb2, 0x39, 0x42, 0xae, 0x38, 0x40, 0xab,
+0x35, 0x3e, 0xa8, 0x34, 0x3b, 0xa5, 0x30, 0x38, 0xa2, 0x2e, 0x36, 0x9f,
+0x2c, 0x34, 0x9d, 0x29, 0x31, 0x9a, 0x27, 0x2f, 0x98, 0x27, 0x2d, 0x95,
+0x65, 0x67, 0x64, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0x25, 0x2b, 0x82, 0x26, 0x2c, 0x80, 0x26, 0x2b, 0x7e, 0x25, 0x2b, 0x7c,
+0x26, 0x2c, 0x7b, 0x26, 0x2c, 0x79, 0x25, 0x2b, 0x78, 0x24, 0x2a, 0x76,
+0x23, 0x29, 0x75, 0x22, 0x28, 0x73, 0x22, 0x27, 0x71, 0x21, 0x26, 0x70,
+0x20, 0x25, 0x6e, 0x1f, 0x24, 0x6d, 0x1e, 0x24, 0x6c, 0x1d, 0x23, 0x6a,
+0x1d, 0x23, 0x69, 0x1c, 0x22, 0x67, 0x1c, 0x22, 0x66, 0x1b, 0x21, 0x65,
+0x1a, 0x20, 0x64, 0x1a, 0x1f, 0x63, 0x19, 0x1f, 0x62, 0x19, 0x1e, 0x61,
+0x19, 0x1e, 0x5f, 0x19, 0x1d, 0x5f, 0x18, 0x1c, 0x5e, 0x18, 0x1c, 0x5d,
+0x17, 0x1c, 0x5c, 0x17, 0x1b, 0x5b, 0x17, 0x1b, 0x5a, 0x16, 0x1a, 0x59,
+0x16, 0x1a, 0x58, 0x15, 0x19, 0x57, 0x15, 0x19, 0x56, 0x15, 0x19, 0x56,
+0x15, 0x18, 0x55, 0x15, 0x18, 0x54, 0x14, 0x18, 0x53, 0x14, 0x17, 0x52,
+0x14, 0x17, 0x52, 0x13, 0x17, 0x51, 0x13, 0x17, 0x50, 0x12, 0x16, 0x4f,
+0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e, 0x12, 0x16, 0x4d, 0x12, 0x15, 0x4c,
+0x12, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x14, 0x4a, 0x11, 0x14, 0x4a,
+0x11, 0x14, 0x48, 0x11, 0x14, 0x48, 0x10, 0x13, 0x47, 0x10, 0x13, 0x47,
+0x10, 0x13, 0x47, 0x10, 0x12, 0x45, 0x10, 0x12, 0x45, 0x0f, 0x12, 0x44,
+0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x42, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x10, 0x40,
+0x0e, 0x10, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x0f, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x15, 0x19, 0x48, 0x2b, 0x31, 0x90, 0x2c, 0x34, 0x97, 0x26, 0x2c, 0x81,
+0x22, 0x28, 0x78, 0x22, 0x28, 0x79, 0x22, 0x29, 0x7b, 0x22, 0x29, 0x7d,
+0x22, 0x29, 0x7f, 0x22, 0x29, 0x81, 0x22, 0x29, 0x82, 0x23, 0x2a, 0x84,
+0x24, 0x2b, 0x86, 0x26, 0x2d, 0x89, 0x27, 0x2e, 0x8a, 0x28, 0x2f, 0x8c,
+0x2a, 0x32, 0x8f, 0x2c, 0x33, 0x90, 0x2d, 0x34, 0x93, 0x2f, 0x38, 0x96,
+0x32, 0x39, 0x98, 0x33, 0x3c, 0x9b, 0x34, 0x3d, 0x9d, 0x34, 0x3c, 0xa0,
+0x34, 0x3d, 0xa3, 0x34, 0x3c, 0xa5, 0x33, 0x3c, 0xa8, 0x82, 0x83, 0x62,
+0xd1, 0xcc, 0x1a, 0xd9, 0xd2, 0x1c, 0xdb, 0xd4, 0x1c, 0xdf, 0xd8, 0x20,
+0xcb, 0xc4, 0x18, 0xcf, 0xc9, 0x1a, 0xdd, 0xd6, 0x1c, 0xde, 0xd7, 0x1d,
+0xdf, 0xd8, 0x20, 0xd2, 0xcc, 0x1b, 0xc6, 0xc4, 0x17, 0xc0, 0xba, 0x15,
+0xd1, 0xcf, 0x1a, 0xe0, 0xda, 0x25, 0xe6, 0xdf, 0x37, 0xdf, 0xd9, 0x22,
+0xdc, 0xda, 0x1d, 0xcf, 0xc9, 0x1a, 0x9e, 0x9b, 0x16, 0x58, 0x68, 0xdd,
+0x3c, 0x4a, 0xdd, 0x46, 0x55, 0xdd, 0x32, 0x3c, 0x76, 0x17, 0x1d, 0x45,
+0x19, 0x20, 0x49, 0x1c, 0x22, 0x4d, 0x1e, 0x25, 0x51, 0x21, 0x28, 0x56,
+0x27, 0x2f, 0x60, 0x27, 0x2f, 0x60, 0x2b, 0x33, 0x65, 0x2f, 0x37, 0x6b,
+0x45, 0x4c, 0x63, 0xaa, 0xa8, 0x2a, 0xe6, 0xdf, 0x37, 0xe6, 0xe0, 0x39,
+0xe6, 0xe4, 0x3b, 0xea, 0xe4, 0x45, 0xe3, 0xe1, 0x32, 0xdf, 0xd9, 0x22,
+0xd1, 0xcf, 0x1a, 0xdf, 0xd8, 0x20, 0xd2, 0xcc, 0x1b, 0xdc, 0xda, 0x1d,
+0xde, 0xdb, 0x1d, 0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xdf, 0xd9, 0x22,
+0xce, 0xc9, 0x0f, 0x45, 0x49, 0x3f, 0x19, 0x21, 0x50, 0x1b, 0x22, 0x50,
+0x1c, 0x22, 0x4f, 0x1d, 0x23, 0x4e, 0x1e, 0x24, 0x4e, 0x1e, 0x24, 0x4c,
+0x1e, 0x24, 0x4b, 0x1c, 0x22, 0x47, 0x49, 0x55, 0x9d, 0x2d, 0x35, 0x64,
+0x18, 0x1d, 0x3f, 0x32, 0x3b, 0x6e, 0x5a, 0x69, 0xe6, 0x47, 0x53, 0xe6,
+0x41, 0x4c, 0xe6, 0x43, 0x4f, 0xe5, 0x44, 0x51, 0xdf, 0x47, 0x52, 0xdb,
+0x48, 0x54, 0xd6, 0x49, 0x55, 0xd2, 0x49, 0x55, 0xce, 0x49, 0x54, 0xca,
+0x48, 0x53, 0xc5, 0x44, 0x4f, 0xc1, 0x42, 0x4c, 0xbd, 0x40, 0x49, 0xba,
+0x3c, 0x46, 0xb6, 0x3a, 0x44, 0xb3, 0x38, 0x41, 0xb0, 0x35, 0x3d, 0xad,
+0x32, 0x3b, 0xa9, 0x2f, 0x37, 0xa6, 0x2d, 0x35, 0xa4, 0x2a, 0x33, 0xa0,
+0x29, 0x31, 0x9e, 0x27, 0x2e, 0x9b, 0x27, 0x2e, 0x98, 0x27, 0x2e, 0x96,
+0x66, 0x69, 0x64, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xd0, 0xca, 0x15,
+0x29, 0x30, 0x82, 0x28, 0x2f, 0x81, 0x28, 0x2f, 0x7f, 0x27, 0x2d, 0x7d,
+0x26, 0x2c, 0x7b, 0x25, 0x2b, 0x79, 0x24, 0x2a, 0x77, 0x23, 0x29, 0x76,
+0x22, 0x27, 0x75, 0x21, 0x26, 0x73, 0x21, 0x26, 0x72, 0x20, 0x25, 0x70,
+0x1f, 0x25, 0x6f, 0x1e, 0x24, 0x6d, 0x1d, 0x24, 0x6c, 0x1d, 0x23, 0x6a,
+0x1c, 0x22, 0x69, 0x1c, 0x21, 0x68, 0x1b, 0x21, 0x66, 0x1b, 0x20, 0x65,
+0x1a, 0x1f, 0x64, 0x1a, 0x1f, 0x63, 0x19, 0x1e, 0x62, 0x19, 0x1e, 0x62,
+0x19, 0x1d, 0x5f, 0x18, 0x1d, 0x5f, 0x18, 0x1c, 0x5e, 0x17, 0x1c, 0x5d,
+0x17, 0x1b, 0x5c, 0x16, 0x1b, 0x5b, 0x16, 0x1a, 0x5a, 0x16, 0x1a, 0x59,
+0x15, 0x19, 0x58, 0x15, 0x19, 0x57, 0x15, 0x19, 0x57, 0x15, 0x18, 0x56,
+0x14, 0x18, 0x55, 0x14, 0x18, 0x54, 0x14, 0x17, 0x53, 0x13, 0x17, 0x52,
+0x13, 0x17, 0x52, 0x13, 0x17, 0x51, 0x13, 0x16, 0x50, 0x12, 0x16, 0x4f,
+0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e, 0x12, 0x15, 0x4d, 0x12, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4a,
+0x10, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x13, 0x47, 0x10, 0x13, 0x47,
+0x10, 0x13, 0x47, 0x0f, 0x12, 0x45, 0x0f, 0x12, 0x45, 0x0f, 0x12, 0x44,
+0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x42, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x10, 0x40,
+0x0e, 0x10, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x17, 0x1a, 0x48, 0x2d, 0x34, 0x92, 0x2f, 0x36, 0x97, 0x28, 0x2d, 0x81,
+0x24, 0x2a, 0x78, 0x25, 0x2a, 0x7a, 0x25, 0x2a, 0x7b, 0x24, 0x2a, 0x7d,
+0x24, 0x2a, 0x7f, 0x25, 0x2a, 0x81, 0x25, 0x2b, 0x82, 0x25, 0x2b, 0x85,
+0x25, 0x2c, 0x87, 0x25, 0x2c, 0x89, 0x25, 0x2d, 0x8b, 0x27, 0x2d, 0x8d,
+0x28, 0x2f, 0x90, 0x29, 0x30, 0x91, 0x2b, 0x33, 0x94, 0x2d, 0x34, 0x96,
+0x2f, 0x36, 0x99, 0x30, 0x38, 0x9b, 0x33, 0x3a, 0x9e, 0x35, 0x3e, 0xa0,
+0x38, 0x41, 0xa4, 0x72, 0x76, 0x71, 0xd2, 0xcd, 0x19, 0xdf, 0xd9, 0x22,
+0xe0, 0xde, 0x25, 0xd1, 0xcf, 0x1a, 0xdc, 0xda, 0x1d, 0xde, 0xdc, 0x1f,
+0xde, 0xdc, 0x1f, 0xd4, 0xcd, 0x1b, 0xad, 0xac, 0x46, 0x8a, 0x8e, 0x72,
+0x7c, 0x81, 0x8a, 0x80, 0x87, 0x8d, 0x82, 0x87, 0x84, 0x9a, 0x9b, 0x43,
+0xce, 0xc9, 0x0d, 0xe0, 0xde, 0x25, 0xd4, 0xcd, 0x1b, 0xdb, 0xd4, 0x1c,
+0xd9, 0xd2, 0x1c, 0xcf, 0xc9, 0x1a, 0x8d, 0x8c, 0x28, 0x11, 0x16, 0x3a,
+0x1b, 0x22, 0x4d, 0x49, 0x59, 0xdb, 0x47, 0x56, 0xda, 0x26, 0x2e, 0x5f,
+0x19, 0x20, 0x4b, 0x1c, 0x22, 0x4f, 0x1f, 0x26, 0x54, 0x22, 0x2a, 0x59,
+0x26, 0x2d, 0x5e, 0x29, 0x31, 0x64, 0x2d, 0x35, 0x6a, 0x81, 0x83, 0x42,
+0xde, 0xd7, 0x1d, 0xe1, 0xda, 0x26, 0xe4, 0xe2, 0x35, 0xe5, 0xdf, 0x36,
+0xe1, 0xda, 0x26, 0xe8, 0xe2, 0x3f, 0xe1, 0xdb, 0x28, 0xbe, 0xbb, 0x21,
+0xaa, 0xa8, 0x2d, 0xa9, 0xa7, 0x2c, 0xd4, 0xcd, 0x1b, 0xdf, 0xd8, 0x20,
+0xd2, 0xcc, 0x1b, 0xde, 0xdb, 0x1d, 0xe2, 0xe0, 0x2d, 0xe1, 0xdf, 0x2a,
+0xe3, 0xdd, 0x30, 0xdf, 0xd8, 0x20, 0x76, 0x77, 0x32, 0x1f, 0x26, 0x56,
+0x20, 0x27, 0x56, 0x21, 0x27, 0x54, 0x22, 0x28, 0x53, 0x22, 0x28, 0x51,
+0x20, 0x26, 0x4e, 0x1e, 0x24, 0x4a, 0x1c, 0x22, 0x47, 0x1a, 0x1f, 0x43,
+0x3e, 0x48, 0x85, 0x57, 0x66, 0xe6, 0x49, 0x56, 0xe6, 0x4a, 0x57, 0xe6,
+0x4b, 0x58, 0xe6, 0x4c, 0x58, 0xe6, 0x4c, 0x59, 0xe2, 0x4e, 0x5b, 0xdd,
+0x4e, 0x5b, 0xd8, 0x4f, 0x5b, 0xd4, 0x4d, 0x59, 0xcf, 0x49, 0x54, 0xcb,
+0x45, 0x51, 0xc7, 0x43, 0x4e, 0xc2, 0x41, 0x4a, 0xbf, 0x3d, 0x47, 0xbb,
+0x39, 0x43, 0xb8, 0x35, 0x3f, 0xb4, 0x33, 0x3c, 0xb0, 0x30, 0x39, 0xad,
+0x2e, 0x36, 0xaa, 0x2b, 0x34, 0xa7, 0x2a, 0x32, 0xa4, 0x29, 0x30, 0xa1,
+0x29, 0x31, 0x9e, 0x2a, 0x32, 0x9c, 0x2b, 0x32, 0x99, 0x2b, 0x32, 0x97,
+0x3f, 0x45, 0x84, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0x7d, 0x7d, 0x4d,
+0x29, 0x30, 0x82, 0x28, 0x2e, 0x81, 0x27, 0x2d, 0x7f, 0x26, 0x2c, 0x7d,
+0x25, 0x2b, 0x7b, 0x24, 0x2a, 0x7a, 0x23, 0x29, 0x78, 0x22, 0x28, 0x77,
+0x21, 0x27, 0x75, 0x20, 0x26, 0x74, 0x20, 0x25, 0x72, 0x1f, 0x25, 0x71,
+0x1e, 0x24, 0x6f, 0x1d, 0x23, 0x6e, 0x1d, 0x23, 0x6c, 0x1c, 0x22, 0x6b,
+0x1c, 0x21, 0x69, 0x1c, 0x21, 0x68, 0x1b, 0x20, 0x67, 0x1b, 0x1f, 0x65,
+0x1a, 0x1f, 0x65, 0x1a, 0x1e, 0x63, 0x19, 0x1e, 0x63, 0x19, 0x1d, 0x62,
+0x18, 0x1d, 0x60, 0x18, 0x1c, 0x5f, 0x17, 0x1b, 0x5e, 0x17, 0x1b, 0x5d,
+0x16, 0x1a, 0x5c, 0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5a, 0x15, 0x19, 0x59,
+0x15, 0x19, 0x59, 0x15, 0x19, 0x58, 0x14, 0x19, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x18, 0x55, 0x14, 0x17, 0x54, 0x13, 0x17, 0x53, 0x13, 0x17, 0x53,
+0x13, 0x17, 0x52, 0x13, 0x16, 0x51, 0x12, 0x16, 0x50, 0x12, 0x16, 0x4f,
+0x12, 0x16, 0x4f, 0x12, 0x15, 0x4e, 0x11, 0x15, 0x4d, 0x11, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4a,
+0x10, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x13, 0x48, 0x10, 0x13, 0x48,
+0x10, 0x13, 0x47, 0x0f, 0x12, 0x45, 0x0f, 0x12, 0x45, 0x0f, 0x12, 0x44,
+0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0e, 0x11, 0x42,
+0x0e, 0x11, 0x42, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x10, 0x40,
+0x0e, 0x10, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x17, 0x1a, 0x48, 0x2f, 0x36, 0x92, 0x31, 0x3a, 0x98, 0x2a, 0x30, 0x81,
+0x26, 0x2c, 0x78, 0x27, 0x2d, 0x7a, 0x26, 0x2d, 0x7c, 0x27, 0x2d, 0x7e,
+0x27, 0x2e, 0x80, 0x27, 0x2e, 0x81, 0x27, 0x2f, 0x83, 0x28, 0x2e, 0x85,
+0x28, 0x2e, 0x87, 0x28, 0x2f, 0x8a, 0x28, 0x2f, 0x8b, 0x28, 0x2f, 0x8e,
+0x29, 0x2f, 0x90, 0x28, 0x2f, 0x92, 0x29, 0x30, 0x95, 0x2a, 0x32, 0x97,
+0x2c, 0x34, 0x9a, 0x2e, 0x35, 0x9c, 0x30, 0x38, 0x9f, 0x44, 0x4c, 0x90,
+0xaa, 0xa9, 0x3b, 0xde, 0xdb, 0x1d, 0xe1, 0xda, 0x26, 0xd7, 0xd5, 0x1c,
+0xd7, 0xd5, 0x1c, 0xde, 0xdc, 0x1f, 0xd5, 0xcf, 0x1c, 0xd2, 0xcd, 0x1b,
+0x86, 0x89, 0x6c, 0x3a, 0x44, 0xc2, 0x39, 0x43, 0xc6, 0x3c, 0x46, 0xcb,
+0x40, 0x4c, 0xcf, 0x45, 0x51, 0xd2, 0x4c, 0x58, 0xd7, 0x54, 0x61, 0xdb,
+0x52, 0x5f, 0xc3, 0x95, 0x95, 0x35, 0xb2, 0xac, 0x11, 0xd7, 0xd0, 0x1c,
+0xd9, 0xd2, 0x1c, 0xe1, 0xda, 0x26, 0x87, 0x8f, 0x95, 0x2a, 0x33, 0x67,
+0x12, 0x18, 0x3e, 0x14, 0x1a, 0x41, 0x50, 0x60, 0xc2, 0x49, 0x59, 0xd8,
+0x19, 0x20, 0x4c, 0x1d, 0x24, 0x52, 0x20, 0x27, 0x56, 0x23, 0x2b, 0x5c,
+0x27, 0x2f, 0x62, 0x2b, 0x33, 0x69, 0xa9, 0xa7, 0x2a, 0xe1, 0xda, 0x26,
+0xe4, 0xde, 0x31, 0xe6, 0xe4, 0x39, 0xe0, 0xde, 0x25, 0xdf, 0xd8, 0x20,
+0xe3, 0xdd, 0x30, 0x87, 0x8a, 0x4f, 0x3c, 0x46, 0x8a, 0x3b, 0x45, 0x89,
+0x39, 0x43, 0x86, 0x34, 0x3e, 0x81, 0x30, 0x3a, 0x7c, 0x7e, 0x80, 0x45,
+0xe1, 0xdb, 0x2a, 0xe0, 0xde, 0x25, 0xe0, 0xd9, 0x23, 0xe1, 0xda, 0x26,
+0xe2, 0xdc, 0x2d, 0xe3, 0xdd, 0x2e, 0xde, 0xdb, 0x1d, 0x8f, 0x8e, 0x2d,
+0x25, 0x2c, 0x5c, 0x26, 0x2e, 0x5c, 0x26, 0x2c, 0x59, 0x23, 0x2a, 0x55,
+0x21, 0x27, 0x50, 0x1f, 0x25, 0x4c, 0x1d, 0x22, 0x48, 0x4b, 0x58, 0xa3,
+0x54, 0x63, 0xe5, 0x52, 0x61, 0xe5, 0x54, 0x61, 0xe5, 0x55, 0x63, 0xe5,
+0x55, 0x64, 0xe6, 0x55, 0x64, 0xe6, 0x54, 0x62, 0xe4, 0x56, 0x63, 0xdf,
+0x52, 0x5f, 0xda, 0x4e, 0x5a, 0xd5, 0x4b, 0x57, 0xd1, 0x47, 0x52, 0xcd,
+0x44, 0x4f, 0xc8, 0x3f, 0x4a, 0xc4, 0x3b, 0x46, 0xc0, 0x37, 0x41, 0xbc,
+0x34, 0x3d, 0xb8, 0x31, 0x3a, 0xb5, 0x2f, 0x38, 0xb2, 0x2b, 0x34, 0xae,
+0x2c, 0x35, 0xaa, 0x2d, 0x35, 0xa8, 0x2d, 0x36, 0xa5, 0x2e, 0x36, 0xa2,
+0x2f, 0x36, 0x9f, 0x30, 0x37, 0x9c, 0x30, 0x37, 0x9a, 0x30, 0x38, 0x97,
+0x30, 0x38, 0x95, 0x6d, 0x6f, 0x63, 0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07,
+0xe6, 0xdf, 0x07, 0xe6, 0xdf, 0x07, 0x91, 0x91, 0x40, 0x29, 0x30, 0x85,
+0x27, 0x2f, 0x83, 0x26, 0x2d, 0x81, 0x26, 0x2c, 0x7f, 0x25, 0x2b, 0x7e,
+0x24, 0x29, 0x7c, 0x23, 0x29, 0x7a, 0x22, 0x28, 0x78, 0x21, 0x27, 0x76,
+0x20, 0x26, 0x75, 0x1f, 0x26, 0x74, 0x1f, 0x25, 0x72, 0x1e, 0x24, 0x71,
+0x1d, 0x23, 0x6f, 0x1d, 0x23, 0x6e, 0x1c, 0x22, 0x6c, 0x1c, 0x21, 0x6b,
+0x1c, 0x21, 0x6a, 0x1b, 0x20, 0x68, 0x1a, 0x1f, 0x67, 0x1a, 0x1e, 0x66,
+0x19, 0x1e, 0x65, 0x19, 0x1d, 0x64, 0x19, 0x1d, 0x63, 0x18, 0x1c, 0x62,
+0x18, 0x1c, 0x60, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x16, 0x1a, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x1a, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x19, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x17, 0x55, 0x13, 0x17, 0x54, 0x13, 0x17, 0x53, 0x13, 0x17, 0x53,
+0x13, 0x16, 0x52, 0x12, 0x16, 0x51, 0x12, 0x15, 0x50, 0x12, 0x15, 0x50,
+0x12, 0x15, 0x4f, 0x12, 0x15, 0x4e, 0x11, 0x15, 0x4d, 0x11, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4a,
+0x10, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x13, 0x48, 0x10, 0x13, 0x48,
+0x10, 0x13, 0x47, 0x10, 0x13, 0x46, 0x10, 0x13, 0x45, 0x0f, 0x13, 0x44,
+0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43, 0x0f, 0x12, 0x43,
+0x0e, 0x11, 0x42, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x10, 0x40,
+0x0e, 0x10, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x18, 0x48, 0x2b, 0x32, 0x92, 0x2e, 0x35, 0x98, 0x28, 0x2e, 0x82,
+0x26, 0x2b, 0x79, 0x26, 0x2d, 0x7a, 0x28, 0x2f, 0x7c, 0x2a, 0x30, 0x7e,
+0x2a, 0x31, 0x80, 0x2b, 0x31, 0x81, 0x2b, 0x31, 0x83, 0x2b, 0x32, 0x86,
+0x2b, 0x32, 0x88, 0x2b, 0x32, 0x8a, 0x2b, 0x32, 0x8c, 0x2b, 0x32, 0x8e,
+0x2c, 0x33, 0x90, 0x2c, 0x33, 0x93, 0x2c, 0x34, 0x96, 0x2b, 0x33, 0x97,
+0x2b, 0x34, 0x9b, 0x2c, 0x34, 0x9d, 0x41, 0x47, 0x8f, 0xd1, 0xcb, 0x18,
+0xd5, 0xcf, 0x1c, 0xd7, 0xd0, 0x1c, 0xde, 0xdc, 0x1f, 0xe1, 0xdf, 0x2a,
+0xd1, 0xcf, 0x1a, 0xd7, 0xd0, 0x1c, 0x8a, 0x8d, 0x6a, 0x45, 0x4e, 0xbd,
+0x44, 0x4e, 0xc0, 0x42, 0x4d, 0xc4, 0x41, 0x4c, 0xc8, 0x40, 0x4b, 0xcc,
+0x3e, 0x49, 0xd0, 0x3d, 0x49, 0xd5, 0x42, 0x4e, 0xd9, 0x49, 0x56, 0xdd,
+0x51, 0x5e, 0xe2, 0x89, 0x90, 0x97, 0xdd, 0xd6, 0x1c, 0xd9, 0xd2, 0x1c,
+0xdf, 0xd8, 0x20, 0xe2, 0xe0, 0x2d, 0x3f, 0x42, 0x2f, 0x1f, 0x27, 0x54,
+0x34, 0x3f, 0x7d, 0x14, 0x1a, 0x43, 0x15, 0x1c, 0x46, 0x17, 0x1e, 0x4a,
+0x4c, 0x5e, 0xd6, 0x1d, 0x24, 0x54, 0x1f, 0x27, 0x59, 0x24, 0x2c, 0x5f,
+0x28, 0x31, 0x66, 0xa8, 0xa6, 0x29, 0xde, 0xdb, 0x1d, 0xe2, 0xdc, 0x2b,
+0xe0, 0xde, 0x25, 0xe4, 0xde, 0x31, 0xe1, 0xdb, 0x2a, 0xd4, 0xcf, 0x17,
+0x59, 0x61, 0x88, 0x46, 0x51, 0x99, 0x45, 0x50, 0x99, 0x43, 0x4e, 0x98,
+0x40, 0x4b, 0x94, 0x3b, 0x46, 0x8e, 0x35, 0x40, 0x87, 0x31, 0x3b, 0x81,
+0x40, 0x48, 0x6d, 0xd0, 0xcb, 0x13, 0xd9, 0xd2, 0x1c, 0xe1, 0xdb, 0x2a,
+0xde, 0xd7, 0x1d, 0xde, 0xdc, 0x1f, 0xe2, 0xe0, 0x2b, 0xe1, 0xdb, 0x28,
+0x6a, 0x6c, 0x45, 0x2b, 0x32, 0x62, 0x28, 0x2f, 0x5c, 0x24, 0x2b, 0x57,
+0x22, 0x29, 0x53, 0x20, 0x26, 0x4f, 0x55, 0x63, 0xbc, 0x5c, 0x6c, 0xe4,
+0x5e, 0x6d, 0xe4, 0x60, 0x70, 0xe5, 0x60, 0x6f, 0xe3, 0x60, 0x6f, 0xe4,
+0x60, 0x6e, 0xe4, 0x5f, 0x6e, 0xe4, 0x5a, 0x68, 0xe6, 0x53, 0x60, 0xe1,
+0x4f, 0x5c, 0xdc, 0x4b, 0x57, 0xd7, 0x47, 0x53, 0xd2, 0x41, 0x4d, 0xce,
+0x3c, 0x48, 0xc9, 0x38, 0x42, 0xc5, 0x36, 0x3f, 0xc1, 0x32, 0x3c, 0xbd,
+0x2f, 0x38, 0xb9, 0x2f, 0x38, 0xb5, 0x30, 0x3a, 0xb2, 0x32, 0x3a, 0xaf,
+0x32, 0x3b, 0xac, 0x33, 0x3c, 0xa9, 0x34, 0x3c, 0xa6, 0x34, 0x3d, 0xa2,
+0x35, 0x3d, 0xa0, 0x35, 0x3e, 0x9d, 0x35, 0x3e, 0x9b, 0x33, 0x3b, 0x97,
+0x31, 0x39, 0x95, 0x2f, 0x38, 0x93, 0x2e, 0x35, 0x90, 0x6a, 0x6d, 0x61,
+0x69, 0x6b, 0x5f, 0x3e, 0x44, 0x7a, 0x29, 0x30, 0x88, 0x27, 0x2e, 0x86,
+0x26, 0x2d, 0x83, 0x26, 0x2c, 0x81, 0x25, 0x2b, 0x80, 0x24, 0x29, 0x7e,
+0x23, 0x28, 0x7c, 0x22, 0x28, 0x7a, 0x21, 0x28, 0x79, 0x20, 0x26, 0x77,
+0x1f, 0x25, 0x75, 0x1e, 0x24, 0x74, 0x1e, 0x24, 0x73, 0x1d, 0x23, 0x71,
+0x1d, 0x22, 0x70, 0x1d, 0x21, 0x6e, 0x1c, 0x21, 0x6d, 0x1b, 0x20, 0x6b,
+0x1b, 0x1f, 0x6a, 0x1a, 0x1f, 0x68, 0x1a, 0x1e, 0x67, 0x19, 0x1e, 0x66,
+0x19, 0x1d, 0x65, 0x18, 0x1c, 0x64, 0x18, 0x1c, 0x63, 0x18, 0x1b, 0x62,
+0x17, 0x1b, 0x61, 0x17, 0x1b, 0x60, 0x16, 0x1b, 0x5f, 0x16, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x15, 0x19, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x19, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x18, 0x58, 0x14, 0x18, 0x57, 0x14, 0x17, 0x56,
+0x13, 0x17, 0x55, 0x13, 0x17, 0x54, 0x13, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x16, 0x52, 0x13, 0x16, 0x51, 0x12, 0x16, 0x50, 0x12, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4b, 0x11, 0x14, 0x4a,
+0x11, 0x14, 0x49, 0x10, 0x14, 0x48, 0x10, 0x13, 0x48, 0x10, 0x13, 0x48,
+0x10, 0x13, 0x47, 0x10, 0x13, 0x47, 0x10, 0x13, 0x45, 0x0f, 0x13, 0x44,
+0x0f, 0x13, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43,
+0x0e, 0x11, 0x42, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x41, 0x0e, 0x11, 0x40,
+0x0e, 0x11, 0x40, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3d, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x48, 0x28, 0x2e, 0x93, 0x2a, 0x32, 0x98, 0x25, 0x2b, 0x82,
+0x22, 0x28, 0x79, 0x23, 0x29, 0x7b, 0x24, 0x2a, 0x7d, 0x26, 0x2c, 0x7f,
+0x27, 0x2e, 0x81, 0x29, 0x30, 0x82, 0x2b, 0x31, 0x84, 0x2d, 0x34, 0x86,
+0x2e, 0x36, 0x88, 0x2f, 0x36, 0x8a, 0x2f, 0x37, 0x8c, 0x30, 0x38, 0x8f,
+0x30, 0x38, 0x91, 0x2f, 0x38, 0x93, 0x30, 0x38, 0x96, 0x30, 0x38, 0x98,
+0x30, 0x38, 0x9b, 0x43, 0x4a, 0x8d, 0xd1, 0xcc, 0x18, 0xdf, 0xd8, 0x20,
+0xe3, 0xdd, 0x30, 0xde, 0xd7, 0x1d, 0xde, 0xd8, 0x1f, 0xcc, 0xc6, 0x19,
+0xd1, 0xcc, 0x1a, 0x4b, 0x54, 0xa2, 0x3c, 0x46, 0xba, 0x3f, 0x4a, 0xbe,
+0x44, 0x4e, 0xc2, 0x49, 0x54, 0xc5, 0x4b, 0x57, 0xca, 0x49, 0x56, 0xce,
+0x48, 0x54, 0xd2, 0x46, 0x52, 0xd6, 0x44, 0x4f, 0xda, 0x40, 0x4c, 0xdf,
+0x46, 0x53, 0xe2, 0x81, 0x88, 0x98, 0xde, 0xdc, 0x1f, 0xde, 0xdc, 0x1f,
+0xe1, 0xda, 0x26, 0xe2, 0xdc, 0x2d, 0x12, 0x18, 0x3d, 0x13, 0x19, 0x3f,
+0x14, 0x1a, 0x42, 0x15, 0x1b, 0x45, 0x15, 0x1c, 0x48, 0x17, 0x1e, 0x4c,
+0x19, 0x21, 0x50, 0x46, 0x56, 0xa8, 0x20, 0x28, 0x5b, 0x24, 0x2c, 0x62,
+0xa7, 0xa5, 0x28, 0xdf, 0xd9, 0x22, 0xe1, 0xda, 0x26, 0xdd, 0xd6, 0x1c,
+0xe1, 0xdb, 0x28, 0xdf, 0xd9, 0x22, 0xd5, 0xd0, 0x19, 0x64, 0x6d, 0x98,
+0x53, 0x5f, 0xac, 0x51, 0x5d, 0xac, 0x4f, 0x5c, 0xab, 0x4d, 0x5a, 0xaa,
+0x49, 0x55, 0xa5, 0x43, 0x4f, 0x9d, 0x3c, 0x48, 0x95, 0x35, 0x41, 0x8c,
+0x2f, 0x3a, 0x83, 0x54, 0x5a, 0x62, 0xdf, 0xd8, 0x20, 0xdb, 0xd4, 0x1c,
+0xe0, 0xde, 0x25, 0xde, 0xdc, 0x1f, 0xe2, 0xdc, 0x2d, 0xdf, 0xd8, 0x20,
+0xd1, 0xcc, 0x12, 0x41, 0x46, 0x5a, 0x29, 0x30, 0x5f, 0x26, 0x2d, 0x5b,
+0x23, 0x2a, 0x55, 0x58, 0x68, 0xc6, 0x51, 0x5f, 0xb2, 0x4d, 0x59, 0xa7,
+0x46, 0x52, 0x98, 0x45, 0x51, 0x97, 0x46, 0x52, 0x99, 0x45, 0x51, 0x98,
+0x57, 0x64, 0xc9, 0x5d, 0x6c, 0xe4, 0x56, 0x63, 0xe5, 0x50, 0x5d, 0xe2,
+0x49, 0x56, 0xdd, 0x43, 0x4f, 0xd8, 0x3d, 0x49, 0xd4, 0x39, 0x43, 0xcf,
+0x36, 0x40, 0xca, 0x32, 0x3c, 0xc6, 0x34, 0x3d, 0xc2, 0x34, 0x3e, 0xbf,
+0x36, 0x3f, 0xbb, 0x37, 0x40, 0xb7, 0x39, 0x42, 0xb3, 0x39, 0x43, 0xb0,
+0x3a, 0x43, 0xad, 0x3b, 0x45, 0xa9, 0x3c, 0x45, 0xa6, 0x39, 0x42, 0xa3,
+0x36, 0x3f, 0xa0, 0x35, 0x3d, 0x9e, 0x32, 0x3b, 0x9a, 0x31, 0x38, 0x98,
+0x2f, 0x38, 0x95, 0x2d, 0x35, 0x93, 0x2d, 0x33, 0x91, 0x2b, 0x32, 0x8f,
+0x29, 0x31, 0x8c, 0x28, 0x30, 0x8a, 0x26, 0x2e, 0x87, 0x26, 0x2d, 0x86,
+0x25, 0x2b, 0x84, 0x25, 0x2b, 0x82, 0x23, 0x29, 0x80, 0x22, 0x29, 0x7f,
+0x21, 0x28, 0x7d, 0x20, 0x27, 0x7b, 0x1f, 0x26, 0x79, 0x1f, 0x25, 0x77,
+0x1f, 0x24, 0x76, 0x1e, 0x23, 0x75, 0x1e, 0x22, 0x73, 0x1d, 0x22, 0x71,
+0x1c, 0x21, 0x70, 0x1c, 0x21, 0x6e, 0x1b, 0x20, 0x6d, 0x1b, 0x1f, 0x6b,
+0x1a, 0x1f, 0x6a, 0x1a, 0x1e, 0x69, 0x19, 0x1e, 0x67, 0x18, 0x1d, 0x66,
+0x18, 0x1d, 0x65, 0x18, 0x1c, 0x65, 0x17, 0x1c, 0x63, 0x17, 0x1b, 0x62,
+0x16, 0x1b, 0x61, 0x16, 0x1b, 0x60, 0x16, 0x1a, 0x5f, 0x15, 0x1a, 0x5e,
+0x15, 0x19, 0x5d, 0x15, 0x19, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x19, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x18, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x17, 0x55, 0x13, 0x17, 0x54, 0x13, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x16, 0x52, 0x13, 0x16, 0x51, 0x13, 0x16, 0x51, 0x12, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x14, 0x4a,
+0x11, 0x14, 0x49, 0x11, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x13, 0x48,
+0x10, 0x13, 0x47, 0x10, 0x13, 0x47, 0x10, 0x13, 0x45, 0x0f, 0x13, 0x44,
+0x0f, 0x13, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43,
+0x0f, 0x11, 0x42, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x41, 0x0e, 0x11, 0x40,
+0x0e, 0x11, 0x40, 0x0e, 0x10, 0x3f, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x48, 0x25, 0x2c, 0x93, 0x28, 0x2e, 0x99, 0x22, 0x28, 0x82,
+0x1f, 0x25, 0x79, 0x20, 0x26, 0x7b, 0x21, 0x27, 0x7d, 0x22, 0x29, 0x7f,
+0x24, 0x2a, 0x81, 0x25, 0x2b, 0x82, 0x26, 0x2c, 0x84, 0x28, 0x2e, 0x87,
+0x29, 0x31, 0x89, 0x2c, 0x32, 0x8a, 0x2e, 0x35, 0x8d, 0x2f, 0x37, 0x8f,
+0x32, 0x3a, 0x91, 0x35, 0x3e, 0x94, 0x36, 0x3d, 0x96, 0x35, 0x3e, 0x99,
+0x48, 0x4f, 0x8a, 0xd1, 0xcc, 0x18, 0xd5, 0xcf, 0x1c, 0xe3, 0xdd, 0x30,
+0xe1, 0xdb, 0x2a, 0xde, 0xdb, 0x1d, 0xd7, 0xd0, 0x1c, 0xd1, 0xcc, 0x1a,
+0x47, 0x4e, 0xa0, 0x34, 0x3d, 0xb7, 0x36, 0x40, 0xbb, 0x39, 0x44, 0xbf,
+0x3c, 0x47, 0xc2, 0x40, 0x4b, 0xc6, 0x45, 0x50, 0xcb, 0x4a, 0x57, 0xcf,
+0x51, 0x5d, 0xd4, 0x53, 0x61, 0xd8, 0x51, 0x5f, 0xdd, 0x4f, 0x5c, 0xe2,
+0x4d, 0x5b, 0xe2, 0x7f, 0x85, 0x98, 0xdf, 0xd9, 0x22, 0xdf, 0xd9, 0x22,
+0xde, 0xdb, 0x1d, 0xcf, 0xca, 0x0f, 0x13, 0x19, 0x3e, 0x14, 0x1a, 0x41,
+0x15, 0x1b, 0x44, 0x16, 0x1c, 0x47, 0x17, 0x1e, 0x4a, 0x18, 0x1f, 0x4e,
+0x19, 0x21, 0x52, 0x1c, 0x24, 0x57, 0x1f, 0x27, 0x5d, 0x8f, 0x8e, 0x31,
+0xe6, 0xdf, 0x37, 0xe6, 0xdf, 0x37, 0xd7, 0xd5, 0x1c, 0xdf, 0xd9, 0x22,
+0xdf, 0xd9, 0x22, 0xd5, 0xd0, 0x19, 0x72, 0x7c, 0xa9, 0x64, 0x70, 0xc2,
+0x62, 0x6f, 0xc3, 0x5f, 0x6c, 0xc2, 0x5e, 0x6b, 0xc3, 0x5b, 0x68, 0xc0,
+0x55, 0x63, 0xba, 0x4c, 0x59, 0xaf, 0x42, 0x4f, 0xa3, 0x3b, 0x47, 0x99,
+0x34, 0x40, 0x8f, 0x2e, 0x39, 0x85, 0x92, 0x93, 0x3c, 0xd1, 0xca, 0x1a,
+0xde, 0xdb, 0x1d, 0xdf, 0xd8, 0x20, 0xe0, 0xde, 0x25, 0xe1, 0xda, 0x26,
+0xe1, 0xdb, 0x28, 0x94, 0x93, 0x32, 0x2b, 0x32, 0x63, 0x27, 0x2e, 0x5d,
+0x30, 0x39, 0x6c, 0x25, 0x2c, 0x58, 0x1f, 0x25, 0x4e, 0x1d, 0x23, 0x4a,
+0x1a, 0x20, 0x46, 0x1c, 0x21, 0x48, 0x3a, 0x45, 0x80, 0x4e, 0x5b, 0xb0,
+0x5b, 0x69, 0xd7, 0x56, 0x65, 0xe3, 0x4d, 0x5a, 0xe4, 0x43, 0x50, 0xe3,
+0x3e, 0x4a, 0xde, 0x39, 0x44, 0xd9, 0x36, 0x40, 0xd4, 0x38, 0x42, 0xd0,
+0x39, 0x44, 0xcb, 0x3c, 0x45, 0xc7, 0x3c, 0x47, 0xc2, 0x3e, 0x49, 0xbf,
+0x40, 0x4b, 0xbb, 0x42, 0x4c, 0xb7, 0x42, 0x4c, 0xb3, 0x3f, 0x49, 0xb0,
+0x3d, 0x46, 0xad, 0x3a, 0x43, 0xaa, 0x38, 0x42, 0xa7, 0x36, 0x3e, 0xa4,
+0x33, 0x3d, 0xa1, 0x32, 0x3a, 0x9e, 0x30, 0x38, 0x9b, 0x2e, 0x36, 0x99,
+0x2d, 0x34, 0x96, 0x2c, 0x33, 0x94, 0x2a, 0x32, 0x91, 0x29, 0x31, 0x8f,
+0x27, 0x2f, 0x8d, 0x27, 0x2e, 0x8a, 0x26, 0x2c, 0x89, 0x25, 0x2b, 0x87,
+0x23, 0x2a, 0x84, 0x23, 0x29, 0x82, 0x22, 0x29, 0x80, 0x21, 0x27, 0x7f,
+0x20, 0x26, 0x7d, 0x1f, 0x26, 0x7b, 0x1f, 0x25, 0x79, 0x1e, 0x24, 0x77,
+0x1e, 0x23, 0x76, 0x1d, 0x22, 0x75, 0x1c, 0x21, 0x73, 0x1c, 0x21, 0x72,
+0x1b, 0x20, 0x70, 0x1b, 0x20, 0x6f, 0x1a, 0x1f, 0x6d, 0x1a, 0x1e, 0x6c,
+0x1a, 0x1e, 0x6a, 0x19, 0x1d, 0x69, 0x19, 0x1d, 0x68, 0x18, 0x1c, 0x66,
+0x17, 0x1c, 0x65, 0x17, 0x1c, 0x65, 0x17, 0x1c, 0x63, 0x17, 0x1b, 0x62,
+0x16, 0x1b, 0x61, 0x16, 0x1b, 0x60, 0x16, 0x1a, 0x5f, 0x16, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x15, 0x19, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x19, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x18, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x17, 0x55, 0x14, 0x17, 0x55, 0x13, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x17, 0x52, 0x13, 0x16, 0x51, 0x13, 0x16, 0x51, 0x12, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4e, 0x12, 0x15, 0x4d,
+0x11, 0x15, 0x4c, 0x11, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x14, 0x4a,
+0x11, 0x14, 0x49, 0x11, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x14, 0x48,
+0x10, 0x13, 0x47, 0x10, 0x13, 0x47, 0x10, 0x13, 0x45, 0x10, 0x13, 0x45,
+0x10, 0x13, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x44, 0x0f, 0x12, 0x43,
+0x0f, 0x11, 0x42, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x40,
+0x0f, 0x11, 0x40, 0x0e, 0x10, 0x3f, 0x0e, 0x10, 0x3f, 0x0d, 0x10, 0x3e,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x11, 0x14, 0x48, 0x23, 0x2b, 0x93, 0x24, 0x2d, 0x99, 0x20, 0x26, 0x82,
+0x1d, 0x23, 0x79, 0x1e, 0x23, 0x7b, 0x1f, 0x24, 0x7d, 0x20, 0x25, 0x7f,
+0x21, 0x26, 0x81, 0x21, 0x28, 0x82, 0x22, 0x29, 0x85, 0x23, 0x2a, 0x87,
+0x25, 0x2c, 0x89, 0x27, 0x2e, 0x8b, 0x28, 0x2f, 0x8d, 0x2a, 0x31, 0x90,
+0x2c, 0x33, 0x92, 0x2e, 0x34, 0x94, 0x30, 0x39, 0x96, 0x33, 0x3a, 0x99,
+0xd1, 0xcc, 0x17, 0xdb, 0xd4, 0x1c, 0xde, 0xdc, 0x1f, 0xdf, 0xd9, 0x22,
+0xde, 0xdb, 0x1d, 0xc7, 0xc5, 0x18, 0xc0, 0xba, 0x15, 0x4f, 0x57, 0x9e,
+0x3b, 0x46, 0xb5, 0x3b, 0x46, 0xb8, 0x3b, 0x45, 0xbc, 0x3b, 0x45, 0xbf,
+0x3a, 0x44, 0xc4, 0x3a, 0x44, 0xc8, 0x3d, 0x48, 0xcc, 0x40, 0x4c, 0xd0,
+0x45, 0x51, 0xd5, 0x4b, 0x58, 0xd9, 0x52, 0x60, 0xdf, 0x5a, 0x68, 0xe2,
+0x57, 0x65, 0xd1, 0x86, 0x8d, 0x8d, 0xe0, 0xde, 0x25, 0xd7, 0xd5, 0x1c,
+0xe0, 0xd9, 0x23, 0xb3, 0xb3, 0x41, 0x2c, 0x36, 0x6b, 0x15, 0x1b, 0x43,
+0x16, 0x1d, 0x47, 0x17, 0x1e, 0x49, 0x19, 0x20, 0x4d, 0x1a, 0x21, 0x51,
+0x1b, 0x23, 0x55, 0x1d, 0x25, 0x59, 0x4b, 0x50, 0x4c, 0xe0, 0xde, 0x25,
+0xe1, 0xda, 0x26, 0xe4, 0xe2, 0x35, 0xdf, 0xd9, 0x22, 0xdd, 0xd6, 0x1c,
+0xdf, 0xd8, 0x20, 0x8a, 0x8f, 0x7d, 0x6d, 0x7a, 0xcf, 0x77, 0x85, 0xde,
+0x76, 0x85, 0xe1, 0x73, 0x82, 0xe1, 0x71, 0x7f, 0xe1, 0x6c, 0x7b, 0xdd,
+0x64, 0x73, 0xd4, 0x57, 0x66, 0xc5, 0x4b, 0x59, 0xb6, 0x41, 0x4e, 0xa8,
+0x39, 0x46, 0x9b, 0x32, 0x3e, 0x8f, 0x4b, 0x55, 0x82, 0xde, 0xd8, 0x1f,
+0xe4, 0xe2, 0x33, 0xe1, 0xdf, 0x2a, 0xd7, 0xd5, 0x1c, 0xdd, 0xd6, 0x1c,
+0xe3, 0xdd, 0x30, 0xdb, 0xd4, 0x1c, 0x2c, 0x34, 0x66, 0x28, 0x30, 0x5f,
+0x25, 0x2c, 0x5a, 0x22, 0x28, 0x54, 0x1f, 0x26, 0x50, 0x1c, 0x22, 0x4a,
+0x1a, 0x20, 0x46, 0x2b, 0x33, 0x63, 0x42, 0x4e, 0x94, 0x5d, 0x6b, 0xe0,
+0x52, 0x60, 0xe2, 0x48, 0x55, 0xe2, 0x40, 0x4d, 0xe3, 0x39, 0x45, 0xe3,
+0x3c, 0x48, 0xdf, 0x3f, 0x4b, 0xda, 0x41, 0x4e, 0xd5, 0x45, 0x50, 0xd0,
+0x48, 0x53, 0xcc, 0x4a, 0x55, 0xc8, 0x4b, 0x56, 0xc4, 0x48, 0x53, 0xbf,
+0x44, 0x4f, 0xbc, 0x41, 0x4a, 0xb8, 0x3d, 0x48, 0xb5, 0x3a, 0x45, 0xb1,
+0x39, 0x42, 0xae, 0x37, 0x3f, 0xab, 0x35, 0x3d, 0xa7, 0x33, 0x3b, 0xa4,
+0x31, 0x39, 0xa1, 0x30, 0x38, 0x9f, 0x2e, 0x36, 0x9c, 0x2c, 0x33, 0x99,
+0x2b, 0x32, 0x96, 0x29, 0x31, 0x94, 0x28, 0x30, 0x92, 0x27, 0x2e, 0x8f,
+0x25, 0x2c, 0x8d, 0x25, 0x2c, 0x8b, 0x24, 0x2b, 0x89, 0x23, 0x2a, 0x87,
+0x22, 0x29, 0x85, 0x21, 0x28, 0x82, 0x21, 0x27, 0x81, 0x20, 0x25, 0x7f,
+0x1f, 0x24, 0x7d, 0x1f, 0x24, 0x7b, 0x1e, 0x23, 0x79, 0x1d, 0x22, 0x78,
+0x1d, 0x22, 0x76, 0x1c, 0x21, 0x75, 0x1b, 0x20, 0x73, 0x1b, 0x20, 0x72,
+0x1b, 0x1f, 0x70, 0x1a, 0x1f, 0x6f, 0x1a, 0x1f, 0x6d, 0x19, 0x1e, 0x6c,
+0x19, 0x1e, 0x6a, 0x19, 0x1d, 0x69, 0x19, 0x1d, 0x68, 0x18, 0x1d, 0x66,
+0x18, 0x1d, 0x65, 0x18, 0x1c, 0x65, 0x17, 0x1c, 0x63, 0x17, 0x1c, 0x63,
+0x17, 0x1b, 0x61, 0x17, 0x1b, 0x60, 0x16, 0x1a, 0x5f, 0x16, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x15, 0x19, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x19, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x19, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x18, 0x56, 0x14, 0x18, 0x55, 0x13, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x17, 0x52, 0x13, 0x16, 0x51, 0x13, 0x16, 0x51, 0x12, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e, 0x12, 0x16, 0x4e, 0x12, 0x15, 0x4d,
+0x12, 0x15, 0x4c, 0x12, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x14, 0x4a,
+0x11, 0x14, 0x49, 0x11, 0x14, 0x48, 0x10, 0x14, 0x48, 0x10, 0x14, 0x48,
+0x10, 0x13, 0x47, 0x10, 0x13, 0x47, 0x10, 0x13, 0x45, 0x10, 0x13, 0x45,
+0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x0f, 0x12, 0x43,
+0x0f, 0x11, 0x42, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x40,
+0x0f, 0x11, 0x40, 0x0e, 0x11, 0x3f, 0x0e, 0x11, 0x3f, 0x0e, 0x10, 0x3f,
+0x0d, 0x10, 0x3e, 0x0d, 0x10, 0x3e, 0x0d, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x49, 0x25, 0x2c, 0x93, 0x27, 0x2d, 0x99, 0x22, 0x27, 0x82,
+0x1e, 0x24, 0x7a, 0x1e, 0x23, 0x7c, 0x1f, 0x24, 0x7e, 0x1e, 0x24, 0x80,
+0x1f, 0x25, 0x81, 0x1f, 0x25, 0x83, 0x20, 0x26, 0x85, 0x20, 0x27, 0x87,
+0x22, 0x28, 0x8a, 0x23, 0x29, 0x8b, 0x24, 0x2b, 0x8e, 0x25, 0x2c, 0x90,
+0x27, 0x2e, 0x92, 0x28, 0x30, 0x95, 0x2a, 0x32, 0x97, 0x92, 0x92, 0x48,
+0xdb, 0xd4, 0x1c, 0xd4, 0xcd, 0x1b, 0xe2, 0xe0, 0x2d, 0xdf, 0xd9, 0x22,
+0xd1, 0xcf, 0x1a, 0xbe, 0xb8, 0x15, 0x78, 0x7c, 0x77, 0x46, 0x51, 0xb2,
+0x46, 0x51, 0xb6, 0x46, 0x50, 0xb9, 0x46, 0x51, 0xbd, 0x46, 0x50, 0xc1,
+0x44, 0x50, 0xc4, 0x44, 0x50, 0xc9, 0x43, 0x4d, 0xcd, 0x40, 0x4c, 0xd1,
+0x40, 0x4b, 0xd6, 0x40, 0x4b, 0xdb, 0x45, 0x51, 0xe0, 0x4b, 0x58, 0xe2,
+0x54, 0x63, 0xe1, 0x86, 0x8d, 0x8d, 0xdb, 0xd4, 0x1c, 0xe1, 0xdb, 0x28,
+0xe1, 0xda, 0x26, 0x81, 0x83, 0x43, 0x38, 0x43, 0x83, 0x34, 0x3e, 0x7a,
+0x17, 0x1e, 0x48, 0x19, 0x20, 0x4c, 0x1a, 0x21, 0x50, 0x1c, 0x23, 0x54,
+0x1d, 0x25, 0x58, 0x1f, 0x27, 0x5e, 0xcf, 0xca, 0x11, 0xe1, 0xda, 0x26,
+0xe0, 0xde, 0x25, 0xdb, 0xd4, 0x1c, 0xde, 0xdb, 0x1d, 0xe2, 0xdc, 0x2b,
+0xb5, 0xb4, 0x40, 0x64, 0x71, 0xc9, 0x78, 0x87, 0xe4, 0x92, 0xa1, 0xfd,
+0x8e, 0x9d, 0xfd, 0x86, 0x96, 0xfd, 0x80, 0x91, 0xfd, 0x7a, 0x8b, 0xf9,
+0x6f, 0x80, 0xed, 0x61, 0x71, 0xdc, 0x54, 0x63, 0xca, 0x49, 0x58, 0xba,
+0x3d, 0x4c, 0xa9, 0x42, 0x4f, 0xa7, 0x4b, 0x58, 0xaa, 0xb5, 0xb4, 0x3e,
+0xde, 0xd8, 0x1f, 0xe1, 0xdf, 0x2a, 0xdc, 0xda, 0x1d, 0xde, 0xd7, 0x1d,
+0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d, 0x6a, 0x6d, 0x48, 0x2a, 0x31, 0x62,
+0x25, 0x2c, 0x5b, 0x21, 0x28, 0x55, 0x1e, 0x25, 0x4f, 0x1b, 0x22, 0x4a,
+0x28, 0x31, 0x60, 0x4d, 0x5a, 0xaf, 0x57, 0x66, 0xe0, 0x4c, 0x5b, 0xe0,
+0x44, 0x53, 0xe1, 0x47, 0x55, 0xe1, 0x49, 0x57, 0xe2, 0x4c, 0x59, 0xe3,
+0x4f, 0x5c, 0xe0, 0x53, 0x60, 0xdb, 0x56, 0x63, 0xd6, 0x53, 0x5f, 0xd1,
+0x4d, 0x59, 0xcd, 0x4a, 0x55, 0xc9, 0x46, 0x50, 0xc4, 0x42, 0x4c, 0xc1,
+0x40, 0x49, 0xbc, 0x3c, 0x46, 0xb8, 0x39, 0x43, 0xb5, 0x37, 0x41, 0xb1,
+0x36, 0x3f, 0xae, 0x33, 0x3c, 0xab, 0x32, 0x3a, 0xa8, 0x2f, 0x37, 0xa5,
+0x2e, 0x36, 0xa2, 0x2d, 0x35, 0x9f, 0x2b, 0x33, 0x9c, 0x29, 0x31, 0x9a,
+0x29, 0x30, 0x97, 0x27, 0x2f, 0x95, 0x26, 0x2e, 0x92, 0x25, 0x2c, 0x90,
+0x24, 0x2b, 0x8e, 0x23, 0x2a, 0x8b, 0x22, 0x29, 0x89, 0x22, 0x28, 0x87,
+0x21, 0x27, 0x85, 0x20, 0x26, 0x83, 0x1f, 0x25, 0x81, 0x1f, 0x24, 0x80,
+0x1f, 0x24, 0x7e, 0x1e, 0x23, 0x7c, 0x1d, 0x23, 0x7a, 0x1d, 0x22, 0x78,
+0x1c, 0x21, 0x77, 0x1c, 0x21, 0x75, 0x1c, 0x21, 0x74, 0x1c, 0x20, 0x72,
+0x1b, 0x20, 0x70, 0x1a, 0x1f, 0x6f, 0x1a, 0x1f, 0x6d, 0x1a, 0x1e, 0x6c,
+0x1a, 0x1e, 0x6b, 0x19, 0x1d, 0x69, 0x19, 0x1e, 0x68, 0x19, 0x1d, 0x68,
+0x18, 0x1d, 0x66, 0x18, 0x1c, 0x65, 0x17, 0x1c, 0x64, 0x17, 0x1c, 0x63,
+0x17, 0x1b, 0x62, 0x17, 0x1b, 0x60, 0x16, 0x1b, 0x5f, 0x16, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x16, 0x1a, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x1a, 0x5a,
+0x15, 0x19, 0x59, 0x14, 0x19, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56,
+0x14, 0x18, 0x56, 0x14, 0x18, 0x55, 0x14, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x17, 0x52, 0x13, 0x17, 0x51, 0x13, 0x17, 0x51, 0x12, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e, 0x12, 0x16, 0x4e, 0x12, 0x15, 0x4d,
+0x12, 0x15, 0x4c, 0x12, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x15, 0x4a,
+0x11, 0x15, 0x49, 0x11, 0x14, 0x48, 0x11, 0x14, 0x48, 0x11, 0x14, 0x48,
+0x10, 0x14, 0x47, 0x10, 0x14, 0x47, 0x10, 0x13, 0x45, 0x10, 0x13, 0x45,
+0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x0f, 0x12, 0x43,
+0x0f, 0x11, 0x42, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x41, 0x0f, 0x11, 0x40,
+0x0f, 0x11, 0x40, 0x0f, 0x11, 0x3f, 0x0f, 0x11, 0x3f, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x49, 0x29, 0x2f, 0x94, 0x2a, 0x31, 0x99, 0x24, 0x2a, 0x82,
+0x20, 0x26, 0x7a, 0x20, 0x26, 0x7c, 0x21, 0x27, 0x7e, 0x21, 0x27, 0x80,
+0x21, 0x27, 0x81, 0x21, 0x28, 0x83, 0x22, 0x28, 0x85, 0x23, 0x28, 0x88,
+0x22, 0x29, 0x8a, 0x22, 0x28, 0x8c, 0x23, 0x29, 0x8e, 0x23, 0x29, 0x90,
+0x23, 0x2a, 0x93, 0x24, 0x2b, 0x95, 0x4f, 0x53, 0x77, 0xcb, 0xc4, 0x18,
+0xc9, 0xc7, 0x18, 0xde, 0xdb, 0x1d, 0xdb, 0xd4, 0x1c, 0xd4, 0xcd, 0x1b,
+0xdf, 0xd9, 0x22, 0xbd, 0xba, 0x2b, 0x35, 0x3e, 0xaf, 0x38, 0x42, 0xb3,
+0x3b, 0x46, 0xb6, 0x40, 0x4b, 0xb9, 0x45, 0x50, 0xbd, 0x4c, 0x57, 0xc2,
+0x52, 0x5e, 0xc5, 0x52, 0x5f, 0xc9, 0x52, 0x5f, 0xce, 0x51, 0x5d, 0xd2,
+0x4f, 0x5c, 0xd7, 0x4e, 0x5b, 0xdc, 0x4c, 0x59, 0xe1, 0x4b, 0x58, 0xe2,
+0x49, 0x57, 0xe1, 0x70, 0x7a, 0xb0, 0xb6, 0xb6, 0x4f, 0xb3, 0xb3, 0x41,
+0xa8, 0xa6, 0x28, 0x42, 0x45, 0x33, 0x16, 0x1c, 0x43, 0x17, 0x1e, 0x47,
+0x19, 0x1f, 0x4b, 0x1a, 0x21, 0x4e, 0x1c, 0x23, 0x53, 0x1d, 0x25, 0x57,
+0x20, 0x28, 0x5d, 0x8e, 0x8e, 0x2f, 0xe0, 0xde, 0x25, 0xd2, 0xcc, 0x1b,
+0xd9, 0xd2, 0x1c, 0xdf, 0xd9, 0x22, 0xdf, 0xd8, 0x20, 0xd7, 0xd5, 0x1c,
+0x64, 0x6e, 0xa6, 0x6a, 0x79, 0xd8, 0x80, 0x90, 0xf6, 0x99, 0xaa, 0xfd,
+0xa5, 0xb6, 0xfd, 0x9d, 0xaf, 0xfd, 0x93, 0xa6, 0xfd, 0x8c, 0x9f, 0xfd,
+0x7d, 0x90, 0xfd, 0x6b, 0x7d, 0xf6, 0x5b, 0x6c, 0xe0, 0x4d, 0x5e, 0xcb,
+0x4b, 0x5b, 0xc1, 0x5c, 0x6a, 0xca, 0x67, 0x75, 0xce, 0xa3, 0xa6, 0x75,
+0xd7, 0xd0, 0x1c, 0xd1, 0xca, 0x1a, 0xe1, 0xdf, 0x2a, 0xe7, 0xe1, 0x3e,
+0xe1, 0xdb, 0x2a, 0xdf, 0xd9, 0x22, 0xa8, 0xa6, 0x28, 0x28, 0x30, 0x62,
+0x23, 0x2b, 0x5a, 0x20, 0x27, 0x54, 0x1d, 0x24, 0x4f, 0x3c, 0x47, 0x88,
+0x5a, 0x6a, 0xd9, 0x74, 0x7f, 0xae, 0x96, 0x9c, 0x7f, 0xb7, 0xb8, 0x4e,
+0xdb, 0xd4, 0x1c, 0xa2, 0xa3, 0x54, 0x4a, 0x56, 0xa9, 0x54, 0x60, 0xc6,
+0x59, 0x67, 0xe1, 0x53, 0x61, 0xdc, 0x4e, 0x5b, 0xd7, 0x49, 0x56, 0xd2,
+0x45, 0x51, 0xce, 0x43, 0x4e, 0xc9, 0x51, 0x5a, 0xaf, 0x9a, 0x9b, 0x5a,
+0xe8, 0xe6, 0x3f, 0xe3, 0xe1, 0x32, 0xbe, 0xbb, 0x2d, 0x5a, 0x5f, 0x8c,
+0x32, 0x3a, 0xae, 0x2f, 0x37, 0xab, 0x2e, 0x36, 0xa8, 0x2c, 0x35, 0xa5,
+0x2a, 0x33, 0xa3, 0x2a, 0x32, 0xa0, 0x28, 0x31, 0x9d, 0x27, 0x2f, 0x9a,
+0x66, 0x69, 0x67, 0x8f, 0x8e, 0x46, 0xba, 0xb6, 0x26, 0xcb, 0xc4, 0x18,
+0xc9, 0xc7, 0x18, 0xa4, 0xa2, 0x33, 0x22, 0x28, 0x8a, 0x21, 0x27, 0x88,
+0x20, 0x26, 0x85, 0x20, 0x26, 0x83, 0x1f, 0x25, 0x81, 0x1f, 0x25, 0x80,
+0x1f, 0x24, 0x7e, 0x1e, 0x24, 0x7c, 0x1e, 0x23, 0x7a, 0x1d, 0x22, 0x78,
+0x1d, 0x22, 0x77, 0x1d, 0x22, 0x76, 0x1c, 0x22, 0x74, 0x1c, 0x21, 0x72,
+0x32, 0x35, 0x65, 0x74, 0x74, 0x40, 0xa2, 0x9f, 0x29, 0xdb, 0xd4, 0x1c,
+0xc7, 0xc5, 0x18, 0xc3, 0xbd, 0x16, 0xce, 0xc9, 0x12, 0xa1, 0x9e, 0x27,
+0x45, 0x47, 0x51, 0x18, 0x1c, 0x65, 0x18, 0x1c, 0x64, 0x17, 0x1c, 0x63,
+0x18, 0x1b, 0x62, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1a, 0x5e,
+0x16, 0x1a, 0x5d, 0x5b, 0x5b, 0x3f, 0x88, 0x86, 0x2c, 0xb7, 0xb2, 0x19,
+0xd9, 0xd2, 0x1c, 0xdf, 0xd9, 0x22, 0x5a, 0x5b, 0x3c, 0x14, 0x19, 0x57,
+0x14, 0x18, 0x56, 0x14, 0x18, 0x55, 0x14, 0x17, 0x54, 0x13, 0x17, 0x53,
+0x13, 0x17, 0x52, 0x13, 0x17, 0x52, 0x13, 0x17, 0x51, 0x13, 0x16, 0x50,
+0x12, 0x16, 0x4f, 0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e, 0x29, 0x2c, 0x45,
+0x40, 0x41, 0x3c, 0x12, 0x15, 0x4c, 0x11, 0x15, 0x4b, 0x11, 0x15, 0x4a,
+0x11, 0x15, 0x4a, 0x11, 0x15, 0x48, 0x11, 0x15, 0x48, 0x11, 0x14, 0x48,
+0x58, 0x57, 0x31, 0xb6, 0xb1, 0x15, 0xe2, 0xdc, 0x2b, 0xcd, 0xc7, 0x0e,
+0x6e, 0x6d, 0x28, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44, 0x10, 0x13, 0x43,
+0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41, 0x0f, 0x11, 0x40,
+0x0f, 0x11, 0x40, 0x0f, 0x11, 0x3f, 0x0f, 0x11, 0x3f, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x15, 0x19, 0x49, 0x2b, 0x33, 0x94, 0x2d, 0x35, 0x99, 0x26, 0x2d, 0x82,
+0x23, 0x29, 0x7a, 0x23, 0x29, 0x7c, 0x23, 0x2a, 0x7e, 0x24, 0x2a, 0x80,
+0x24, 0x2a, 0x81, 0x24, 0x2b, 0x83, 0x25, 0x2c, 0x86, 0x25, 0x2c, 0x88,
+0x25, 0x2d, 0x8a, 0x26, 0x2d, 0x8c, 0x26, 0x2d, 0x8e, 0x27, 0x2e, 0x90,
+0x26, 0x2e, 0x93, 0x27, 0x2e, 0x96, 0xbb, 0xb7, 0x27, 0xe1, 0xda, 0x26,
+0xe1, 0xdf, 0x2a, 0xd4, 0xcd, 0x1b, 0xd7, 0xd5, 0x1c, 0xc7, 0xc1, 0x18,
+0xd4, 0xcd, 0x1b, 0x53, 0x58, 0x87, 0x2c, 0x35, 0xb0, 0x2e, 0x37, 0xb3,
+0x31, 0x3a, 0xb6, 0x33, 0x3d, 0xba, 0x37, 0x41, 0xbe, 0x3a, 0x44, 0xc2,
+0x3f, 0x4a, 0xc7, 0x44, 0x4f, 0xcb, 0x49, 0x55, 0xcf, 0x51, 0x5d, 0xd4,
+0x55, 0x61, 0xce, 0x48, 0x52, 0xa4, 0x50, 0x5b, 0xb8, 0x52, 0x5f, 0xbf,
+0x51, 0x5f, 0xbe, 0x51, 0x5f, 0xbe, 0x53, 0x61, 0xc5, 0x55, 0x64, 0xcc,
+0x55, 0x64, 0xcb, 0x41, 0x4e, 0x96, 0x1a, 0x21, 0x4b, 0x18, 0x1e, 0x48,
+0x1a, 0x21, 0x4d, 0x1c, 0x23, 0x51, 0x1d, 0x25, 0x56, 0x20, 0x28, 0x5b,
+0x37, 0x3d, 0x56, 0xe3, 0xdd, 0x30, 0xde, 0xd7, 0x1d, 0xdf, 0xd9, 0x22,
+0xe0, 0xde, 0x25, 0xde, 0xd7, 0x1d, 0xe2, 0xe0, 0x2d, 0xaf, 0xaf, 0x3c,
+0x53, 0x62, 0xc1, 0x69, 0x79, 0xe1, 0x83, 0x94, 0xfd, 0x9f, 0xb2, 0xfd,
+0xc3, 0xd7, 0xfd, 0xba, 0xd0, 0xfd, 0xae, 0xc4, 0xfd, 0xa4, 0xbb, 0xfd,
+0x8f, 0xa5, 0xfd, 0x75, 0x8b, 0xfd, 0x61, 0x75, 0xf8, 0x51, 0x64, 0xde,
+0x6b, 0x7c, 0xed, 0x82, 0x92, 0xfa, 0x8c, 0x9b, 0xf6, 0x9c, 0xa2, 0x95,
+0xc4, 0xbe, 0x17, 0xd4, 0xcd, 0x1b, 0xe1, 0xda, 0x26, 0xe3, 0xdd, 0x2e,
+0xe2, 0xdc, 0x2b, 0xe4, 0xde, 0x33, 0xbc, 0xb8, 0x1c, 0x26, 0x2e, 0x62,
+0x22, 0x29, 0x5a, 0x4f, 0x54, 0x4b, 0x88, 0x8c, 0x52, 0xa8, 0xa6, 0x28,
+0xdb, 0xd4, 0x1c, 0xe0, 0xda, 0x25, 0xe1, 0xda, 0x26, 0xdd, 0xd6, 0x1c,
+0xde, 0xd8, 0x1f, 0xcc, 0xc6, 0x19, 0x97, 0x9c, 0x7d, 0x54, 0x62, 0xe1,
+0x4e, 0x5b, 0xe2, 0x4a, 0x56, 0xdd, 0x46, 0x52, 0xd8, 0x41, 0x4d, 0xd3,
+0x3e, 0x49, 0xce, 0x3c, 0x46, 0xca, 0xac, 0xab, 0x46, 0xde, 0xdb, 0x1d,
+0xe0, 0xda, 0x25, 0xe3, 0xdd, 0x2e, 0xe1, 0xdf, 0x2a, 0xdf, 0xd9, 0x22,
+0x41, 0x48, 0x9c, 0x2c, 0x35, 0xac, 0x2b, 0x33, 0xa9, 0x3e, 0x44, 0x94,
+0x67, 0x6a, 0x6f, 0x90, 0x90, 0x4b, 0xbb, 0xb7, 0x28, 0xdf, 0xd9, 0x22,
+0xe1, 0xdb, 0x2a, 0xe1, 0xdb, 0x2a, 0xde, 0xdb, 0x1d, 0xe1, 0xda, 0x26,
+0xe1, 0xdf, 0x2a, 0xa5, 0xa2, 0x33, 0x22, 0x29, 0x8a, 0x22, 0x28, 0x88,
+0x22, 0x27, 0x86, 0x20, 0x26, 0x83, 0x20, 0x26, 0x82, 0x20, 0x26, 0x80,
+0x1f, 0x25, 0x7e, 0x1f, 0x24, 0x7c, 0x1e, 0x24, 0x7a, 0x1e, 0x23, 0x78,
+0x1d, 0x22, 0x77, 0x1d, 0x22, 0x76, 0x32, 0x36, 0x68, 0x8b, 0x8a, 0x36,
+0xdc, 0xda, 0x1d, 0xe0, 0xd9, 0x23, 0xe0, 0xde, 0x25, 0xd1, 0xcf, 0x1a,
+0xd4, 0xcd, 0x1b, 0xd9, 0xd2, 0x1c, 0xdf, 0xd8, 0x20, 0xdf, 0xd8, 0x20,
+0xde, 0xd7, 0x1d, 0x89, 0x88, 0x31, 0x18, 0x1c, 0x64, 0x18, 0x1c, 0x63,
+0x18, 0x1c, 0x62, 0x2d, 0x30, 0x57, 0x72, 0x71, 0x38, 0xa1, 0x9d, 0x24,
+0xdf, 0xd9, 0x22, 0xe3, 0xdd, 0x30, 0xde, 0xd7, 0x1d, 0xdf, 0xd9, 0x22,
+0xe0, 0xde, 0x25, 0xde, 0xd7, 0x1d, 0x5a, 0x5b, 0x3d, 0x15, 0x19, 0x57,
+0x15, 0x19, 0x56, 0x15, 0x18, 0x55, 0x15, 0x18, 0x54, 0x14, 0x18, 0x53,
+0x14, 0x18, 0x52, 0x14, 0x18, 0x52, 0x14, 0x17, 0x51, 0x2b, 0x2c, 0x47,
+0xd5, 0xcf, 0x1c, 0xdd, 0xd6, 0x1c, 0xde, 0xdc, 0x1f, 0xdb, 0xd4, 0x1c,
+0x9f, 0x9c, 0x1e, 0x12, 0x16, 0x4c, 0x12, 0x16, 0x4b, 0x12, 0x15, 0x4a,
+0x12, 0x15, 0x4a, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48, 0x40, 0x41, 0x39,
+0xe2, 0xdc, 0x2b, 0xe4, 0xde, 0x33, 0xe2, 0xe0, 0x2b, 0xe1, 0xdb, 0x28,
+0xe1, 0xdb, 0x28, 0x6f, 0x6d, 0x28, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x11, 0x3f, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x16, 0x1a, 0x49, 0x2e, 0x36, 0x94, 0x31, 0x38, 0x9c, 0x2a, 0x30, 0x82,
+0x26, 0x2c, 0x7a, 0x26, 0x2d, 0x7c, 0x27, 0x2d, 0x7e, 0x27, 0x2e, 0x80,
+0x27, 0x2e, 0x81, 0x28, 0x2f, 0x84, 0x28, 0x30, 0x86, 0x29, 0x30, 0x88,
+0x2a, 0x31, 0x8a, 0x2a, 0x31, 0x8c, 0x2b, 0x32, 0x8f, 0x2b, 0x33, 0x90,
+0x2b, 0x33, 0x93, 0x54, 0x59, 0x76, 0xe0, 0xde, 0x25, 0xe6, 0xdf, 0x37,
+0xe0, 0xde, 0x25, 0xdf, 0xd9, 0x22, 0xd1, 0xcf, 0x1a, 0xd1, 0xcf, 0x1a,
+0xbc, 0xb9, 0x2b, 0x2e, 0x37, 0xac, 0x2e, 0x37, 0xb0, 0x2f, 0x38, 0xb3,
+0x2e, 0x37, 0xb7, 0x2e, 0x37, 0xbb, 0x2e, 0x37, 0xbf, 0x2e, 0x37, 0xc3,
+0x30, 0x3a, 0xc7, 0x33, 0x3d, 0xcc, 0x36, 0x41, 0xd0, 0x3a, 0x45, 0xd4,
+0x3e, 0x4a, 0xd9, 0x44, 0x50, 0xde, 0x4c, 0x58, 0xe2, 0x55, 0x64, 0xe2,
+0x51, 0x5f, 0xbe, 0x2d, 0x36, 0x69, 0x12, 0x17, 0x39, 0x13, 0x18, 0x3c,
+0x14, 0x1a, 0x3f, 0x15, 0x1b, 0x42, 0x17, 0x1d, 0x46, 0x18, 0x1f, 0x4a,
+0x1a, 0x21, 0x4e, 0x1c, 0x23, 0x52, 0x1e, 0x26, 0x58, 0x21, 0x29, 0x5e,
+0x7a, 0x7b, 0x3b, 0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xdc, 0xda, 0x1d,
+0xe2, 0xdc, 0x2d, 0xde, 0xd8, 0x1f, 0xdb, 0xd4, 0x1c, 0x66, 0x6f, 0x89,
+0x4d, 0x5d, 0xc3, 0x62, 0x73, 0xe4, 0x7e, 0x91, 0xfd, 0xa3, 0xb8, 0xfd,
+0xd0, 0xe7, 0xfd, 0xe6, 0xfd, 0xfd, 0xd2, 0xec, 0xfd, 0xc5, 0xe0, 0xfd,
+0xa6, 0xc0, 0xfd, 0x83, 0x9c, 0xfd, 0x69, 0x80, 0xfd, 0x7b, 0x90, 0xfd,
+0x9c, 0xaf, 0xfd, 0xa9, 0xba, 0xfd, 0x94, 0xa4, 0xfd, 0x7f, 0x8d, 0xeb,
+0xcf, 0xc9, 0x1a, 0xdd, 0xd6, 0x1c, 0xde, 0xd8, 0x1f, 0xe0, 0xd9, 0x23,
+0xde, 0xdc, 0x1f, 0xe5, 0xdf, 0x34, 0xe6, 0xe0, 0x39, 0x24, 0x2c, 0x60,
+0x62, 0x65, 0x3e, 0xe4, 0xde, 0x31, 0xdf, 0xd8, 0x20, 0xde, 0xd7, 0x1d,
+0xe2, 0xe0, 0x2b, 0xd7, 0xd0, 0x1c, 0xdc, 0xda, 0x1d, 0xde, 0xdc, 0x1f,
+0xe0, 0xd9, 0x23, 0xce, 0xc7, 0x19, 0xc4, 0xc2, 0x37, 0x48, 0x56, 0xe1,
+0x43, 0x4f, 0xe2, 0x3f, 0x4b, 0xdd, 0x3c, 0x48, 0xd8, 0x3a, 0x45, 0xd4,
+0x37, 0x42, 0xcf, 0x34, 0x3f, 0xcb, 0xaa, 0xa9, 0x47, 0xe0, 0xda, 0x25,
+0xde, 0xd8, 0x1f, 0xde, 0xdc, 0x1f, 0xe3, 0xdd, 0x30, 0xe3, 0xdd, 0x30,
+0x92, 0x93, 0x52, 0x2b, 0x33, 0xac, 0x2b, 0x33, 0xa9, 0xde, 0xdb, 0x1d,
+0xe3, 0xdd, 0x2e, 0xe2, 0xe0, 0x2b, 0xde, 0xdb, 0x1d, 0xdb, 0xd4, 0x1c,
+0xd7, 0xd5, 0x1c, 0xde, 0xd8, 0x1f, 0xe0, 0xde, 0x25, 0xe6, 0xdf, 0x37,
+0xe0, 0xde, 0x25, 0x64, 0x66, 0x5f, 0x23, 0x29, 0x8a, 0x23, 0x28, 0x88,
+0x22, 0x28, 0x86, 0x22, 0x27, 0x84, 0x20, 0x26, 0x82, 0x20, 0x26, 0x80,
+0x20, 0x25, 0x7e, 0x1f, 0x25, 0x7c, 0x1f, 0x24, 0x7a, 0x1e, 0x23, 0x78,
+0x1e, 0x23, 0x78, 0x76, 0x75, 0x44, 0xcf, 0xc9, 0x1a, 0xce, 0xcc, 0x19,
+0xde, 0xd8, 0x1f, 0xdd, 0xd6, 0x1c, 0xce, 0xc9, 0x12, 0xa2, 0x9f, 0x28,
+0xb8, 0xb4, 0x1d, 0xdf, 0xd9, 0x22, 0xe1, 0xdb, 0x28, 0xd7, 0xd5, 0x1c,
+0xd2, 0xcc, 0x1b, 0xdf, 0xd8, 0x20, 0x73, 0x73, 0x3a, 0x19, 0x1d, 0x63,
+0x19, 0x1d, 0x62, 0xe5, 0xdf, 0x36, 0xe6, 0xdf, 0x37, 0xe4, 0xde, 0x31,
+0xe2, 0xdc, 0x2d, 0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xdc, 0xda, 0x1d,
+0xe2, 0xdc, 0x2d, 0xde, 0xd8, 0x1f, 0x89, 0x86, 0x2b, 0x16, 0x1a, 0x57,
+0x16, 0x1a, 0x56, 0x15, 0x19, 0x55, 0x15, 0x19, 0x54, 0x15, 0x19, 0x53,
+0x14, 0x18, 0x52, 0x14, 0x18, 0x52, 0x14, 0x18, 0x51, 0x88, 0x86, 0x27,
+0xe2, 0xdc, 0x2b, 0xcb, 0xc4, 0x18, 0xd9, 0xd2, 0x1c, 0xde, 0xd7, 0x1d,
+0x9f, 0x9c, 0x1e, 0x13, 0x16, 0x4c, 0x13, 0x16, 0x4b, 0x13, 0x16, 0x4b,
+0x12, 0x16, 0x4a, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48,
+0xde, 0xdc, 0x1f, 0xe5, 0xdf, 0x34, 0xe6, 0xe0, 0x39, 0xe2, 0xe0, 0x2d,
+0xe2, 0xdc, 0x2d, 0xcd, 0xc7, 0x0d, 0x11, 0x13, 0x44, 0x11, 0x13, 0x44,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x18, 0x49, 0x29, 0x32, 0x94, 0x2d, 0x35, 0x9c, 0x27, 0x2d, 0x83,
+0x23, 0x29, 0x7a, 0x24, 0x2a, 0x7c, 0x25, 0x2b, 0x7e, 0x26, 0x2c, 0x80,
+0x27, 0x2d, 0x81, 0x28, 0x2f, 0x84, 0x29, 0x30, 0x86, 0x2a, 0x31, 0x88,
+0x2c, 0x33, 0x8a, 0x2d, 0x34, 0x8c, 0x2e, 0x36, 0x8f, 0x30, 0x38, 0x91,
+0x32, 0x39, 0x93, 0xaa, 0xa8, 0x36, 0xde, 0xd7, 0x1d, 0xe1, 0xda, 0x26,
+0xe1, 0xdb, 0x28, 0xdf, 0xd9, 0x22, 0xe1, 0xdb, 0x28, 0xde, 0xd7, 0x1d,
+0x71, 0x74, 0x73, 0x37, 0x40, 0xad, 0x37, 0x40, 0xb0, 0x38, 0x42, 0xb4,
+0x38, 0x42, 0xb8, 0x38, 0x42, 0xbc, 0x38, 0x42, 0xbf, 0x38, 0x42, 0xc3,
+0x38, 0x42, 0xc7, 0x38, 0x43, 0xcc, 0x38, 0x42, 0xd0, 0x37, 0x42, 0xd5,
+0x36, 0x42, 0xda, 0x35, 0x41, 0xdf, 0x35, 0x41, 0xe2, 0x3a, 0x46, 0xe1,
+0x41, 0x4e, 0xe1, 0x48, 0x56, 0xe0, 0x53, 0x62, 0xdf, 0x55, 0x64, 0xcc,
+0x32, 0x3c, 0x75, 0x16, 0x1c, 0x43, 0x17, 0x1d, 0x47, 0x19, 0x1f, 0x4a,
+0x1b, 0x22, 0x4f, 0x1d, 0x24, 0x54, 0x1f, 0x27, 0x59, 0x22, 0x2a, 0x60,
+0xd0, 0xca, 0x11, 0xe3, 0xdd, 0x30, 0xd2, 0xcc, 0x1b, 0xdb, 0xd4, 0x1c,
+0xe1, 0xdf, 0x2a, 0xe1, 0xda, 0x26, 0xd3, 0xcf, 0x19, 0x4f, 0x5e, 0xc0,
+0x53, 0x64, 0xd1, 0x58, 0x6b, 0xe5, 0x74, 0x89, 0xfd, 0x9e, 0xb6, 0xfd,
+0xd9, 0xf4, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xf7, 0xfd, 0xfd,
+0xc5, 0xe5, 0xfd, 0x94, 0xb2, 0xfd, 0x8e, 0xa9, 0xfd, 0xc4, 0xdc, 0xfd,
+0xcd, 0xe2, 0xfd, 0xaf, 0xc2, 0xfd, 0x98, 0xa9, 0xfd, 0x86, 0x95, 0xf7,
+0xe0, 0xde, 0x25, 0xdf, 0xd9, 0x22, 0xd4, 0xcd, 0x1b, 0xd7, 0xd5, 0x1c,
+0xdb, 0xd4, 0x1c, 0xe6, 0xdf, 0x37, 0xe1, 0xdf, 0x2a, 0x22, 0x2a, 0x60,
+0x49, 0x4e, 0x46, 0xa2, 0xa0, 0x20, 0xce, 0xc9, 0x0f, 0xe1, 0xda, 0x26,
+0xde, 0xdc, 0x1f, 0xd1, 0xcf, 0x1a, 0xd9, 0xd2, 0x1c, 0xe0, 0xde, 0x25,
+0xe0, 0xda, 0x25, 0xd2, 0xcc, 0x1b, 0xcc, 0xc6, 0x19, 0x3e, 0x4a, 0xe1,
+0x39, 0x45, 0xe2, 0x36, 0x41, 0xde, 0x35, 0x40, 0xda, 0x34, 0x40, 0xd5,
+0x34, 0x3f, 0xd0, 0x33, 0x3e, 0xcc, 0x6e, 0x72, 0x87, 0xe6, 0xe0, 0x39,
+0xe3, 0xdd, 0x30, 0xe1, 0xdf, 0x2a, 0xcc, 0xc6, 0x19, 0xd7, 0xd5, 0x1c,
+0xa8, 0xa6, 0x3f, 0x2d, 0x35, 0xad, 0x2c, 0x34, 0xaa, 0xa7, 0xa6, 0x3c,
+0xd0, 0xcb, 0x18, 0xe1, 0xdf, 0x2a, 0xdf, 0xd8, 0x20, 0xdf, 0xd8, 0x20,
+0xd4, 0xcd, 0x1b, 0xd7, 0xd5, 0x1c, 0xde, 0xd7, 0x1d, 0xe1, 0xda, 0x26,
+0xe1, 0xdb, 0x28, 0x4e, 0x51, 0x6e, 0x24, 0x2a, 0x8b, 0x24, 0x29, 0x88,
+0x23, 0x29, 0x86, 0x22, 0x28, 0x84, 0x22, 0x28, 0x82, 0x22, 0x27, 0x80,
+0x21, 0x27, 0x7e, 0x21, 0x26, 0x7c, 0x20, 0x26, 0x7a, 0x20, 0x26, 0x79,
+0xa4, 0xa1, 0x2c, 0xd2, 0xcc, 0x1b, 0xdf, 0xd8, 0x20, 0xce, 0xcc, 0x19,
+0xd4, 0xcd, 0x1b, 0x76, 0x75, 0x40, 0x1d, 0x22, 0x6e, 0x1d, 0x22, 0x6c,
+0x1d, 0x21, 0x6b, 0x5f, 0x60, 0x49, 0xc7, 0xc5, 0x18, 0xd5, 0xcf, 0x1c,
+0xd9, 0xd2, 0x1c, 0xe1, 0xdb, 0x2a, 0xce, 0xc9, 0x11, 0x1a, 0x1f, 0x63,
+0x1a, 0x1e, 0x62, 0xa2, 0x9e, 0x25, 0xb8, 0xb3, 0x1a, 0xe3, 0xe1, 0x32,
+0xe2, 0xdc, 0x2b, 0xe3, 0xdd, 0x30, 0xd2, 0xcc, 0x1b, 0xdb, 0xd4, 0x1c,
+0xe1, 0xdf, 0x2a, 0xe1, 0xda, 0x26, 0xa1, 0x9d, 0x22, 0x17, 0x1b, 0x57,
+0x17, 0x1b, 0x56, 0x16, 0x1a, 0x55, 0x16, 0x1a, 0x54, 0x16, 0x1a, 0x53,
+0x15, 0x19, 0x52, 0x15, 0x19, 0x52, 0x15, 0x19, 0x51, 0xcf, 0xc9, 0x1a,
+0xe3, 0xdd, 0x2e, 0xd7, 0xd0, 0x1c, 0xd7, 0xd5, 0x1c, 0xd4, 0xcd, 0x1b,
+0xce, 0xc8, 0x0e, 0x14, 0x17, 0x4c, 0x14, 0x17, 0x4b, 0x13, 0x17, 0x4b,
+0x13, 0x16, 0x4a, 0x13, 0x16, 0x49, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48,
+0xdb, 0xd4, 0x1c, 0xe6, 0xdf, 0x37, 0xe1, 0xdf, 0x2a, 0xe0, 0xde, 0x25,
+0xe5, 0xdf, 0x36, 0xe2, 0xdc, 0x2d, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x0f, 0x13, 0x40, 0x0f, 0x13, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x49, 0x28, 0x2e, 0x94, 0x2a, 0x31, 0x9c, 0x24, 0x2a, 0x83,
+0x20, 0x27, 0x7b, 0x20, 0x27, 0x7c, 0x21, 0x28, 0x7e, 0x22, 0x29, 0x80,
+0x23, 0x2a, 0x82, 0x24, 0x2b, 0x84, 0x25, 0x2c, 0x86, 0x26, 0x2c, 0x88,
+0x27, 0x2e, 0x8a, 0x28, 0x2e, 0x8c, 0x29, 0x30, 0x8f, 0x2a, 0x32, 0x91,
+0x2b, 0x33, 0x94, 0xd9, 0xd2, 0x1c, 0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d,
+0xe0, 0xde, 0x25, 0xd7, 0xd5, 0x1c, 0xe2, 0xdc, 0x2b, 0xde, 0xd8, 0x1f,
+0x39, 0x42, 0xaa, 0x3c, 0x45, 0xad, 0x3e, 0x48, 0xb1, 0x41, 0x4a, 0xb4,
+0x44, 0x4e, 0xb8, 0x47, 0x51, 0xbc, 0x47, 0x51, 0xbf, 0x47, 0x53, 0xc4,
+0x49, 0x54, 0xc8, 0x49, 0x54, 0xcc, 0x49, 0x55, 0xd1, 0x4a, 0x56, 0xd6,
+0x4a, 0x56, 0xda, 0x4a, 0x56, 0xdf, 0x49, 0x56, 0xe2, 0x4b, 0x59, 0xe1,
+0x4d, 0x5b, 0xe1, 0x4e, 0x5c, 0xe0, 0x4f, 0x5d, 0xdf, 0x4f, 0x5e, 0xde,
+0x50, 0x60, 0xdd, 0x51, 0x61, 0xdb, 0x58, 0x69, 0xda, 0x40, 0x4e, 0x96,
+0x1b, 0x22, 0x50, 0x1d, 0x25, 0x55, 0x20, 0x27, 0x5a, 0x4d, 0x52, 0x4d,
+0xde, 0xd8, 0x1f, 0xe5, 0xdf, 0x36, 0xe1, 0xda, 0x26, 0xd9, 0xd2, 0x1c,
+0xe3, 0xe1, 0x32, 0xe3, 0xdd, 0x30, 0xb4, 0xb4, 0x43, 0x5a, 0x69, 0xd0,
+0x62, 0x73, 0xe7, 0x69, 0x7d, 0xfd, 0x72, 0x89, 0xfd, 0x8d, 0xa8, 0xfd,
+0xd3, 0xf3, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xee, 0xfd, 0xfd, 0xa6, 0xcb, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xd5, 0xec, 0xfd, 0xb3, 0xc7, 0xfd, 0x8e, 0x9f, 0xfd, 0x74, 0x83, 0xea,
+0xde, 0xd8, 0x1f, 0xe2, 0xe0, 0x2d, 0xe0, 0xde, 0x25, 0xde, 0xd7, 0x1d,
+0xe2, 0xe0, 0x2b, 0xe2, 0xe0, 0x2d, 0xe0, 0xde, 0x25, 0x21, 0x29, 0x5f,
+0x1e, 0x26, 0x59, 0x1c, 0x23, 0x53, 0x1a, 0x21, 0x4f, 0x39, 0x45, 0x86,
+0x5f, 0x6d, 0xa8, 0xe0, 0xd9, 0x23, 0xcf, 0xc9, 0x1a, 0xdb, 0xd4, 0x1c,
+0xdb, 0xd4, 0x1c, 0xd7, 0xd5, 0x1c, 0xdf, 0xd9, 0x22, 0x3e, 0x4b, 0xe1,
+0x3b, 0x47, 0xe2, 0x39, 0x45, 0xdf, 0x39, 0x44, 0xda, 0x37, 0x43, 0xd6,
+0x37, 0x41, 0xd1, 0x36, 0x40, 0xcc, 0x70, 0x74, 0x87, 0xe5, 0xdf, 0x36,
+0xe1, 0xdf, 0x2a, 0xdf, 0xd9, 0x22, 0xdf, 0xd8, 0x20, 0xde, 0xd7, 0x1d,
+0xa9, 0xa7, 0x3f, 0x2e, 0x37, 0xae, 0x2e, 0x36, 0xaa, 0x2d, 0x36, 0xa7,
+0x2d, 0x35, 0xa4, 0x2c, 0x34, 0xa2, 0x54, 0x59, 0x7c, 0xd0, 0xcb, 0x17,
+0xdf, 0xd8, 0x20, 0xd9, 0xd2, 0x1c, 0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d,
+0xe0, 0xde, 0x25, 0x27, 0x2e, 0x8c, 0x27, 0x2e, 0x8b, 0x26, 0x2d, 0x88,
+0x26, 0x2d, 0x86, 0x25, 0x2c, 0x84, 0x25, 0x2c, 0x83, 0x24, 0x2b, 0x80,
+0x23, 0x2a, 0x7e, 0x23, 0x29, 0x7c, 0x23, 0x29, 0x7b, 0xa4, 0xa2, 0x2d,
+0xde, 0xdc, 0x1f, 0xe0, 0xde, 0x25, 0xdb, 0xd4, 0x1c, 0xd7, 0xd5, 0x1c,
+0x61, 0x63, 0x4d, 0x1f, 0x25, 0x70, 0x1f, 0x25, 0x6e, 0x1e, 0x24, 0x6d,
+0x1e, 0x23, 0x6b, 0x1e, 0x23, 0x6a, 0xb9, 0xb4, 0x1c, 0xde, 0xdc, 0x1f,
+0xd7, 0xd5, 0x1c, 0xe1, 0xda, 0x26, 0xdb, 0xd4, 0x1c, 0x5e, 0x5f, 0x44,
+0x1b, 0x20, 0x62, 0x1b, 0x20, 0x61, 0x1b, 0x1f, 0x60, 0x1b, 0x1f, 0x5f,
+0x1a, 0x1e, 0x5e, 0xb8, 0xb3, 0x1a, 0xe1, 0xda, 0x26, 0xd9, 0xd2, 0x1c,
+0xe3, 0xe1, 0x32, 0xe3, 0xdd, 0x30, 0xa1, 0x9e, 0x22, 0x18, 0x1c, 0x57,
+0x17, 0x1c, 0x56, 0x17, 0x1b, 0x55, 0x17, 0x1b, 0x54, 0x16, 0x1b, 0x53,
+0x16, 0x1b, 0x53, 0x16, 0x1a, 0x52, 0x72, 0x71, 0x30, 0xd1, 0xcf, 0x1a,
+0xd4, 0xcd, 0x1b, 0xd7, 0xd5, 0x1c, 0xcb, 0xc4, 0x18, 0xd1, 0xcf, 0x1a,
+0xce, 0xcc, 0x19, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x17, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x9f, 0x9c, 0x1c, 0xe2, 0xe0, 0x2d, 0xe0, 0xde, 0x25, 0xde, 0xd7, 0x1d,
+0xe2, 0xe0, 0x2d, 0xe7, 0xe1, 0x3c, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44,
+0x10, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x49, 0x25, 0x2c, 0x94, 0x27, 0x2d, 0x9c, 0x22, 0x27, 0x83,
+0x1e, 0x23, 0x7b, 0x1f, 0x24, 0x7d, 0x1f, 0x24, 0x7f, 0x20, 0x26, 0x81,
+0x20, 0x26, 0x82, 0x21, 0x27, 0x84, 0x22, 0x27, 0x86, 0x23, 0x29, 0x89,
+0x23, 0x2a, 0x8a, 0x23, 0x2a, 0x8d, 0x24, 0x2b, 0x8f, 0x25, 0x2d, 0x91,
+0x66, 0x69, 0x65, 0xc9, 0xc3, 0x18, 0xe1, 0xdb, 0x28, 0xe1, 0xda, 0x26,
+0xdf, 0xd8, 0x20, 0xcb, 0xc4, 0x18, 0xd1, 0xcf, 0x1a, 0xa8, 0xa7, 0x3c,
+0x30, 0x38, 0xaa, 0x31, 0x3a, 0xad, 0x33, 0x3c, 0xb1, 0x34, 0x3e, 0xb4,
+0x37, 0x40, 0xb8, 0x38, 0x42, 0xbc, 0x3b, 0x44, 0xc0, 0x3d, 0x47, 0xc4,
+0x3f, 0x4a, 0xc8, 0x43, 0x4d, 0xcd, 0x46, 0x51, 0xd1, 0x49, 0x55, 0xd6,
+0x4d, 0x5a, 0xdb, 0x51, 0x5e, 0xe0, 0x58, 0x67, 0xe2, 0x56, 0x63, 0xcd,
+0x44, 0x50, 0x9a, 0x27, 0x2f, 0x5e, 0x16, 0x1b, 0x41, 0x13, 0x19, 0x3e,
+0x15, 0x1b, 0x41, 0x16, 0x1c, 0x44, 0x18, 0x1e, 0x48, 0x1a, 0x20, 0x4c,
+0x1c, 0x23, 0x51, 0x1e, 0x25, 0x55, 0x20, 0x28, 0x5b, 0x8e, 0x8e, 0x2f,
+0xd7, 0xd0, 0x1c, 0xe4, 0xe2, 0x35, 0xe5, 0xdf, 0x36, 0xe0, 0xda, 0x25,
+0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d, 0x85, 0x8d, 0x84, 0x60, 0x70, 0xdb,
+0x6e, 0x80, 0xf9, 0x7e, 0x94, 0xfd, 0x8e, 0xa7, 0xfd, 0xa0, 0xbe, 0xfd,
+0xb3, 0xd8, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xc0, 0xd9, 0xfd, 0x91, 0xa7, 0xfd, 0x74, 0x86, 0xfd, 0x5f, 0x6f, 0xda,
+0xe1, 0xda, 0x26, 0xd9, 0xd2, 0x1c, 0xe2, 0xe0, 0x2d, 0xe1, 0xdf, 0x2a,
+0xe3, 0xdd, 0x2e, 0xe0, 0xde, 0x25, 0xde, 0xd8, 0x1f, 0x23, 0x2c, 0x62,
+0x20, 0x28, 0x5b, 0x1e, 0x25, 0x55, 0x2c, 0x36, 0x6d, 0x3f, 0x4b, 0x91,
+0x4d, 0x5c, 0xb4, 0xc5, 0xc4, 0x34, 0xe0, 0xd9, 0x23, 0xde, 0xdc, 0x1f,
+0xc7, 0xc5, 0x18, 0xd7, 0xd5, 0x1c, 0xd9, 0xd2, 0x1c, 0x54, 0x5f, 0xc9,
+0x40, 0x4d, 0xe3, 0x3f, 0x4b, 0xe0, 0x3f, 0x4b, 0xdb, 0x3f, 0x4a, 0xd6,
+0x3e, 0x49, 0xd1, 0x3d, 0x49, 0xcd, 0x4f, 0x57, 0xb3, 0xe2, 0xdc, 0x2b,
+0xe0, 0xde, 0x25, 0xde, 0xd8, 0x1f, 0xde, 0xd7, 0x1d, 0xdf, 0xd8, 0x20,
+0x71, 0x75, 0x79, 0x36, 0x40, 0xae, 0x35, 0x3e, 0xaa, 0x35, 0x3d, 0xa7,
+0x35, 0x3c, 0xa5, 0x33, 0x3b, 0xa2, 0x32, 0x3a, 0x9e, 0xe2, 0xe0, 0x2d,
+0xdb, 0xd4, 0x1c, 0xc9, 0xc3, 0x18, 0xe1, 0xdb, 0x28, 0xe1, 0xda, 0x26,
+0xbc, 0xb8, 0x25, 0x2c, 0x33, 0x8d, 0x2b, 0x33, 0x8b, 0x2b, 0x32, 0x89,
+0x29, 0x30, 0x86, 0x29, 0x2f, 0x84, 0x29, 0x2f, 0x83, 0x28, 0x2e, 0x81,
+0x27, 0x2d, 0x7f, 0x27, 0x2c, 0x7d, 0xa6, 0xa3, 0x2d, 0xe3, 0xdd, 0x30,
+0xd5, 0xcf, 0x1c, 0xd5, 0xcf, 0x1c, 0xdf, 0xd8, 0x20, 0x8e, 0x8d, 0x37,
+0x22, 0x28, 0x71, 0x22, 0x28, 0x70, 0x21, 0x27, 0x6e, 0x20, 0x26, 0x6d,
+0x20, 0x26, 0x6b, 0x1f, 0x25, 0x6a, 0xa3, 0xa1, 0x27, 0xdf, 0xd8, 0x20,
+0xdf, 0xd8, 0x20, 0xd7, 0xd5, 0x1c, 0xd9, 0xd2, 0x1c, 0x5f, 0x61, 0x44,
+0x1c, 0x22, 0x62, 0x1c, 0x21, 0x61, 0x1b, 0x21, 0x60, 0x1b, 0x21, 0x5f,
+0x1a, 0x20, 0x5e, 0xa2, 0x9f, 0x23, 0xe5, 0xdf, 0x36, 0xe0, 0xda, 0x25,
+0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d, 0xa1, 0x9e, 0x22, 0x18, 0x1d, 0x57,
+0x18, 0x1d, 0x56, 0x18, 0x1c, 0x55, 0x18, 0x1c, 0x54, 0x17, 0x1b, 0x53,
+0x17, 0x1b, 0x53, 0x16, 0x1b, 0x52, 0xce, 0xc8, 0x0f, 0xde, 0xdc, 0x1f,
+0xce, 0xcc, 0x19, 0xd4, 0xcd, 0x1b, 0xc0, 0xba, 0x15, 0xd9, 0xd2, 0x1c,
+0xdf, 0xd8, 0x20, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x9f, 0x9c, 0x1c, 0xe0, 0xde, 0x25, 0xde, 0xd8, 0x1f, 0xe0, 0xde, 0x25,
+0xe1, 0xda, 0x26, 0x9f, 0x9b, 0x1b, 0x11, 0x15, 0x44, 0x11, 0x15, 0x44,
+0x11, 0x14, 0x42, 0x11, 0x14, 0x42, 0x11, 0x14, 0x41, 0x11, 0x14, 0x41,
+0x10, 0x14, 0x40, 0x10, 0x14, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3e, 0x10, 0x13, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x11, 0x14, 0x49, 0x23, 0x2b, 0x94, 0x24, 0x2c, 0x9c, 0x20, 0x25, 0x83,
+0x1c, 0x22, 0x7b, 0x1d, 0x23, 0x7d, 0x1d, 0x24, 0x7f, 0x1d, 0x24, 0x81,
+0x1e, 0x24, 0x82, 0x1e, 0x25, 0x84, 0x1f, 0x26, 0x86, 0x1f, 0x27, 0x89,
+0x20, 0x27, 0x8a, 0x20, 0x27, 0x8d, 0x21, 0x28, 0x8f, 0x22, 0x29, 0x91,
+0x8e, 0x8e, 0x46, 0xdf, 0xd8, 0x20, 0xde, 0xd7, 0x1d, 0xe1, 0xda, 0x26,
+0xdd, 0xd6, 0x1c, 0xce, 0xcc, 0x19, 0xd5, 0xcf, 0x1c, 0x7c, 0x7c, 0x60,
+0x28, 0x31, 0xaa, 0x2a, 0x32, 0xae, 0x2b, 0x33, 0xb1, 0x2c, 0x34, 0xb5,
+0x2d, 0x35, 0xb8, 0x2e, 0x37, 0xbd, 0x2e, 0x38, 0xc0, 0x30, 0x3a, 0xc4,
+0x31, 0x3c, 0xc9, 0x33, 0x3d, 0xcd, 0x34, 0x3e, 0xd2, 0x36, 0x40, 0xd6,
+0x37, 0x42, 0xdb, 0x39, 0x44, 0xe0, 0x3c, 0x48, 0xe2, 0x40, 0x4d, 0xe1,
+0x44, 0x52, 0xe1, 0x49, 0x58, 0xdf, 0x4f, 0x5e, 0xdf, 0x56, 0x66, 0xde,
+0x55, 0x65, 0xce, 0x42, 0x4e, 0x97, 0x2a, 0x33, 0x67, 0x1a, 0x20, 0x4c,
+0x1c, 0x23, 0x51, 0x1e, 0x25, 0x56, 0x21, 0x29, 0x5c, 0xba, 0xb7, 0x1b,
+0xdc, 0xda, 0x1d, 0xdd, 0xd6, 0x1c, 0xe7, 0xe1, 0x3c, 0xe2, 0xe0, 0x2d,
+0xe1, 0xdb, 0x28, 0xe0, 0xda, 0x25, 0x67, 0x74, 0xb2, 0x63, 0x74, 0xe1,
+0x71, 0x84, 0xfd, 0x85, 0x9b, 0xfd, 0x9e, 0xb8, 0xfd, 0xc4, 0xe4, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xc1, 0xe1, 0xfd,
+0x8e, 0xa8, 0xfd, 0x7c, 0x92, 0xfd, 0x6d, 0x80, 0xfd, 0x62, 0x73, 0xe0,
+0xde, 0xd8, 0x1f, 0xd7, 0xd0, 0x1c, 0xe4, 0xe2, 0x35, 0xe6, 0xdf, 0x37,
+0xdf, 0xd8, 0x20, 0xe0, 0xde, 0x25, 0xdf, 0xd9, 0x22, 0x26, 0x2e, 0x65,
+0x23, 0x2b, 0x5e, 0x20, 0x27, 0x58, 0x1e, 0x25, 0x53, 0x1b, 0x22, 0x4e,
+0x19, 0x20, 0x4a, 0xa1, 0x9e, 0x1c, 0xe0, 0xde, 0x25, 0xe2, 0xe0, 0x2b,
+0xd1, 0xcf, 0x1a, 0xd7, 0xd5, 0x1c, 0xd9, 0xd2, 0x1c, 0x87, 0x8e, 0x8e,
+0x5c, 0x6a, 0xe3, 0x58, 0x66, 0xe1, 0x56, 0x64, 0xdc, 0x54, 0x61, 0xd7,
+0x52, 0x5e, 0xd3, 0x50, 0x5c, 0xce, 0x4e, 0x5a, 0xca, 0xce, 0xc7, 0x19,
+0xdf, 0xd8, 0x20, 0xde, 0xd8, 0x1f, 0xdf, 0xd8, 0x20, 0xde, 0xdb, 0x1d,
+0x43, 0x4c, 0xb2, 0x41, 0x4b, 0xaf, 0x40, 0x49, 0xab, 0x3e, 0x47, 0xa7,
+0x3c, 0x45, 0xa5, 0x3b, 0x44, 0xa2, 0x5f, 0x64, 0x7c, 0xd4, 0xcd, 0x1b,
+0xd7, 0xd5, 0x1c, 0xdf, 0xd8, 0x20, 0xde, 0xd7, 0x1d, 0xe1, 0xda, 0x26,
+0xaa, 0xa8, 0x34, 0x31, 0x39, 0x8d, 0x30, 0x38, 0x8b, 0x30, 0x37, 0x89,
+0x2e, 0x35, 0x86, 0x2d, 0x34, 0x84, 0x2d, 0x33, 0x83, 0x2b, 0x32, 0x81,
+0x2b, 0x32, 0x7f, 0x7d, 0x7e, 0x48, 0xd7, 0xd0, 0x1c, 0xde, 0xd8, 0x1f,
+0xd4, 0xcd, 0x1b, 0xcc, 0xc6, 0x19, 0xd0, 0xca, 0x13, 0x26, 0x2b, 0x73,
+0x25, 0x2a, 0x71, 0x25, 0x2a, 0x70, 0x23, 0x29, 0x6e, 0x23, 0x28, 0x6d,
+0x22, 0x27, 0x6b, 0x22, 0x27, 0x6b, 0xcf, 0xc9, 0x12, 0xe0, 0xde, 0x25,
+0xe0, 0xda, 0x25, 0xdd, 0xd6, 0x1c, 0xde, 0xdc, 0x1f, 0x60, 0x61, 0x44,
+0x1e, 0x23, 0x62, 0x1e, 0x22, 0x61, 0x1d, 0x22, 0x60, 0x1d, 0x21, 0x5f,
+0x1c, 0x20, 0x5e, 0xa2, 0x9f, 0x23, 0xe7, 0xe1, 0x3c, 0xe2, 0xe0, 0x2d,
+0xe1, 0xdb, 0x28, 0xe0, 0xda, 0x25, 0xa2, 0x9f, 0x22, 0x19, 0x1e, 0x57,
+0x19, 0x1e, 0x56, 0x18, 0x1d, 0x55, 0x18, 0x1d, 0x54, 0x18, 0x1c, 0x53,
+0x18, 0x1c, 0x53, 0x72, 0x71, 0x30, 0xc4, 0xbe, 0x17, 0xe1, 0xdb, 0x28,
+0xce, 0xcc, 0x19, 0xce, 0xcc, 0x19, 0xdf, 0xd9, 0x22, 0xdd, 0xd6, 0x1c,
+0xd7, 0xd5, 0x1c, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x17, 0x49, 0x13, 0x17, 0x48,
+0x59, 0x59, 0x31, 0xe0, 0xde, 0x25, 0xdf, 0xd9, 0x22, 0xd9, 0xd2, 0x1c,
+0xde, 0xdc, 0x1f, 0x6f, 0x6e, 0x28, 0x11, 0x15, 0x44, 0x11, 0x15, 0x44,
+0x11, 0x14, 0x42, 0x11, 0x14, 0x42, 0x11, 0x14, 0x41, 0x11, 0x14, 0x41,
+0x10, 0x14, 0x40, 0x10, 0x14, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3e, 0x10, 0x13, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x11, 0x15, 0x49, 0x23, 0x2b, 0x94, 0x25, 0x2d, 0x9c, 0x20, 0x26, 0x83,
+0x1d, 0x23, 0x7b, 0x1d, 0x23, 0x7d, 0x1d, 0x24, 0x7f, 0x1e, 0x25, 0x81,
+0x1f, 0x25, 0x82, 0x1f, 0x25, 0x84, 0x20, 0x26, 0x86, 0x20, 0x27, 0x89,
+0x21, 0x28, 0x8a, 0x22, 0x28, 0x8d, 0x22, 0x29, 0x8f, 0x23, 0x2a, 0x91,
+0xa5, 0xa2, 0x36, 0xe3, 0xdd, 0x30, 0xe2, 0xdc, 0x2b, 0xce, 0xc7, 0x19,
+0xdb, 0xd4, 0x1c, 0xde, 0xdc, 0x1f, 0xc1, 0xbb, 0x16, 0x67, 0x69, 0x71,
+0x28, 0x31, 0xaa, 0x2a, 0x32, 0xae, 0x2a, 0x32, 0xb1, 0x2b, 0x34, 0xb5,
+0x2c, 0x35, 0xb9, 0x2d, 0x36, 0xbd, 0x2e, 0x37, 0xc0, 0x2f, 0x38, 0xc5,
+0x30, 0x39, 0xc9, 0x30, 0x3a, 0xcd, 0x31, 0x3b, 0xd2, 0x31, 0x3d, 0xd6,
+0x32, 0x3e, 0xdb, 0x33, 0x3f, 0xe0, 0x36, 0x42, 0xe2, 0x39, 0x45, 0xe1,
+0x3c, 0x48, 0xe1, 0x3f, 0x4d, 0xe0, 0x42, 0x51, 0xdf, 0x48, 0x56, 0xde,
+0x4c, 0x5b, 0xdd, 0x51, 0x61, 0xdb, 0x56, 0x68, 0xda, 0x52, 0x62, 0xc3,
+0x44, 0x53, 0xa0, 0x2f, 0x3a, 0x74, 0x21, 0x29, 0x5c, 0xd7, 0xd0, 0x1c,
+0xe1, 0xda, 0x26, 0xe0, 0xd9, 0x23, 0xde, 0xdb, 0x1d, 0xdc, 0xda, 0x1d,
+0xe2, 0xdc, 0x2d, 0xe1, 0xda, 0x26, 0x58, 0x67, 0xc9, 0x64, 0x75, 0xe3,
+0x73, 0x86, 0xfd, 0x86, 0x9d, 0xfd, 0xa2, 0xbd, 0xfd, 0xcb, 0xed, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xec, 0xfd, 0xfd,
+0xbc, 0xd7, 0xfd, 0x9c, 0xb3, 0xfd, 0x86, 0x99, 0xfd, 0x80, 0x8e, 0xd9,
+0xce, 0xc7, 0x19, 0xe3, 0xdd, 0x2e, 0xe5, 0xdf, 0x34, 0xe2, 0xdc, 0x2b,
+0xdc, 0xda, 0x1d, 0xdc, 0xda, 0x1d, 0xbc, 0xb9, 0x1e, 0x29, 0x31, 0x68,
+0x25, 0x2d, 0x60, 0x22, 0x29, 0x5a, 0x1f, 0x26, 0x54, 0x1c, 0x23, 0x4f,
+0x1b, 0x21, 0x4b, 0x5d, 0x5f, 0x31, 0xde, 0xd8, 0x1f, 0xe0, 0xde, 0x25,
+0xdf, 0xd9, 0x22, 0xd7, 0xd5, 0x1c, 0xe2, 0xe0, 0x2d, 0x78, 0x7c, 0x62,
+0x4d, 0x58, 0xad, 0x54, 0x61, 0xc5, 0x55, 0x61, 0xc8, 0x55, 0x62, 0xca,
+0x55, 0x61, 0xcc, 0x54, 0x61, 0xce, 0x52, 0x5e, 0xca, 0xc4, 0xc1, 0x31,
+0xe0, 0xde, 0x25, 0xe1, 0xda, 0x26, 0xe3, 0xe1, 0x32, 0x9e, 0x9e, 0x55,
+0x43, 0x4d, 0xb2, 0x42, 0x4b, 0xaf, 0x3f, 0x49, 0xab, 0x3e, 0x47, 0xa7,
+0x3b, 0x45, 0xa5, 0x3b, 0x43, 0xa2, 0x72, 0x75, 0x6c, 0xc7, 0xc5, 0x18,
+0xdb, 0xd4, 0x1c, 0xe3, 0xdd, 0x30, 0xe2, 0xdc, 0x2b, 0xce, 0xc7, 0x19,
+0x6d, 0x6f, 0x61, 0x30, 0x37, 0x8d, 0x2f, 0x35, 0x8b, 0x2e, 0x35, 0x89,
+0x2c, 0x34, 0x86, 0x2b, 0x33, 0x85, 0x2b, 0x32, 0x83, 0x29, 0x31, 0x81,
+0x3d, 0x43, 0x71, 0xe0, 0xda, 0x25, 0xe1, 0xda, 0x26, 0xd4, 0xcd, 0x1b,
+0xd1, 0xcf, 0x1a, 0xd4, 0xcd, 0x1b, 0x79, 0x7a, 0x43, 0x24, 0x29, 0x73,
+0x23, 0x29, 0x71, 0x23, 0x28, 0x70, 0x22, 0x28, 0x6e, 0x21, 0x27, 0x6d,
+0x20, 0x26, 0x6c, 0x77, 0x77, 0x3e, 0xdf, 0xd8, 0x20, 0xe1, 0xdb, 0x28,
+0xdf, 0xd8, 0x20, 0xcc, 0xc6, 0x19, 0xde, 0xdb, 0x1d, 0x1d, 0x22, 0x63,
+0x1c, 0x22, 0x62, 0x1c, 0x21, 0x61, 0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5f,
+0x1b, 0x20, 0x5e, 0xa2, 0x9f, 0x23, 0xde, 0xdb, 0x1d, 0xdc, 0xda, 0x1d,
+0xe2, 0xdc, 0x2d, 0xe1, 0xda, 0x26, 0xa1, 0x9e, 0x22, 0x18, 0x1d, 0x57,
+0x18, 0x1c, 0x56, 0x18, 0x1c, 0x55, 0x17, 0x1b, 0x54, 0x17, 0x1b, 0x53,
+0x17, 0x1b, 0x53, 0xce, 0xc8, 0x0f, 0xdb, 0xd4, 0x1c, 0xce, 0xc7, 0x19,
+0xd1, 0xca, 0x1a, 0xdf, 0xd9, 0x22, 0xde, 0xdc, 0x1f, 0xdd, 0xd6, 0x1c,
+0xe2, 0xe0, 0x2b, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x59, 0x59, 0x32, 0xdc, 0xda, 0x1d, 0xd7, 0xd0, 0x1c, 0xdc, 0xda, 0x1d,
+0xe1, 0xda, 0x26, 0x12, 0x15, 0x45, 0x12, 0x14, 0x44, 0x11, 0x14, 0x44,
+0x10, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x49, 0x24, 0x2c, 0x94, 0x25, 0x2d, 0x9c, 0x21, 0x26, 0x83,
+0x1e, 0x23, 0x7b, 0x1e, 0x24, 0x7d, 0x1e, 0x24, 0x7f, 0x1f, 0x25, 0x81,
+0x20, 0x25, 0x82, 0x20, 0x26, 0x84, 0x21, 0x27, 0x86, 0x21, 0x27, 0x89,
+0x21, 0x28, 0x8a, 0x22, 0x28, 0x8d, 0x23, 0x29, 0x8f, 0x23, 0x2a, 0x91,
+0xd0, 0xca, 0x17, 0xd7, 0xd0, 0x1c, 0xde, 0xd7, 0x1d, 0xdc, 0xda, 0x1d,
+0xd7, 0xd5, 0x1c, 0xdf, 0xd8, 0x20, 0xd2, 0xcc, 0x1b, 0x3d, 0x44, 0x95,
+0x2a, 0x33, 0xaa, 0x2c, 0x34, 0xae, 0x2c, 0x35, 0xb1, 0x2d, 0x36, 0xb5,
+0x2e, 0x37, 0xb8, 0x2f, 0x38, 0xbd, 0x30, 0x3a, 0xc0, 0x31, 0x3b, 0xc5,
+0x33, 0x3c, 0xc9, 0xaa, 0xa9, 0x49, 0xd1, 0xca, 0x1a, 0xc3, 0xbd, 0x16,
+0xd7, 0xd5, 0x1c, 0xde, 0xd7, 0x1d, 0xd7, 0xd5, 0x1c, 0xdc, 0xda, 0x1d,
+0xe1, 0xda, 0x26, 0xd7, 0xd5, 0x1c, 0xd1, 0xcf, 0x1a, 0xe1, 0xdb, 0x2a,
+0xdd, 0xd6, 0x1c, 0xce, 0xcc, 0x19, 0xcb, 0xc4, 0x18, 0xa9, 0xa8, 0x2b,
+0x1c, 0x23, 0x51, 0x1e, 0x26, 0x57, 0x36, 0x3c, 0x52, 0xe1, 0xdf, 0x2a,
+0xc3, 0xbd, 0x16, 0xdf, 0xd9, 0x22, 0xe1, 0xda, 0x26, 0xe0, 0xde, 0x25,
+0xce, 0xcc, 0x19, 0xc3, 0xc0, 0x2c, 0x58, 0x67, 0xc8, 0x64, 0x75, 0xe2,
+0x72, 0x85, 0xfd, 0x86, 0x9c, 0xfd, 0xa0, 0xba, 0xfd, 0xbd, 0xdd, 0xfd,
+0xe2, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xf0, 0xfd, 0xfd,
+0xc3, 0xdd, 0xfd, 0xa4, 0xba, 0xfd, 0x8d, 0xa0, 0xfd, 0x9f, 0xa8, 0xa9,
+0xe1, 0xdb, 0x28, 0xe6, 0xdf, 0x37, 0xdf, 0xd8, 0x20, 0xd7, 0xd0, 0x1c,
+0xe1, 0xdf, 0x2a, 0xdf, 0xd9, 0x22, 0xa9, 0xa7, 0x2b, 0x2b, 0x34, 0x6b,
+0x27, 0x2f, 0x62, 0x24, 0x2b, 0x5c, 0x20, 0x27, 0x56, 0x2c, 0x35, 0x68,
+0x48, 0x56, 0xa2, 0x82, 0x8a, 0x7f, 0xd2, 0xcc, 0x1b, 0xd7, 0xd5, 0x1c,
+0xe0, 0xde, 0x25, 0xe0, 0xde, 0x25, 0xe0, 0xda, 0x25, 0x7e, 0x85, 0x99,
+0x49, 0x56, 0xe4, 0x46, 0x52, 0xe2, 0x44, 0x50, 0xdc, 0x43, 0x4f, 0xd8,
+0x42, 0x4e, 0xd3, 0x41, 0x4c, 0xce, 0x40, 0x4a, 0xca, 0xae, 0xad, 0x46,
+0xdb, 0xd4, 0x1c, 0xe3, 0xdd, 0x30, 0xe4, 0xe2, 0x33, 0x4b, 0x53, 0xa2,
+0x38, 0x41, 0xb2, 0x37, 0x40, 0xaf, 0x35, 0x3e, 0xab, 0x34, 0x3e, 0xa8,
+0x33, 0x3c, 0xa5, 0x33, 0x3a, 0xa2, 0xaa, 0xa7, 0x39, 0xe1, 0xdf, 0x2a,
+0xde, 0xdb, 0x1d, 0xd7, 0xd0, 0x1c, 0xde, 0xd7, 0x1d, 0xdc, 0xda, 0x1d,
+0x6a, 0x6c, 0x61, 0x2b, 0x31, 0x8d, 0x2b, 0x31, 0x8b, 0x29, 0x30, 0x89,
+0x28, 0x2f, 0x86, 0x27, 0x2e, 0x85, 0x27, 0x2d, 0x83, 0x26, 0x2d, 0x81,
+0xba, 0xb6, 0x21, 0xdf, 0xd8, 0x20, 0xdf, 0xd8, 0x20, 0xd1, 0xcf, 0x1a,
+0xd1, 0xca, 0x1a, 0xdc, 0xda, 0x1d, 0x22, 0x28, 0x74, 0x21, 0x27, 0x73,
+0x20, 0x27, 0x71, 0x20, 0x26, 0x70, 0x20, 0x25, 0x6e, 0x1f, 0x25, 0x6d,
+0x61, 0x62, 0x4a, 0xd7, 0xd5, 0x1c, 0xd1, 0xcf, 0x1a, 0xe1, 0xdb, 0x2a,
+0xdd, 0xd6, 0x1c, 0xce, 0xcc, 0x19, 0x8b, 0x8a, 0x30, 0x1c, 0x21, 0x63,
+0x1b, 0x20, 0x62, 0x1b, 0x20, 0x61, 0x1b, 0x1f, 0x60, 0x1a, 0x1f, 0x5f,
+0x1a, 0x1e, 0x5e, 0xa2, 0x9e, 0x23, 0xe1, 0xda, 0x26, 0xe0, 0xde, 0x25,
+0xce, 0xcc, 0x19, 0xde, 0xd7, 0x1d, 0xd4, 0xcd, 0x1b, 0x18, 0x1c, 0x57,
+0x17, 0x1b, 0x56, 0x17, 0x1b, 0x55, 0x17, 0x1b, 0x54, 0x16, 0x1b, 0x53,
+0x72, 0x71, 0x31, 0xdf, 0xd8, 0x20, 0xd7, 0xd5, 0x1c, 0x71, 0x70, 0x2f,
+0xd5, 0xcf, 0x1c, 0xe0, 0xda, 0x25, 0xde, 0xd7, 0x1d, 0xdf, 0xd8, 0x20,
+0xdf, 0xd8, 0x20, 0x14, 0x18, 0x4c, 0x14, 0x17, 0x4b, 0x14, 0x17, 0x4b,
+0x13, 0x17, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x12, 0x16, 0x47, 0xdf, 0xd9, 0x22, 0xdf, 0xd8, 0x20, 0xdf, 0xd9, 0x22,
+0x87, 0x84, 0x22, 0x12, 0x14, 0x45, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x0f, 0x13, 0x40, 0x0f, 0x13, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x49, 0x25, 0x2c, 0x94, 0x27, 0x2d, 0x9c, 0x22, 0x27, 0x83,
+0x1e, 0x23, 0x7b, 0x1f, 0x24, 0x7d, 0x1f, 0x24, 0x7f, 0x20, 0x25, 0x81,
+0x20, 0x26, 0x82, 0x21, 0x26, 0x84, 0x21, 0x27, 0x86, 0x22, 0x28, 0x89,
+0x22, 0x29, 0x8a, 0x23, 0x2a, 0x8d, 0x24, 0x2a, 0x8f, 0x25, 0x2c, 0x91,
+0xd4, 0xcd, 0x1b, 0xe0, 0xde, 0x25, 0xdb, 0xd4, 0x1c, 0xd2, 0xcc, 0x1b,
+0xde, 0xdb, 0x1d, 0xe1, 0xdb, 0x2a, 0xdf, 0xd8, 0x20, 0x2b, 0x33, 0xa7,
+0x2c, 0x35, 0xaa, 0x2d, 0x36, 0xad, 0x2f, 0x38, 0xb1, 0x30, 0x39, 0xb4,
+0x32, 0x3a, 0xb8, 0x33, 0x3d, 0xbc, 0x35, 0x3e, 0xc0, 0x36, 0x40, 0xc4,
+0x37, 0x42, 0xc8, 0xac, 0xab, 0x49, 0xc7, 0xc5, 0x18, 0xcf, 0xc9, 0x1a,
+0xd4, 0xcd, 0x1b, 0xce, 0xc7, 0x19, 0xd4, 0xcd, 0x1b, 0xde, 0xd7, 0x1d,
+0xde, 0xd7, 0x1d, 0xd7, 0xd0, 0x1c, 0xd5, 0xcf, 0x1c, 0xdd, 0xd6, 0x1c,
+0xd7, 0xd5, 0x1c, 0xe0, 0xde, 0x25, 0xdf, 0xd8, 0x20, 0xa2, 0x9f, 0x1e,
+0x1c, 0x23, 0x51, 0x1e, 0x25, 0x55, 0x62, 0x65, 0x3f, 0xdc, 0xda, 0x1d,
+0xcb, 0xc4, 0x18, 0xe0, 0xde, 0x25, 0xe1, 0xda, 0x26, 0xdf, 0xd8, 0x20,
+0xe0, 0xd9, 0x23, 0xb1, 0xb1, 0x3e, 0x54, 0x63, 0xc2, 0x5d, 0x6d, 0xd8,
+0x66, 0x78, 0xf1, 0x6f, 0x85, 0xfd, 0x7b, 0x94, 0xfd, 0x88, 0xa6, 0xfd,
+0xa0, 0xc5, 0xfd, 0xc5, 0xf5, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
+0xfd, 0xfd, 0xfd, 0xf0, 0xfd, 0xfd, 0xbc, 0xe1, 0xfd, 0xb3, 0xd1, 0xfd,
+0xa6, 0xbf, 0xfd, 0x98, 0xae, 0xfd, 0x86, 0x98, 0xfd, 0xa7, 0xad, 0x89,
+0xe1, 0xda, 0x26, 0xe0, 0xd9, 0x23, 0xdf, 0xd9, 0x22, 0xdb, 0xd4, 0x1c,
+0xe1, 0xdb, 0x2a, 0xdb, 0xd4, 0x1c, 0x80, 0x82, 0x42, 0x2b, 0x33, 0x6a,
+0x26, 0x2e, 0x61, 0x23, 0x2a, 0x5b, 0x21, 0x28, 0x56, 0x1e, 0x25, 0x51,
+0x1c, 0x22, 0x4b, 0x5e, 0x5f, 0x31, 0xe1, 0xdb, 0x2a, 0xde, 0xdc, 0x1f,
+0xe1, 0xda, 0x26, 0xe0, 0xde, 0x25, 0xdc, 0xda, 0x1d, 0xa9, 0xab, 0x69,
+0x55, 0x64, 0xe4, 0x4e, 0x5b, 0xe2, 0x49, 0x56, 0xdd, 0x46, 0x51, 0xd8,
+0x43, 0x4e, 0xd3, 0x3f, 0x4a, 0xce, 0x4e, 0x58, 0xb4, 0xdf, 0xd9, 0x22,
+0xd2, 0xcc, 0x1b, 0xdf, 0xd9, 0x22, 0x95, 0x96, 0x56, 0x32, 0x3b, 0xb5,
+0x30, 0x3a, 0xb2, 0x2f, 0x38, 0xae, 0x2f, 0x37, 0xab, 0x2d, 0x35, 0xa8,
+0x2d, 0x35, 0xa5, 0x2c, 0x34, 0xa2, 0xbc, 0xb8, 0x28, 0xde, 0xd7, 0x1d,
+0xd4, 0xcd, 0x1b, 0xe0, 0xde, 0x25, 0xdb, 0xd4, 0x1c, 0xd2, 0xcc, 0x1b,
+0x28, 0x2e, 0x8f, 0x26, 0x2e, 0x8d, 0x26, 0x2d, 0x8b, 0x26, 0x2c, 0x89,
+0x25, 0x2b, 0x87, 0x24, 0x2a, 0x85, 0x24, 0x2a, 0x83, 0x39, 0x3d, 0x73,
+0xe2, 0xe0, 0x2d, 0xe4, 0xe2, 0x35, 0xe2, 0xe0, 0x2b, 0xe1, 0xdb, 0x28,
+0xdf, 0xd8, 0x20, 0xa4, 0xa1, 0x2c, 0x1f, 0x25, 0x74, 0x1f, 0x24, 0x73,
+0x1f, 0x24, 0x71, 0x1e, 0x24, 0x70, 0x1e, 0x23, 0x6e, 0x8c, 0x8a, 0x34,
+0xde, 0xd7, 0x1d, 0xd7, 0xd0, 0x1c, 0xd5, 0xcf, 0x1c, 0xdd, 0xd6, 0x1c,
+0xd7, 0xd5, 0x1c, 0xce, 0xc9, 0x11, 0x31, 0x34, 0x59, 0x1a, 0x1f, 0x63,
+0x1a, 0x1e, 0x62, 0x1a, 0x1e, 0x61, 0x19, 0x1d, 0x60, 0x19, 0x1d, 0x5f,
+0x19, 0x1d, 0x5e, 0xa1, 0x9e, 0x23, 0xe1, 0xda, 0x26, 0xdf, 0xd8, 0x20,
+0xe0, 0xd9, 0x23, 0xdf, 0xd8, 0x20, 0xe2, 0xdc, 0x2b, 0x17, 0x1b, 0x57,
+0x16, 0x1a, 0x56, 0x16, 0x1a, 0x55, 0x16, 0x1a, 0x54, 0x15, 0x19, 0x53,
+0xce, 0xc8, 0x0f, 0xe2, 0xdc, 0x2b, 0xa0, 0x9d, 0x1f, 0x14, 0x18, 0x50,
+0xde, 0xd8, 0x1f, 0xe2, 0xe0, 0x2d, 0xde, 0xd7, 0x1d, 0xd7, 0xd5, 0x1c,
+0xdf, 0xd9, 0x22, 0x59, 0x59, 0x35, 0x13, 0x16, 0x4b, 0x13, 0x16, 0x4b,
+0x13, 0x16, 0x4a, 0x12, 0x16, 0x49, 0x12, 0x16, 0x49, 0x12, 0x16, 0x48,
+0x6f, 0x6e, 0x2a, 0xdb, 0xd4, 0x1c, 0xe2, 0xe0, 0x2d, 0xcd, 0xc7, 0x0e,
+0x28, 0x2a, 0x3e, 0x11, 0x14, 0x45, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x42, 0x10, 0x12, 0x41, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x12, 0x15, 0x49, 0x25, 0x2c, 0x94, 0x28, 0x2e, 0x9c, 0x22, 0x28, 0x83,
+0x1f, 0x25, 0x7b, 0x1f, 0x25, 0x7c, 0x20, 0x25, 0x7e, 0x21, 0x26, 0x80,
+0x21, 0x28, 0x82, 0x22, 0x28, 0x84, 0x23, 0x29, 0x86, 0x23, 0x29, 0x88,
+0x24, 0x2b, 0x8a, 0x24, 0x2c, 0x8c, 0x25, 0x2c, 0x8f, 0x26, 0x2e, 0x91,
+0xbe, 0xb8, 0x15, 0xdb, 0xd4, 0x1c, 0xe5, 0xdf, 0x36, 0xe3, 0xdd, 0x30,
+0xe1, 0xdb, 0x28, 0xe2, 0xe0, 0x2d, 0xdd, 0xd6, 0x1c, 0x2f, 0x37, 0xa7,
+0x31, 0x3a, 0xaa, 0x32, 0x3b, 0xad, 0x34, 0x3c, 0xb1, 0x35, 0x3e, 0xb4,
+0x37, 0x41, 0xb8, 0x39, 0x43, 0xbc, 0x3b, 0x45, 0xbf, 0x3d, 0x48, 0xc4,
+0x3f, 0x4a, 0xc8, 0x8a, 0x8d, 0x74, 0xb0, 0xaf, 0x4a, 0xc2, 0xbf, 0x35,
+0xcb, 0xc4, 0x18, 0xd2, 0xcc, 0x1b, 0xd1, 0xcf, 0x1a, 0xe0, 0xd9, 0x23,
+0xdb, 0xd4, 0x1c, 0xdb, 0xd4, 0x1c, 0xde, 0xd8, 0x1f, 0xdf, 0xd9, 0x22,
+0xd3, 0xce, 0x17, 0xac, 0xab, 0x30, 0xa9, 0xa7, 0x2a, 0x78, 0x7a, 0x35,
+0x1b, 0x22, 0x50, 0x1d, 0x25, 0x55, 0x62, 0x65, 0x3f, 0xde, 0xdb, 0x1d,
+0xdf, 0xd8, 0x20, 0xcc, 0xc6, 0x19, 0xcb, 0xc4, 0x18, 0xd7, 0xd5, 0x1c,
+0xe2, 0xe0, 0x2d, 0xae, 0xae, 0x3a, 0x47, 0x55, 0xb2, 0x4f, 0x5e, 0xc5,
+0x54, 0x65, 0xd9, 0x59, 0x6d, 0xf0, 0x64, 0x7b, 0xfd, 0x70, 0x8b, 0xfd,
+0x82, 0xa2, 0xfd, 0xa4, 0xc9, 0xfd, 0xfd, 0xfd, 0xfd, 0xfb, 0xfd, 0xfd,
+0xd6, 0xfd, 0xfd, 0xbc, 0xe1, 0xfd, 0x9f, 0xbf, 0xfd, 0x86, 0xa1, 0xfd,
+0x7b, 0x92, 0xfd, 0x76, 0x8a, 0xfd, 0x71, 0x82, 0xf6, 0xbd, 0xbd, 0x4f,
+0xdf, 0xd9, 0x22, 0xe1, 0xda, 0x26, 0xd4, 0xcd, 0x1b, 0xcf, 0xc9, 0x1a,
+0xe0, 0xd9, 0x23, 0xe2, 0xdc, 0x2d, 0x55, 0x5b, 0x58, 0x29, 0x32, 0x67,
+0x25, 0x2d, 0x60, 0x22, 0x2a, 0x5a, 0x20, 0x27, 0x55, 0x1d, 0x24, 0x4f,
+0x1c, 0x22, 0x4b, 0x19, 0x1f, 0x47, 0xe2, 0xe0, 0x2b, 0xe4, 0xe2, 0x35,
+0xe0, 0xda, 0x25, 0xde, 0xdc, 0x1f, 0xe0, 0xde, 0x25, 0x9f, 0x9c, 0x16,
+0x10, 0x15, 0x33, 0x10, 0x14, 0x32, 0x25, 0x2c, 0x56, 0x37, 0x41, 0x7b,
+0x42, 0x4b, 0x94, 0x4a, 0x55, 0xac, 0xa2, 0xa3, 0x58, 0xd1, 0xca, 0x1a,
+0xe0, 0xde, 0x25, 0xd3, 0xce, 0x1b, 0x55, 0x5d, 0xa5, 0x40, 0x4a, 0xb5,
+0x3d, 0x47, 0xb2, 0x3a, 0x44, 0xae, 0x38, 0x40, 0xab, 0x36, 0x3f, 0xa8,
+0x34, 0x3b, 0xa5, 0x32, 0x3a, 0xa2, 0xe1, 0xdb, 0x2a, 0xc7, 0xc1, 0x18,
+0xbe, 0xb8, 0x15, 0xdb, 0xd4, 0x1c, 0xe5, 0xdf, 0x36, 0xd0, 0xcb, 0x16,
+0x28, 0x2f, 0x8f, 0x27, 0x2d, 0x8d, 0x26, 0x2d, 0x8b, 0x25, 0x2b, 0x88,
+0x24, 0x2a, 0x87, 0x23, 0x29, 0x85, 0x22, 0x29, 0x83, 0x8d, 0x8d, 0x3d,
+0xde, 0xd8, 0x1f, 0xdf, 0xd9, 0x22, 0xdb, 0xd4, 0x1c, 0xe1, 0xdf, 0x2a,
+0xe1, 0xda, 0x26, 0x60, 0x62, 0x51, 0x1d, 0x23, 0x74, 0x1d, 0x23, 0x73,
+0x49, 0x4c, 0x59, 0x8b, 0x8a, 0x35, 0xcf, 0xc9, 0x12, 0xe0, 0xd9, 0x23,
+0xdb, 0xd4, 0x1c, 0xdb, 0xd4, 0x1c, 0xde, 0xd8, 0x1f, 0xdf, 0xd9, 0x22,
+0xce, 0xc9, 0x11, 0x2f, 0x33, 0x5a, 0x19, 0x1e, 0x64, 0x19, 0x1d, 0x63,
+0x19, 0x1d, 0x62, 0x18, 0x1d, 0x61, 0x18, 0x1c, 0x60, 0x18, 0x1c, 0x5f,
+0x17, 0x1b, 0x5e, 0x72, 0x71, 0x36, 0xcb, 0xc4, 0x18, 0xd7, 0xd5, 0x1c,
+0xe2, 0xe0, 0x2d, 0xe2, 0xe0, 0x2b, 0xe3, 0xdd, 0x30, 0x16, 0x1a, 0x57,
+0x15, 0x19, 0x56, 0x15, 0x19, 0x55, 0x15, 0x19, 0x54, 0x71, 0x70, 0x31,
+0xe3, 0xe1, 0x32, 0xe1, 0xdf, 0x2a, 0x2b, 0x2d, 0x48, 0x14, 0x17, 0x50,
+0xcb, 0xc4, 0x18, 0xe3, 0xdd, 0x30, 0xe8, 0xe2, 0x3f, 0xe0, 0xda, 0x25,
+0xcc, 0xc6, 0x19, 0x59, 0x59, 0x35, 0x12, 0x16, 0x4b, 0x12, 0x16, 0x4b,
+0x12, 0x15, 0x4a, 0x12, 0x15, 0x49, 0x12, 0x15, 0x49, 0x12, 0x15, 0x48,
+0xcd, 0xc7, 0x0e, 0xe2, 0xdc, 0x2d, 0xde, 0xd8, 0x1f, 0x6f, 0x6d, 0x29,
+0x11, 0x14, 0x45, 0x11, 0x14, 0x45, 0x11, 0x14, 0x44, 0x10, 0x14, 0x44,
+0x10, 0x12, 0x42, 0x10, 0x12, 0x42, 0x10, 0x12, 0x41, 0x10, 0x12, 0x41,
+0x10, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x11, 0x3f, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x49, 0x27, 0x2d, 0x94, 0x29, 0x2f, 0x9c, 0x23, 0x29, 0x83,
+0x20, 0x26, 0x7a, 0x20, 0x26, 0x7c, 0x21, 0x27, 0x7e, 0x21, 0x28, 0x80,
+0x22, 0x29, 0x81, 0x23, 0x2a, 0x84, 0x24, 0x2b, 0x86, 0x25, 0x2c, 0x88,
+0x26, 0x2d, 0x8a, 0x27, 0x2d, 0x8c, 0x28, 0x2f, 0x8f, 0x2a, 0x30, 0x91,
+0xde, 0xdb, 0x1d, 0xdd, 0xd6, 0x1c, 0xde, 0xd8, 0x1f, 0xe3, 0xdd, 0x30,
+0xe4, 0xde, 0x31, 0xe4, 0xde, 0x31, 0xe1, 0xda, 0x26, 0x33, 0x3b, 0xa7,
+0x35, 0x3e, 0xaa, 0x37, 0x40, 0xad, 0x38, 0x42, 0xb0, 0x3b, 0x44, 0xb4,
+0x3d, 0x46, 0xb8, 0x3e, 0x48, 0xbc, 0x3f, 0x4a, 0xbf, 0x40, 0x4a, 0xc3,
+0x41, 0x4c, 0xc7, 0x42, 0x4d, 0xcc, 0x43, 0x4d, 0xd0, 0x43, 0x4f, 0xd5,
+0x43, 0x50, 0xda, 0xc2, 0xbf, 0x37, 0xdb, 0xd4, 0x1c, 0xe1, 0xdb, 0x28,
+0xd7, 0xd5, 0x1c, 0xe1, 0xdf, 0x2a, 0xd2, 0xcc, 0x1b, 0xc5, 0xc3, 0x37,
+0x52, 0x61, 0xc1, 0x35, 0x3f, 0x7a, 0x18, 0x1e, 0x47, 0x19, 0x20, 0x4b,
+0x1b, 0x22, 0x4f, 0x1d, 0x24, 0x54, 0x61, 0x64, 0x3d, 0xde, 0xd7, 0x1d,
+0xe0, 0xde, 0x25, 0xde, 0xd8, 0x1f, 0xd1, 0xcf, 0x1a, 0xcc, 0xc6, 0x19,
+0xd2, 0xcc, 0x1b, 0xab, 0xab, 0x36, 0x3c, 0x4a, 0xa3, 0x43, 0x52, 0xb4,
+0x48, 0x59, 0xc6, 0x4e, 0x61, 0xdb, 0x56, 0x6b, 0xf4, 0x61, 0x79, 0xfd,
+0x73, 0x8e, 0xfd, 0xb3, 0xd1, 0xfd, 0xf5, 0xfd, 0xfd, 0xbb, 0xdd, 0xfd,
+0xa3, 0xc3, 0xfd, 0x98, 0xb6, 0xfd, 0x87, 0xa2, 0xfd, 0x77, 0x8f, 0xfd,
+0x69, 0x7e, 0xfd, 0x5c, 0x6f, 0xe9, 0x5b, 0x6c, 0xd9, 0xe1, 0xda, 0x26,
+0xe3, 0xdd, 0x30, 0xcf, 0xc9, 0x1a, 0xde, 0xdb, 0x1d, 0xde, 0xdb, 0x1d,
+0xce, 0xcc, 0x19, 0xd1, 0xcc, 0x13, 0x2c, 0x35, 0x6d, 0x28, 0x30, 0x66,
+0x25, 0x2c, 0x5f, 0x22, 0x29, 0x59, 0x1f, 0x26, 0x54, 0x1d, 0x23, 0x4e,
+0x1b, 0x21, 0x4a, 0x19, 0x1f, 0x46, 0xde, 0xd7, 0x1d, 0xe3, 0xdd, 0x2e,
+0xe1, 0xda, 0x26, 0xe0, 0xd9, 0x23, 0xd7, 0xd5, 0x1c, 0x9f, 0x9c, 0x16,
+0x10, 0x15, 0x33, 0x12, 0x17, 0x36, 0x12, 0x17, 0x35, 0x11, 0x16, 0x33,
+0x13, 0x18, 0x36, 0x40, 0x42, 0x2a, 0xd9, 0xd2, 0x1c, 0xdd, 0xd6, 0x1c,
+0xe0, 0xda, 0x25, 0x64, 0x65, 0x38, 0x30, 0x38, 0x6b, 0x37, 0x3f, 0x7c,
+0x3d, 0x45, 0x8b, 0x41, 0x4b, 0x9a, 0x44, 0x4d, 0xa3, 0x44, 0x4d, 0xa8,
+0x40, 0x49, 0xa5, 0x62, 0x67, 0x7f, 0xdf, 0xd9, 0x22, 0xd1, 0xca, 0x1a,
+0xde, 0xdb, 0x1d, 0xdd, 0xd6, 0x1c, 0xde, 0xd8, 0x1f, 0xa9, 0xa7, 0x35,
+0x2e, 0x36, 0x8f, 0x2c, 0x33, 0x8d, 0x2c, 0x32, 0x8b, 0x2a, 0x30, 0x88,
+0x28, 0x2f, 0x87, 0x27, 0x2e, 0x85, 0x26, 0x2d, 0x82, 0xba, 0xb6, 0x22,
+0xd5, 0xcf, 0x1c, 0xde, 0xd7, 0x1d, 0xde, 0xdc, 0x1f, 0xd1, 0xcf, 0x1a,
+0xe1, 0xdb, 0x28, 0xa4, 0xa1, 0x2c, 0xb9, 0xb5, 0x1f, 0xdd, 0xd6, 0x1c,
+0xd1, 0xcf, 0x1a, 0xd2, 0xcc, 0x1b, 0xdb, 0xd4, 0x1c, 0xe1, 0xdb, 0x28,
+0xd7, 0xd5, 0x1c, 0xe1, 0xdf, 0x2a, 0xce, 0xc9, 0x12, 0x74, 0x74, 0x3d,
+0x19, 0x1e, 0x67, 0x19, 0x1d, 0x65, 0x18, 0x1d, 0x64, 0x18, 0x1d, 0x63,
+0x18, 0x1c, 0x62, 0x17, 0x1c, 0x61, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f,
+0x16, 0x1a, 0x5d, 0x5b, 0x5b, 0x3f, 0xd1, 0xcf, 0x1a, 0xcc, 0xc6, 0x19,
+0xd2, 0xcc, 0x1b, 0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d, 0x15, 0x19, 0x57,
+0x15, 0x18, 0x56, 0x14, 0x18, 0x55, 0x14, 0x18, 0x54, 0xce, 0xc8, 0x0f,
+0xe4, 0xde, 0x31, 0x88, 0x85, 0x28, 0x13, 0x17, 0x51, 0x13, 0x17, 0x50,
+0xe2, 0xe0, 0x2b, 0xe4, 0xde, 0x33, 0xe2, 0xe0, 0x2b, 0xd7, 0xd5, 0x1c,
+0xd5, 0xcf, 0x1c, 0x58, 0x59, 0x35, 0x12, 0x15, 0x4b, 0x12, 0x15, 0x4b,
+0x12, 0x15, 0x4a, 0x11, 0x15, 0x49, 0x11, 0x15, 0x49, 0x6f, 0x6d, 0x2b,
+0xce, 0xcc, 0x19, 0xdf, 0xd9, 0x22, 0xb6, 0xb1, 0x14, 0x11, 0x14, 0x45,
+0x10, 0x14, 0x45, 0x10, 0x14, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x10, 0x12, 0x42, 0x10, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0e, 0x11, 0x3f,
+0x0e, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x49, 0x29, 0x2f, 0x94, 0x2a, 0x32, 0x9c, 0x24, 0x2b, 0x82,
+0x21, 0x28, 0x7a, 0x22, 0x28, 0x7c, 0x22, 0x29, 0x7e, 0x23, 0x2a, 0x80,
+0x24, 0x2a, 0x81, 0x25, 0x2c, 0x84, 0x26, 0x2d, 0x86, 0x27, 0x2e, 0x88,
+0x28, 0x2f, 0x8a, 0x29, 0x30, 0x8c, 0x2a, 0x32, 0x8f, 0x2c, 0x33, 0x90,
+0xd1, 0xcf, 0x1a, 0xdc, 0xda, 0x1d, 0xd7, 0xd5, 0x1c, 0xe0, 0xda, 0x25,
+0xe6, 0xe4, 0x39, 0xdb, 0xd4, 0x1c, 0xe1, 0xda, 0x26, 0x34, 0x3c, 0xa6,
+0x34, 0x3e, 0xa9, 0x35, 0x3e, 0xad, 0x36, 0x40, 0xb0, 0x37, 0x40, 0xb3,
+0x37, 0x41, 0xb7, 0x38, 0x42, 0xbb, 0x38, 0x41, 0xbf, 0x38, 0x43, 0xc3,
+0x39, 0x44, 0xc7, 0x3a, 0x44, 0xcc, 0x3a, 0x45, 0xd0, 0x3b, 0x46, 0xd4,
+0x3b, 0x46, 0xd9, 0xc0, 0xbd, 0x37, 0xe4, 0xe2, 0x33, 0xce, 0xcc, 0x19,
+0xdf, 0xd8, 0x20, 0xdf, 0xd8, 0x20, 0xce, 0xcc, 0x19, 0x70, 0x70, 0x24,
+0x14, 0x1a, 0x3f, 0x15, 0x1b, 0x42, 0x16, 0x1d, 0x45, 0x18, 0x1e, 0x49,
+0x19, 0x20, 0x4d, 0x1b, 0x22, 0x51, 0x60, 0x62, 0x3b, 0xe1, 0xdb, 0x2a,
+0xdb, 0xd4, 0x1c, 0xd4, 0xcd, 0x1b, 0xc1, 0xbb, 0x16, 0xc9, 0xc7, 0x18,
+0xd2, 0xcc, 0x1b, 0xa9, 0xa8, 0x33, 0x35, 0x42, 0x98, 0x3b, 0x4a, 0xa7,
+0x40, 0x50, 0xb6, 0x46, 0x57, 0xc8, 0x4d, 0x60, 0xdd, 0x59, 0x6e, 0xf7,
+0x71, 0x88, 0xfd, 0xb6, 0xcf, 0xfd, 0xb8, 0xd2, 0xfd, 0x95, 0xb0, 0xfd,
+0x83, 0x9d, 0xfd, 0x7d, 0x96, 0xfd, 0x74, 0x8b, 0xfd, 0x69, 0x7e, 0xfd,
+0x5e, 0x71, 0xee, 0x56, 0x67, 0xd8, 0x6e, 0x79, 0x99, 0xdf, 0xd8, 0x20,
+0xdf, 0xd9, 0x22, 0xe1, 0xda, 0x26, 0xdf, 0xd9, 0x22, 0xe1, 0xda, 0x26,
+0xe1, 0xda, 0x26, 0x93, 0x93, 0x36, 0x2a, 0x33, 0x6b, 0x27, 0x2f, 0x63,
+0x23, 0x2b, 0x5d, 0x21, 0x28, 0x57, 0x1e, 0x25, 0x52, 0x1c, 0x23, 0x4e,
+0x1a, 0x20, 0x49, 0x18, 0x1e, 0x45, 0xdf, 0xd9, 0x22, 0xdf, 0xd9, 0x22,
+0xd7, 0xd5, 0x1c, 0xdb, 0xd4, 0x1c, 0xd7, 0xd5, 0x1c, 0xad, 0xac, 0x31,
+0x4c, 0x58, 0xaa, 0x4a, 0x55, 0xa6, 0x46, 0x51, 0x9e, 0x42, 0x4b, 0x93,
+0x3e, 0x48, 0x8b, 0xc0, 0xbc, 0x23, 0xe1, 0xda, 0x26, 0xde, 0xdc, 0x1f,
+0xab, 0xa9, 0x2d, 0x37, 0x3f, 0x7a, 0x34, 0x3c, 0x74, 0x35, 0x3c, 0x75,
+0x34, 0x3c, 0x75, 0x32, 0x39, 0x70, 0x31, 0x38, 0x6d, 0x33, 0x3a, 0x72,
+0x30, 0x37, 0x6c, 0x6c, 0x6f, 0x4b, 0xdb, 0xd4, 0x1c, 0xc1, 0xbb, 0x16,
+0xd1, 0xcf, 0x1a, 0xdc, 0xda, 0x1d, 0xd7, 0xd5, 0x1c, 0x85, 0x87, 0x53,
+0x36, 0x3e, 0x8f, 0x34, 0x3c, 0x8d, 0x32, 0x3a, 0x8b, 0x30, 0x37, 0x88,
+0x2f, 0x36, 0x87, 0x2d, 0x34, 0x85, 0x2b, 0x32, 0x82, 0xe1, 0xdf, 0x2a,
+0xdf, 0xd9, 0x22, 0xd5, 0xcf, 0x1c, 0xde, 0xd7, 0x1d, 0xde, 0xdc, 0x1f,
+0xcb, 0xc4, 0x18, 0xd1, 0xcf, 0x1a, 0xe1, 0xda, 0x26, 0xe1, 0xda, 0x26,
+0xdf, 0xd8, 0x20, 0xde, 0xd7, 0x1d, 0xe4, 0xe2, 0x33, 0xcf, 0xc9, 0x12,
+0xa3, 0xa0, 0x28, 0x60, 0x61, 0x49, 0x1d, 0x22, 0x69, 0x1c, 0x21, 0x68,
+0x1c, 0x20, 0x67, 0x1b, 0x1f, 0x65, 0x1b, 0x1f, 0x64, 0x1a, 0x1e, 0x63,
+0x19, 0x1e, 0x62, 0x19, 0x1d, 0x61, 0x18, 0x1d, 0x60, 0x18, 0x1c, 0x5e,
+0x17, 0x1c, 0x5d, 0x5c, 0x5c, 0x3f, 0xc1, 0xbb, 0x16, 0xc9, 0xc7, 0x18,
+0xd2, 0xcc, 0x1b, 0xd1, 0xcf, 0x1a, 0xdc, 0xda, 0x1d, 0x15, 0x19, 0x57,
+0x15, 0x19, 0x56, 0x14, 0x18, 0x55, 0x71, 0x70, 0x31, 0xdf, 0xd8, 0x20,
+0xdc, 0xda, 0x1d, 0x2a, 0x2c, 0x49, 0x13, 0x17, 0x51, 0x13, 0x16, 0x50,
+0xe8, 0xe6, 0x3f, 0xe0, 0xde, 0x25, 0xc6, 0xc0, 0x17, 0xe3, 0xdd, 0x2e,
+0xdc, 0xda, 0x1d, 0x58, 0x58, 0x35, 0x11, 0x15, 0x4b, 0x11, 0x15, 0x4b,
+0x11, 0x15, 0x4a, 0x11, 0x14, 0x49, 0x28, 0x2a, 0x41, 0xcd, 0xc7, 0x0e,
+0xe1, 0xda, 0x26, 0xe1, 0xdf, 0x2a, 0x3e, 0x3f, 0x37, 0x10, 0x13, 0x45,
+0x10, 0x13, 0x45, 0x10, 0x13, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x0f, 0x12, 0x42, 0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x11, 0x3f,
+0x0f, 0x11, 0x3e, 0x0e, 0x11, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x18, 0x49, 0x29, 0x32, 0x94, 0x2c, 0x34, 0x99, 0x26, 0x2c, 0x82,
+0x23, 0x29, 0x7a, 0x24, 0x29, 0x7c, 0x25, 0x2a, 0x7e, 0x26, 0x2c, 0x80,
+0x27, 0x2d, 0x81, 0x27, 0x2e, 0x83, 0x28, 0x2e, 0x86, 0x28, 0x2f, 0x88,
+0x28, 0x30, 0x8a, 0x29, 0x30, 0x8c, 0x2a, 0x31, 0x8e, 0x2b, 0x32, 0x90,
+0xd0, 0xcb, 0x16, 0xd1, 0xcf, 0x1a, 0xdb, 0xd4, 0x1c, 0xe4, 0xde, 0x31,
+0xdf, 0xd8, 0x20, 0xe2, 0xe0, 0x2b, 0xe0, 0xde, 0x25, 0x43, 0x49, 0x94,
+0x30, 0x39, 0xa9, 0x31, 0x39, 0xad, 0x31, 0x3a, 0xb0, 0x32, 0x3b, 0xb3,
+0x32, 0x3b, 0xb6, 0x32, 0x3c, 0xba, 0x33, 0x3d, 0xbe, 0x35, 0x3e, 0xc2,
+0x38, 0x43, 0xc7, 0x3b, 0x46, 0xcb, 0x3f, 0x4b, 0xcf, 0x45, 0x50, 0xd4,
+0x4a, 0x56, 0xd8, 0xde, 0xd7, 0x1d, 0xe4, 0xe2, 0x33, 0xe1, 0xda, 0x26,
+0xd4, 0xcd, 0x1b, 0xcc, 0xc6, 0x19, 0xd2, 0xcc, 0x1b, 0x58, 0x59, 0x29,
+0x13, 0x19, 0x3e, 0x14, 0x1a, 0x41, 0x15, 0x1c, 0x44, 0x16, 0x1d, 0x47,
+0x18, 0x1f, 0x4b, 0x19, 0x20, 0x4e, 0x47, 0x4b, 0x42, 0xe4, 0xe2, 0x35,
+0xe0, 0xde, 0x25, 0xc9, 0xc7, 0x18, 0xd1, 0xcf, 0x1a, 0xce, 0xc7, 0x19,
+0xc3, 0xbd, 0x16, 0xbc, 0xb9, 0x22, 0x30, 0x3c, 0x8d, 0x34, 0x42, 0x9a,
+0x39, 0x47, 0xa7, 0x40, 0x50, 0xb8, 0x48, 0x59, 0xca, 0x50, 0x63, 0xdd,
+0x77, 0x8b, 0xfd, 0xb0, 0xc6, 0xfd, 0x94, 0xaa, 0xfd, 0x7c, 0x93, 0xfd,
+0x70, 0x86, 0xfd, 0x69, 0x7f, 0xfd, 0x64, 0x78, 0xfb, 0x5d, 0x70, 0xea,
+0x56, 0x67, 0xd8, 0x4e, 0x5e, 0xc6, 0x9e, 0xa1, 0x54, 0xe2, 0xe0, 0x2b,
+0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xde, 0xdc, 0x1f, 0xe3, 0xdd, 0x30,
+0xe6, 0xdf, 0x37, 0x52, 0x57, 0x55, 0x26, 0x2f, 0x65, 0x24, 0x2c, 0x5f,
+0x22, 0x29, 0x5a, 0x1f, 0x26, 0x55, 0x1e, 0x24, 0x50, 0x1b, 0x22, 0x4c,
+0x1a, 0x20, 0x48, 0x18, 0x1e, 0x44, 0xa0, 0x9e, 0x1a, 0xce, 0xc7, 0x19,
+0xd9, 0xd2, 0x1c, 0xd7, 0xd5, 0x1c, 0xde, 0xd7, 0x1d, 0xd3, 0xce, 0x16,
+0x4d, 0x58, 0xae, 0x51, 0x5d, 0xb8, 0x4e, 0x59, 0xb3, 0x50, 0x5b, 0xba,
+0x92, 0x96, 0x6c, 0xe1, 0xda, 0x26, 0xdb, 0xd4, 0x1c, 0xd4, 0xcf, 0x1b,
+0x5c, 0x64, 0xa0, 0x49, 0x53, 0xac, 0x46, 0x52, 0xa9, 0x45, 0x4f, 0xa3,
+0x43, 0x4b, 0x9c, 0x40, 0x4a, 0x99, 0x40, 0x48, 0x96, 0x3e, 0x47, 0x93,
+0x3c, 0x44, 0x8d, 0xad, 0xab, 0x34, 0xd1, 0xca, 0x1a, 0xd1, 0xca, 0x1a,
+0xd7, 0xd5, 0x1c, 0xd1, 0xcf, 0x1a, 0xdb, 0xd4, 0x1c, 0x70, 0x73, 0x57,
+0x36, 0x3d, 0x80, 0x35, 0x3c, 0x7f, 0x34, 0x3c, 0x7e, 0x36, 0x3d, 0x81,
+0x36, 0x3e, 0x87, 0x34, 0x3a, 0x84, 0x59, 0x5d, 0x66, 0xdf, 0xd9, 0x22,
+0xdd, 0xd6, 0x1c, 0xdb, 0xd4, 0x1c, 0xdf, 0xd9, 0x22, 0xd7, 0xd5, 0x1c,
+0xbb, 0xb7, 0x20, 0x67, 0x69, 0x51, 0x66, 0x67, 0x4f, 0x65, 0x67, 0x4e,
+0x65, 0x66, 0x4d, 0x38, 0x3c, 0x63, 0x22, 0x28, 0x6f, 0x21, 0x27, 0x6d,
+0x20, 0x26, 0x6c, 0x20, 0x25, 0x6a, 0x1f, 0x25, 0x69, 0x1f, 0x24, 0x68,
+0x1e, 0x23, 0x67, 0x1d, 0x22, 0x65, 0x1d, 0x21, 0x64, 0x1c, 0x21, 0x63,
+0x1b, 0x20, 0x62, 0x1b, 0x20, 0x61, 0x1a, 0x1f, 0x5f, 0x19, 0x1e, 0x5e,
+0x19, 0x1d, 0x5d, 0x5d, 0x5d, 0x3f, 0xd1, 0xcf, 0x1a, 0xce, 0xc7, 0x19,
+0xc3, 0xbd, 0x16, 0xcf, 0xc9, 0x1a, 0xe1, 0xdb, 0x2a, 0x2c, 0x2f, 0x4e,
+0x16, 0x1a, 0x56, 0x2b, 0x2e, 0x4c, 0xe2, 0xdc, 0x2d, 0xdf, 0xd9, 0x22,
+0x88, 0x86, 0x28, 0x14, 0x18, 0x52, 0x14, 0x18, 0x51, 0x14, 0x17, 0x50,
+0xd4, 0xcd, 0x1b, 0xde, 0xd8, 0x1f, 0xe3, 0xdd, 0x2e, 0xe1, 0xdf, 0x2a,
+0xd1, 0xca, 0x1a, 0x58, 0x59, 0x35, 0x12, 0x15, 0x4b, 0x12, 0x15, 0x4a,
+0x12, 0x15, 0x4a, 0x11, 0x15, 0x49, 0x86, 0x84, 0x24, 0xe3, 0xdd, 0x30,
+0xe6, 0xdf, 0x37, 0x86, 0x84, 0x23, 0x10, 0x13, 0x45, 0x10, 0x13, 0x45,
+0x10, 0x13, 0x45, 0x10, 0x13, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x44,
+0x0f, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x40, 0x0e, 0x11, 0x3f, 0x0e, 0x10, 0x3f,
+0x0e, 0x10, 0x3e, 0x0e, 0x10, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x19, 0x49, 0x2b, 0x32, 0x94, 0x2c, 0x35, 0x99, 0x26, 0x2c, 0x82,
+0x22, 0x29, 0x7a, 0x23, 0x29, 0x7c, 0x24, 0x2a, 0x7e, 0x24, 0x2a, 0x80,
+0x25, 0x2b, 0x81, 0x25, 0x2c, 0x83, 0x26, 0x2c, 0x85, 0x26, 0x2d, 0x88,
+0x27, 0x2d, 0x8a, 0x27, 0x2e, 0x8c, 0x28, 0x2f, 0x8e, 0x28, 0x2f, 0x90,
+0xa7, 0xa4, 0x35, 0xcf, 0xc9, 0x1a, 0xe1, 0xdf, 0x2a, 0xe2, 0xe0, 0x2d,
+0xe0, 0xd9, 0x23, 0xdb, 0xd4, 0x1c, 0xe2, 0xe0, 0x2d, 0x6a, 0x6d, 0x70,
+0x2c, 0x35, 0xa8, 0x2e, 0x37, 0xac, 0x31, 0x39, 0xaf, 0x33, 0x3c, 0xb3,
+0x35, 0x3e, 0xb6, 0x38, 0x42, 0xba, 0x3c, 0x47, 0xbd, 0x40, 0x4a, 0xc2,
+0x44, 0x4f, 0xc5, 0x4a, 0x56, 0xc9, 0x50, 0x5d, 0xce, 0x52, 0x5d, 0xc5,
+0x69, 0x70, 0x7f, 0xe1, 0xda, 0x26, 0xde, 0xdb, 0x1d, 0xe1, 0xda, 0x26,
+0xd9, 0xd2, 0x1c, 0xdc, 0xda, 0x1d, 0xd5, 0xcf, 0x1c, 0x11, 0x16, 0x39,
+0x12, 0x18, 0x3c, 0x13, 0x19, 0x3f, 0x14, 0x1a, 0x42, 0x15, 0x1c, 0x45,
+0x16, 0x1d, 0x48, 0x17, 0x1e, 0x4c, 0x19, 0x21, 0x50, 0xe1, 0xdf, 0x2a,
+0xde, 0xd8, 0x1f, 0xd9, 0xd2, 0x1c, 0xe0, 0xde, 0x25, 0xd5, 0xcf, 0x1c,
+0xc7, 0xc1, 0x18, 0xdf, 0xd8, 0x20, 0x2b, 0x37, 0x84, 0x2e, 0x3b, 0x8e,
+0x34, 0x41, 0x9a, 0x3b, 0x49, 0xa9, 0x42, 0x52, 0xb8, 0x55, 0x66, 0xd3,
+0x79, 0x8a, 0xfd, 0x90, 0xa2, 0xfd, 0x7a, 0x8d, 0xfd, 0x6a, 0x7d, 0xfb,
+0x60, 0x73, 0xf0, 0x5b, 0x6d, 0xe6, 0x58, 0x69, 0xdd, 0x53, 0x64, 0xd1,
+0x4d, 0x5d, 0xc3, 0x46, 0x55, 0xb4, 0xe5, 0xdf, 0x34, 0xd7, 0xd0, 0x1c,
+0xd2, 0xcc, 0x1b, 0xe3, 0xe1, 0x32, 0xe4, 0xe2, 0x33, 0xe5, 0xdf, 0x36,
+0xbb, 0xb7, 0x1d, 0x25, 0x2e, 0x66, 0x23, 0x2b, 0x60, 0x21, 0x29, 0x5b,
+0x1f, 0x26, 0x56, 0x1d, 0x24, 0x52, 0x3c, 0x49, 0x8a, 0x3f, 0x4b, 0x8e,
+0x32, 0x3c, 0x73, 0x27, 0x2f, 0x5e, 0xa0, 0x9e, 0x1a, 0xd7, 0xd5, 0x1c,
+0xd4, 0xcd, 0x1b, 0xd9, 0xd2, 0x1c, 0xdc, 0xda, 0x1d, 0xde, 0xdb, 0x1d,
+0x53, 0x60, 0xbe, 0x50, 0x5c, 0xba, 0x52, 0x5d, 0xbd, 0x61, 0x6b, 0xaa,
+0xd5, 0xcf, 0x1c, 0xdc, 0xda, 0x1d, 0xdb, 0xd4, 0x1c, 0x81, 0x86, 0x82,
+0x4d, 0x59, 0xbe, 0x4b, 0x55, 0xba, 0x49, 0x53, 0xb7, 0x47, 0x51, 0xb4,
+0x44, 0x4e, 0xb0, 0x44, 0x4c, 0xad, 0x42, 0x4b, 0xa9, 0x41, 0x4a, 0xa6,
+0x40, 0x4a, 0xa4, 0xc0, 0xbd, 0x29, 0xe7, 0xe1, 0x3c, 0xe4, 0xde, 0x31,
+0xdb, 0xd4, 0x1c, 0xcf, 0xc9, 0x1a, 0xe1, 0xdf, 0x2a, 0x4b, 0x52, 0x81,
+0x38, 0x41, 0x8e, 0x37, 0x40, 0x8d, 0x36, 0x3e, 0x8a, 0x36, 0x3d, 0x88,
+0x35, 0x3c, 0x86, 0x34, 0x3a, 0x84, 0x6e, 0x71, 0x59, 0xe0, 0xd9, 0x23,
+0xe1, 0xdb, 0x2a, 0xd7, 0xd5, 0x1c, 0xd7, 0xd5, 0x1c, 0xde, 0xdc, 0x1f,
+0xa8, 0xa6, 0x2c, 0x2c, 0x32, 0x76, 0x2b, 0x31, 0x74, 0x29, 0x30, 0x72,
+0x28, 0x2f, 0x71, 0x27, 0x2d, 0x6f, 0x26, 0x2c, 0x6f, 0x25, 0x2a, 0x6d,
+0x24, 0x29, 0x6c, 0x23, 0x28, 0x6a, 0x22, 0x27, 0x69, 0x21, 0x26, 0x68,
+0x20, 0x25, 0x66, 0x1f, 0x25, 0x65, 0x1e, 0x24, 0x64, 0x1d, 0x23, 0x63,
+0x1d, 0x22, 0x62, 0x1d, 0x21, 0x60, 0x1c, 0x21, 0x5f, 0x1b, 0x20, 0x5e,
+0x1b, 0x20, 0x5d, 0x5e, 0x5f, 0x3f, 0xe0, 0xde, 0x25, 0xd5, 0xcf, 0x1c,
+0xc7, 0xc1, 0x18, 0xdf, 0xd8, 0x20, 0xdb, 0xd4, 0x1c, 0x5c, 0x5d, 0x3c,
+0x17, 0x1c, 0x56, 0x89, 0x87, 0x29, 0xdf, 0xd9, 0x22, 0xde, 0xdc, 0x1f,
+0x2c, 0x2f, 0x49, 0x16, 0x1a, 0x52, 0x15, 0x19, 0x51, 0x15, 0x19, 0x50,
+0xa0, 0x9c, 0x1f, 0xe2, 0xe0, 0x2b, 0xdf, 0xd9, 0x22, 0xd4, 0xcd, 0x1b,
+0xdb, 0xd4, 0x1c, 0x9f, 0x9c, 0x1e, 0x13, 0x16, 0x4b, 0x12, 0x16, 0x4a,
+0x12, 0x16, 0x4a, 0x40, 0x41, 0x3a, 0xe4, 0xe2, 0x33, 0xe5, 0xdf, 0x36,
+0xb6, 0xb1, 0x15, 0x11, 0x14, 0x47, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45,
+0x10, 0x14, 0x45, 0x10, 0x14, 0x45, 0x10, 0x13, 0x44, 0x10, 0x13, 0x43,
+0x10, 0x12, 0x42, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x41, 0x0f, 0x12, 0x40,
+0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x11, 0x3f,
+0x0f, 0x11, 0x3e, 0x0e, 0x10, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x49, 0x29, 0x31, 0x93, 0x2a, 0x32, 0x99, 0x24, 0x2b, 0x82,
+0x21, 0x28, 0x7a, 0x21, 0x28, 0x7c, 0x22, 0x29, 0x7e, 0x22, 0x29, 0x80,
+0x23, 0x2a, 0x81, 0x23, 0x2a, 0x83, 0x23, 0x2b, 0x85, 0x24, 0x2b, 0x87,
+0x24, 0x2c, 0x8a, 0x25, 0x2c, 0x8b, 0x25, 0x2d, 0x8e, 0x26, 0x2d, 0x90,
+0x7b, 0x7c, 0x54, 0xe6, 0xe0, 0x39, 0xe6, 0xdf, 0x37, 0xd7, 0xd0, 0x1c,
+0xcb, 0xc4, 0x18, 0xe0, 0xda, 0x25, 0xd5, 0xcf, 0x1c, 0x94, 0x94, 0x4d,
+0x33, 0x3b, 0xa8, 0x35, 0x3f, 0xac, 0x38, 0x41, 0xaf, 0x3b, 0x46, 0xb2,
+0x3f, 0x49, 0xb6, 0x43, 0x4d, 0xb9, 0x48, 0x54, 0xbd, 0x4e, 0x59, 0xbf,
+0x47, 0x52, 0xa7, 0x3b, 0x43, 0x85, 0x28, 0x2e, 0x5b, 0x0c, 0x10, 0x2a,
+0x54, 0x55, 0x1f, 0xde, 0xd7, 0x1d, 0xdc, 0xda, 0x1d, 0xcc, 0xc6, 0x19,
+0xdd, 0xd6, 0x1c, 0xd7, 0xd5, 0x1c, 0xcd, 0xc8, 0x0c, 0x11, 0x16, 0x38,
+0x11, 0x17, 0x3b, 0x12, 0x18, 0x3d, 0x13, 0x19, 0x40, 0x1b, 0x22, 0x4f,
+0x39, 0x45, 0x89, 0x27, 0x31, 0x66, 0x17, 0x1f, 0x4d, 0xb8, 0xb4, 0x17,
+0xd2, 0xcc, 0x1b, 0xe0, 0xda, 0x25, 0xe2, 0xe0, 0x2d, 0xd9, 0xd2, 0x1c,
+0xe1, 0xdf, 0x2a, 0xd7, 0xd0, 0x1c, 0x50, 0x57, 0x61, 0x2b, 0x37, 0x85,
+0x30, 0x3d, 0x8f, 0x36, 0x44, 0x9c, 0x40, 0x4f, 0xac, 0x59, 0x68, 0xca,
+0x78, 0x87, 0xee, 0x79, 0x89, 0xf4, 0x68, 0x79, 0xe6, 0x5c, 0x6d, 0xdb,
+0x55, 0x66, 0xd3, 0x50, 0x60, 0xcb, 0x4e, 0x5d, 0xc4, 0x4b, 0x5a, 0xbc,
+0x45, 0x53, 0xb1, 0x89, 0x8d, 0x5e, 0xe2, 0xdc, 0x2d, 0xe2, 0xe0, 0x2b,
+0xe2, 0xe0, 0x2b, 0xe0, 0xde, 0x25, 0xdf, 0xd8, 0x20, 0xe2, 0xe0, 0x2d,
+0x4d, 0x52, 0x50, 0x21, 0x29, 0x60, 0x20, 0x28, 0x5b, 0x1e, 0x26, 0x57,
+0x1d, 0x24, 0x53, 0x1b, 0x22, 0x4e, 0x28, 0x31, 0x63, 0x46, 0x53, 0x9f,
+0x57, 0x67, 0xcf, 0x57, 0x66, 0xdf, 0xb6, 0xb7, 0x4f, 0xdb, 0xd4, 0x1c,
+0xe2, 0xe0, 0x2d, 0xde, 0xdc, 0x1f, 0xd7, 0xd5, 0x1c, 0xc1, 0xbf, 0x16,
+0x59, 0x66, 0xd4, 0x57, 0x66, 0xd2, 0x55, 0x62, 0xce, 0xc5, 0xc2, 0x32,
+0xd9, 0xd2, 0x1c, 0xde, 0xd8, 0x1f, 0xa2, 0xa4, 0x5b, 0x4f, 0x5b, 0xc2,
+0x4c, 0x57, 0xbe, 0x49, 0x55, 0xba, 0x48, 0x52, 0xb7, 0x45, 0x4f, 0xb3,
+0x44, 0x4e, 0xb0, 0x42, 0x4c, 0xad, 0x3f, 0x4a, 0xa9, 0x3f, 0x47, 0xa6,
+0x3d, 0x46, 0xa3, 0xe4, 0xe2, 0x33, 0xe6, 0xdf, 0x37, 0xe1, 0xdf, 0x2a,
+0xd7, 0xd5, 0x1c, 0xe6, 0xe0, 0x39, 0xe6, 0xdf, 0x37, 0x36, 0x3d, 0x90,
+0x35, 0x3c, 0x8e, 0x34, 0x3b, 0x8c, 0x33, 0x3a, 0x8a, 0x32, 0x3a, 0x87,
+0x31, 0x39, 0x86, 0x31, 0x38, 0x84, 0x6c, 0x6f, 0x59, 0xe4, 0xde, 0x31,
+0xe2, 0xe0, 0x2b, 0xc7, 0xc5, 0x18, 0xcc, 0xc6, 0x19, 0xdf, 0xd9, 0x22,
+0xa8, 0xa5, 0x2c, 0x2b, 0x32, 0x75, 0x2a, 0x31, 0x74, 0x2a, 0x30, 0x72,
+0x29, 0x2f, 0x70, 0x29, 0x2f, 0x6f, 0x28, 0x2e, 0x6e, 0x27, 0x2d, 0x6d,
+0x27, 0x2d, 0x6c, 0x26, 0x2c, 0x6a, 0x26, 0x2b, 0x69, 0x25, 0x29, 0x68,
+0x23, 0x29, 0x66, 0x22, 0x27, 0x65, 0x22, 0x27, 0x64, 0x20, 0x25, 0x63,
+0x20, 0x24, 0x62, 0x1f, 0x23, 0x60, 0x1e, 0x23, 0x5f, 0x1d, 0x22, 0x5e,
+0x1d, 0x21, 0x5d, 0x5f, 0x60, 0x3f, 0xe2, 0xe0, 0x2d, 0xd9, 0xd2, 0x1c,
+0xe1, 0xdf, 0x2a, 0xd7, 0xd0, 0x1c, 0xd9, 0xd2, 0x1c, 0x5d, 0x5d, 0x3b,
+0x2f, 0x32, 0x4d, 0xdd, 0xd6, 0x1c, 0xd1, 0xca, 0x1a, 0x89, 0x87, 0x28,
+0x17, 0x1b, 0x52, 0x16, 0x1a, 0x51, 0x16, 0x1a, 0x51, 0x16, 0x1a, 0x50,
+0xa0, 0x9d, 0x1f, 0xe1, 0xdf, 0x2a, 0xd7, 0xd0, 0x1c, 0xd4, 0xcd, 0x1b,
+0xd7, 0xd5, 0x1c, 0xa0, 0x9c, 0x1e, 0x14, 0x17, 0x4b, 0x13, 0x17, 0x4a,
+0x13, 0x16, 0x4a, 0xce, 0xc8, 0x0e, 0xdf, 0xd8, 0x20, 0xe2, 0xe0, 0x2d,
+0x29, 0x2b, 0x3f, 0x12, 0x15, 0x47, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45,
+0x11, 0x14, 0x45, 0x11, 0x14, 0x45, 0x11, 0x14, 0x44, 0x10, 0x13, 0x43,
+0x10, 0x12, 0x42, 0x10, 0x12, 0x41, 0x10, 0x12, 0x41, 0x10, 0x12, 0x40,
+0x10, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x11, 0x3f,
+0x0f, 0x11, 0x3e, 0x0f, 0x11, 0x3e, 0x0e, 0x0f, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x17, 0x48, 0x28, 0x2e, 0x93, 0x2a, 0x31, 0x99, 0x24, 0x2a, 0x82,
+0x20, 0x26, 0x79, 0x20, 0x26, 0x7b, 0x21, 0x26, 0x7d, 0x21, 0x27, 0x7f,
+0x21, 0x28, 0x81, 0x22, 0x28, 0x83, 0x22, 0x29, 0x85, 0x23, 0x29, 0x87,
+0x23, 0x2a, 0x89, 0x24, 0x2b, 0x8b, 0x25, 0x2c, 0x8d, 0x27, 0x2e, 0x90,
+0x52, 0x56, 0x73, 0xe6, 0xdf, 0x37, 0xe1, 0xdb, 0x28, 0xde, 0xd7, 0x1d,
+0xc9, 0xc7, 0x18, 0xdf, 0xd9, 0x22, 0xe2, 0xdc, 0x2d, 0xd2, 0xcc, 0x18,
+0x3b, 0x43, 0xa8, 0x3d, 0x46, 0xab, 0x41, 0x4b, 0xae, 0x46, 0x50, 0xb1,
+0x46, 0x50, 0xa9, 0x3f, 0x49, 0x93, 0x34, 0x3c, 0x76, 0x23, 0x29, 0x51,
+0x0b, 0x0f, 0x28, 0x0b, 0x0e, 0x27, 0x0b, 0x0f, 0x29, 0x0c, 0x10, 0x2a,
+0x84, 0x82, 0x17, 0xde, 0xdb, 0x1d, 0xc7, 0xc5, 0x18, 0xde, 0xd7, 0x1d,
+0xe1, 0xda, 0x26, 0xdb, 0xd4, 0x1c, 0x9f, 0x9c, 0x18, 0x2f, 0x38, 0x6f,
+0x44, 0x50, 0x9d, 0x53, 0x63, 0xcc, 0x55, 0x65, 0xda, 0x4e, 0x5e, 0xbe,
+0x3e, 0x4b, 0x95, 0x26, 0x2f, 0x64, 0x16, 0x1d, 0x4b, 0x72, 0x74, 0x2e,
+0xe0, 0xde, 0x25, 0xdf, 0xd8, 0x20, 0xce, 0xc7, 0x19, 0xdf, 0xd8, 0x20,
+0xe1, 0xda, 0x26, 0xdb, 0xd4, 0x1c, 0x7a, 0x7d, 0x44, 0x29, 0x34, 0x7d,
+0x2d, 0x39, 0x86, 0x31, 0x3d, 0x8e, 0x40, 0x4d, 0xa2, 0x55, 0x62, 0xbc,
+0x70, 0x7e, 0xdb, 0x66, 0x74, 0xd3, 0x5a, 0x69, 0xca, 0x51, 0x60, 0xc2,
+0x4c, 0x5b, 0xbc, 0x46, 0x55, 0xb4, 0x43, 0x52, 0xae, 0x40, 0x4e, 0xa7,
+0x4e, 0x59, 0x8e, 0xe3, 0xdd, 0x30, 0xdf, 0xd8, 0x20, 0xe0, 0xd9, 0x23,
+0xdf, 0xd9, 0x22, 0xe3, 0xdd, 0x2e, 0xe1, 0xdb, 0x2a, 0x8e, 0x8e, 0x31,
+0x20, 0x28, 0x60, 0x1e, 0x26, 0x5a, 0x1d, 0x25, 0x57, 0x1c, 0x23, 0x53,
+0x1a, 0x21, 0x4f, 0x19, 0x20, 0x4b, 0x18, 0x1e, 0x48, 0x2e, 0x38, 0x6e,
+0x4e, 0x5c, 0xb4, 0x5b, 0x6a, 0xde, 0x94, 0x99, 0x7f, 0xde, 0xdb, 0x1d,
+0xde, 0xd7, 0x1d, 0xd9, 0xd2, 0x1c, 0xde, 0xd8, 0x1f, 0xdb, 0xd4, 0x1c,
+0x52, 0x60, 0xe0, 0x57, 0x63, 0xdb, 0x95, 0x99, 0x7a, 0xcf, 0xc9, 0x1a,
+0xd7, 0xd5, 0x1c, 0xc4, 0xc1, 0x32, 0x4f, 0x5a, 0xc5, 0x4d, 0x58, 0xc1,
+0x4a, 0x55, 0xbd, 0x48, 0x53, 0xb9, 0x47, 0x52, 0xb6, 0x46, 0x4f, 0xb2,
+0x43, 0x4d, 0xaf, 0x41, 0x4b, 0xac, 0x40, 0x49, 0xa8, 0x3e, 0x47, 0xa5,
+0x61, 0x66, 0x7f, 0xe0, 0xde, 0x25, 0xdf, 0xd9, 0x22, 0xe2, 0xe0, 0x2d,
+0xe4, 0xe2, 0x35, 0xe6, 0xdf, 0x37, 0xaa, 0xa8, 0x35, 0x32, 0x3b, 0x90,
+0x32, 0x39, 0x8e, 0x31, 0x38, 0x8c, 0x30, 0x37, 0x89, 0x30, 0x36, 0x87,
+0x2f, 0x36, 0x86, 0x2e, 0x35, 0x83, 0x6a, 0x6d, 0x58, 0xde, 0xd8, 0x1f,
+0xdf, 0xd9, 0x22, 0xe1, 0xdf, 0x2a, 0xd5, 0xcf, 0x1c, 0xcb, 0xc4, 0x18,
+0xbb, 0xb7, 0x20, 0x28, 0x2f, 0x75, 0x28, 0x2f, 0x73, 0x28, 0x2f, 0x72,
+0x28, 0x2e, 0x70, 0x28, 0x2d, 0x6f, 0x26, 0x2c, 0x6e, 0x26, 0x2c, 0x6d,
+0x25, 0x2b, 0x6b, 0x25, 0x2a, 0x6a, 0x25, 0x2a, 0x69, 0x24, 0x29, 0x67,
+0x23, 0x29, 0x66, 0x23, 0x28, 0x65, 0x23, 0x28, 0x64, 0x22, 0x27, 0x63,
+0x21, 0x26, 0x61, 0x21, 0x26, 0x60, 0x21, 0x25, 0x5f, 0x20, 0x24, 0x5e,
+0x1f, 0x23, 0x5d, 0x1e, 0x23, 0x5c, 0xce, 0xc7, 0x19, 0xdf, 0xd8, 0x20,
+0xe1, 0xda, 0x26, 0xdb, 0xd4, 0x1c, 0xdf, 0xd9, 0x22, 0x5e, 0x5f, 0x3b,
+0x8a, 0x89, 0x2a, 0xd7, 0xd0, 0x1c, 0xce, 0xc9, 0x0f, 0x2e, 0x31, 0x4a,
+0x18, 0x1c, 0x52, 0x17, 0x1c, 0x51, 0x17, 0x1c, 0x51, 0x16, 0x1b, 0x50,
+0xa0, 0x9d, 0x1f, 0xe0, 0xd9, 0x23, 0xdc, 0xda, 0x1d, 0xd2, 0xcc, 0x1b,
+0xe1, 0xda, 0x26, 0xa0, 0x9d, 0x1e, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a,
+0xa0, 0x9c, 0x1d, 0xe3, 0xdd, 0x2e, 0xe1, 0xdb, 0x2a, 0x59, 0x59, 0x32,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x14, 0x45, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44, 0x11, 0x14, 0x43,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x12, 0x40,
+0x10, 0x12, 0x40, 0x10, 0x12, 0x3f, 0x10, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x11, 0x3e, 0x0f, 0x11, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x48, 0x27, 0x2d, 0x93, 0x29, 0x2f, 0x99, 0x23, 0x28, 0x82,
+0x1f, 0x24, 0x79, 0x1f, 0x25, 0x7b, 0x20, 0x25, 0x7d, 0x21, 0x26, 0x7f,
+0x21, 0x28, 0x81, 0x22, 0x29, 0x82, 0x23, 0x2a, 0x84, 0x25, 0x2c, 0x87,
+0x26, 0x2d, 0x89, 0x28, 0x2e, 0x8a, 0x28, 0x30, 0x8d, 0x2a, 0x32, 0x8f,
+0x2d, 0x34, 0x91, 0xbc, 0xb9, 0x26, 0xe0, 0xda, 0x25, 0xc0, 0xba, 0x15,
+0xe2, 0xdc, 0x2b, 0xe2, 0xdc, 0x2b, 0xe1, 0xda, 0x26, 0xdf, 0xd8, 0x20,
+0x8b, 0x8d, 0x60, 0x40, 0x4a, 0x99, 0x37, 0x40, 0x81, 0x30, 0x37, 0x6b,
+0x21, 0x27, 0x4e, 0x0b, 0x0f, 0x27, 0x09, 0x0d, 0x23, 0x09, 0x0d, 0x24,
+0x0a, 0x0e, 0x26, 0x0a, 0x0e, 0x27, 0x0b, 0x0f, 0x28, 0x0b, 0x0f, 0x29,
+0x9d, 0x9a, 0x13, 0xce, 0xcc, 0x19, 0xdf, 0xd8, 0x20, 0xdc, 0xda, 0x1d,
+0xdf, 0xd8, 0x20, 0xde, 0xdb, 0x1d, 0x93, 0x98, 0x7e, 0x4a, 0x59, 0xdd,
+0x4a, 0x59, 0xdc, 0x4f, 0x5f, 0xdb, 0x54, 0x65, 0xda, 0x4c, 0x5b, 0xba,
+0x31, 0x3b, 0x77, 0x14, 0x1b, 0x45, 0x15, 0x1c, 0x49, 0x2c, 0x32, 0x44,
+0xdd, 0xd6, 0x1c, 0xdb, 0xd4, 0x1c, 0xdc, 0xda, 0x1d, 0xc7, 0xc5, 0x18,
+0xc3, 0xbd, 0x16, 0xe1, 0xdb, 0x28, 0xcf, 0xca, 0x12, 0x26, 0x30, 0x75,
+0x29, 0x34, 0x7c, 0x31, 0x3d, 0x88, 0x3e, 0x4a, 0x99, 0x50, 0x5c, 0xae,
+0x5b, 0x68, 0xbc, 0x54, 0x61, 0xb7, 0x4b, 0x59, 0xb0, 0x45, 0x53, 0xab,
+0x41, 0x4e, 0xa6, 0x3c, 0x49, 0x9f, 0x3a, 0x47, 0x9c, 0x38, 0x44, 0x96,
+0xab, 0xaa, 0x34, 0xdf, 0xd8, 0x20, 0xd7, 0xd5, 0x1c, 0xd7, 0xd5, 0x1c,
+0xe0, 0xde, 0x25, 0xe4, 0xe2, 0x33, 0xcf, 0xca, 0x11, 0x20, 0x29, 0x61,
+0x1e, 0x26, 0x5c, 0x1c, 0x24, 0x57, 0x1a, 0x22, 0x53, 0x19, 0x20, 0x4f,
+0x18, 0x1f, 0x4c, 0x17, 0x1e, 0x48, 0x16, 0x1d, 0x45, 0x16, 0x1c, 0x43,
+0x32, 0x3c, 0x75, 0x4f, 0x5d, 0xb8, 0x86, 0x8f, 0x97, 0xd7, 0xd5, 0x1c,
+0xc7, 0xc1, 0x18, 0xdf, 0xd9, 0x22, 0xd7, 0xd5, 0x1c, 0xe0, 0xde, 0x25,
+0x78, 0x7d, 0x96, 0x66, 0x6f, 0xab, 0xde, 0xd7, 0x1d, 0xcb, 0xc4, 0x18,
+0xd4, 0xcf, 0x1d, 0x5c, 0x66, 0xb2, 0x4b, 0x56, 0xc3, 0x4a, 0x55, 0xc0,
+0x49, 0x52, 0xbc, 0x46, 0x51, 0xb8, 0x44, 0x4f, 0xb4, 0x43, 0x4d, 0xb1,
+0x42, 0x4b, 0xae, 0x40, 0x4a, 0xab, 0x40, 0x48, 0xa8, 0x3d, 0x47, 0xa5,
+0x74, 0x77, 0x6e, 0xdc, 0xda, 0x1d, 0xe3, 0xdd, 0x30, 0xe4, 0xde, 0x31,
+0xe3, 0xe1, 0x32, 0xe2, 0xe0, 0x2d, 0xaa, 0xa8, 0x35, 0x32, 0x3a, 0x8f,
+0x31, 0x39, 0x8e, 0x31, 0x37, 0x8b, 0x2f, 0x36, 0x89, 0x2e, 0x35, 0x87,
+0x2c, 0x34, 0x85, 0x2c, 0x33, 0x83, 0x54, 0x57, 0x66, 0xe1, 0xdf, 0x2a,
+0xe0, 0xde, 0x25, 0xdb, 0xd4, 0x1c, 0xdf, 0xd9, 0x22, 0xde, 0xd7, 0x1d,
+0xd5, 0xcf, 0x1c, 0x28, 0x2e, 0x75, 0x27, 0x2d, 0x73, 0x27, 0x2c, 0x72,
+0x26, 0x2c, 0x70, 0x26, 0x2c, 0x6f, 0x25, 0x2a, 0x6e, 0x24, 0x2a, 0x6d,
+0x24, 0x29, 0x6b, 0x23, 0x29, 0x6a, 0x23, 0x28, 0x69, 0x23, 0x27, 0x67,
+0x22, 0x27, 0x66, 0x22, 0x27, 0x65, 0x21, 0x26, 0x64, 0x20, 0x25, 0x62,
+0x20, 0x25, 0x61, 0x20, 0x25, 0x60, 0x20, 0x24, 0x5f, 0x1f, 0x24, 0x5e,
+0x1f, 0x23, 0x5d, 0x1e, 0x23, 0x5c, 0xdc, 0xda, 0x1d, 0xc7, 0xc5, 0x18,
+0xc3, 0xbd, 0x16, 0xe1, 0xdb, 0x28, 0xe1, 0xda, 0x26, 0x75, 0x74, 0x32,
+0xe3, 0xdd, 0x30, 0xe3, 0xdd, 0x30, 0x74, 0x74, 0x31, 0x1a, 0x1e, 0x53,
+0x19, 0x1d, 0x52, 0x18, 0x1c, 0x51, 0x18, 0x1c, 0x51, 0x18, 0x1c, 0x50,
+0xa1, 0x9d, 0x1f, 0xe4, 0xe2, 0x35, 0xe0, 0xde, 0x25, 0xd9, 0xd2, 0x1c,
+0xe4, 0xde, 0x33, 0xa0, 0x9d, 0x1e, 0x15, 0x19, 0x4b, 0x5a, 0x5b, 0x33,
+0xe0, 0xde, 0x25, 0xe4, 0xe2, 0x33, 0xa0, 0x9c, 0x1c, 0x13, 0x17, 0x48,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x16, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x11, 0x14, 0x43,
+0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x40, 0x10, 0x12, 0x3f, 0x10, 0x12, 0x3f, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x48, 0x27, 0x2d, 0x93, 0x28, 0x2e, 0x98, 0x23, 0x28, 0x82,
+0x20, 0x26, 0x79, 0x20, 0x27, 0x7b, 0x21, 0x28, 0x7d, 0x22, 0x29, 0x7f,
+0x24, 0x2a, 0x81, 0x25, 0x2b, 0x82, 0x26, 0x2c, 0x84, 0x28, 0x2e, 0x86,
+0x29, 0x30, 0x88, 0x2b, 0x32, 0x8a, 0x2d, 0x34, 0x8c, 0x2f, 0x37, 0x8f,
+0x31, 0x38, 0x91, 0x59, 0x5f, 0x74, 0xdd, 0xd6, 0x1c, 0xe6, 0xdf, 0x37,
+0xe6, 0xe4, 0x39, 0xde, 0xd8, 0x1f, 0xdf, 0xd9, 0x22, 0xe0, 0xd9, 0x23,
+0xd1, 0xcb, 0x12, 0x36, 0x3a, 0x44, 0x10, 0x14, 0x2d, 0x08, 0x0b, 0x20,
+0x08, 0x0c, 0x21, 0x09, 0x0c, 0x22, 0x09, 0x0d, 0x23, 0x09, 0x0d, 0x24,
+0x0a, 0x0d, 0x25, 0x0c, 0x11, 0x2c, 0x23, 0x29, 0x52, 0x36, 0x3f, 0x7b,
+0xd1, 0xcf, 0x1a, 0xd7, 0xd0, 0x1c, 0xd7, 0xd5, 0x1c, 0xde, 0xd7, 0x1d,
+0xdd, 0xd6, 0x1c, 0xe2, 0xdc, 0x2b, 0x78, 0x7f, 0x97, 0x46, 0x54, 0xdd,
+0x4a, 0x59, 0xdc, 0x50, 0x60, 0xdb, 0x53, 0x63, 0xcf, 0x3e, 0x4a, 0x93,
+0x21, 0x2a, 0x5a, 0x22, 0x2a, 0x5c, 0x25, 0x2f, 0x64, 0x37, 0x44, 0x89,
+0x9f, 0xa3, 0x55, 0xe1, 0xda, 0x26, 0xcb, 0xc4, 0x18, 0xd9, 0xd2, 0x1c,
+0xce, 0xc7, 0x19, 0xde, 0xd8, 0x1f, 0xcc, 0xc6, 0x19, 0x79, 0x7b, 0x40,
+0x27, 0x31, 0x74, 0x30, 0x3b, 0x81, 0x3c, 0x47, 0x90, 0x4b, 0x56, 0xa1,
+0x4c, 0x58, 0xa5, 0x47, 0x53, 0xa2, 0x3f, 0x4b, 0x9b, 0x3b, 0x48, 0x98,
+0x39, 0x45, 0x94, 0x35, 0x41, 0x90, 0x33, 0x3f, 0x8c, 0x81, 0x84, 0x4e,
+0xd7, 0xd0, 0x1c, 0xd4, 0xcd, 0x1b, 0xe2, 0xe0, 0x2d, 0xe3, 0xdd, 0x30,
+0xe3, 0xdd, 0x30, 0xcf, 0xca, 0x11, 0x36, 0x3c, 0x58, 0x1e, 0x27, 0x5c,
+0x1d, 0x24, 0x58, 0x33, 0x3f, 0x7e, 0x19, 0x20, 0x50, 0x17, 0x1e, 0x4c,
+0x16, 0x1d, 0x48, 0x16, 0x1c, 0x46, 0x15, 0x1b, 0x43, 0x14, 0x1a, 0x41,
+0x13, 0x19, 0x3e, 0x33, 0x3c, 0x76, 0x83, 0x8b, 0x83, 0xd7, 0xd5, 0x1c,
+0xce, 0xc7, 0x19, 0xd4, 0xcd, 0x1b, 0xdb, 0xd4, 0x1c, 0xcf, 0xc9, 0x1a,
+0x86, 0x8a, 0x7d, 0xd2, 0xcd, 0x1e, 0xde, 0xdb, 0x1d, 0xdc, 0xda, 0x1d,
+0x63, 0x69, 0x9f, 0x40, 0x4b, 0xc6, 0x43, 0x4d, 0xc3, 0x43, 0x4e, 0xbf,
+0x45, 0x50, 0xbb, 0x44, 0x4e, 0xb8, 0x43, 0x4c, 0xb4, 0x41, 0x4b, 0xb0,
+0x40, 0x4a, 0xad, 0x3f, 0x47, 0xaa, 0x3d, 0x47, 0xa7, 0x3c, 0x44, 0xa4,
+0xad, 0xab, 0x3a, 0xe5, 0xdf, 0x34, 0xe1, 0xdb, 0x28, 0xdb, 0xd4, 0x1c,
+0xe3, 0xdd, 0x30, 0xe0, 0xde, 0x25, 0x6e, 0x71, 0x63, 0x32, 0x3a, 0x8f,
+0x31, 0x38, 0x8d, 0x30, 0x36, 0x8b, 0x2e, 0x35, 0x88, 0x2e, 0x35, 0x87,
+0x2c, 0x34, 0x85, 0x2c, 0x33, 0x83, 0x2a, 0x32, 0x81, 0xdc, 0xda, 0x1d,
+0xde, 0xdc, 0x1f, 0xde, 0xd8, 0x1f, 0xe0, 0xde, 0x25, 0xe2, 0xe0, 0x2d,
+0xdd, 0xd6, 0x1c, 0x66, 0x67, 0x50, 0x25, 0x2b, 0x73, 0x25, 0x2a, 0x71,
+0x25, 0x2a, 0x70, 0x24, 0x29, 0x6f, 0x24, 0x29, 0x6d, 0x23, 0x28, 0x6c,
+0x23, 0x28, 0x6b, 0x22, 0x27, 0x6a, 0x22, 0x27, 0x68, 0x21, 0x26, 0x67,
+0x36, 0x3a, 0x5b, 0xb9, 0xb5, 0x1c, 0x20, 0x24, 0x63, 0x1f, 0x24, 0x62,
+0x1f, 0x24, 0x61, 0x1f, 0x23, 0x60, 0x1f, 0x23, 0x5f, 0x1e, 0x22, 0x5e,
+0x1e, 0x22, 0x5d, 0x1e, 0x22, 0x5c, 0xcb, 0xc4, 0x18, 0xd9, 0xd2, 0x1c,
+0xce, 0xc7, 0x19, 0xde, 0xd8, 0x1f, 0xcc, 0xc6, 0x19, 0xe2, 0xe0, 0x2d,
+0xe6, 0xe4, 0x3b, 0xce, 0xc9, 0x0f, 0x1a, 0x1e, 0x54, 0x1a, 0x1e, 0x53,
+0x1a, 0x1e, 0x52, 0x19, 0x1d, 0x51, 0x19, 0x1d, 0x51, 0x19, 0x1d, 0x50,
+0xa1, 0x9e, 0x1f, 0xde, 0xdc, 0x1f, 0xdb, 0xd4, 0x1c, 0xe0, 0xde, 0x25,
+0xd7, 0xd0, 0x1c, 0xa0, 0x9d, 0x1e, 0x2c, 0x2f, 0x43, 0xce, 0xc8, 0x0e,
+0xe3, 0xdd, 0x30, 0xce, 0xc8, 0x0e, 0x14, 0x18, 0x48, 0x14, 0x18, 0x48,
+0x13, 0x17, 0x47, 0x13, 0x17, 0x47, 0x13, 0x16, 0x45, 0x13, 0x16, 0x45,
+0x12, 0x16, 0x45, 0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x12, 0x15, 0x43,
+0x11, 0x15, 0x42, 0x11, 0x14, 0x41, 0x11, 0x14, 0x41, 0x10, 0x14, 0x40,
+0x10, 0x14, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3e,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x13, 0x17, 0x48, 0x28, 0x2f, 0x92, 0x2a, 0x32, 0x98, 0x25, 0x2b, 0x82,
+0x22, 0x28, 0x79, 0x23, 0x29, 0x7a, 0x24, 0x2a, 0x7c, 0x26, 0x2b, 0x7e,
+0x27, 0x2d, 0x80, 0x28, 0x2f, 0x81, 0x2a, 0x30, 0x83, 0x2c, 0x32, 0x86,
+0x2d, 0x34, 0x88, 0x2f, 0x36, 0x8a, 0x32, 0x39, 0x8c, 0x33, 0x3b, 0x8e,
+0x37, 0x3f, 0x90, 0x39, 0x41, 0x93, 0xbf, 0xbc, 0x25, 0xe4, 0xde, 0x31,
+0xe4, 0xde, 0x31, 0xe4, 0xe2, 0x35, 0xe6, 0xdf, 0x37, 0xe2, 0xdc, 0x2b,
+0xdc, 0xda, 0x1d, 0x9b, 0x98, 0x0f, 0x08, 0x0b, 0x1f, 0x08, 0x0b, 0x20,
+0x08, 0x0c, 0x21, 0x10, 0x14, 0x30, 0x1f, 0x25, 0x4b, 0x2f, 0x36, 0x69,
+0x3a, 0x43, 0x85, 0x46, 0x51, 0xa6, 0x4f, 0x5b, 0xc7, 0x4b, 0x57, 0xcb,
+0xcc, 0xc6, 0x19, 0xdd, 0xd6, 0x1c, 0xcc, 0xc6, 0x19, 0xd9, 0xd2, 0x1c,
+0xe0, 0xde, 0x25, 0xe0, 0xde, 0x25, 0x53, 0x5d, 0xc7, 0x46, 0x54, 0xde,
+0x4d, 0x5c, 0xdc, 0x56, 0x66, 0xdc, 0x47, 0x54, 0xa9, 0x46, 0x53, 0xa6,
+0x46, 0x54, 0xa9, 0x4b, 0x5b, 0xb8, 0x52, 0x63, 0xd5, 0x4e, 0x61, 0xd3,
+0x15, 0x1c, 0x4a, 0xce, 0xc8, 0x0e, 0xdf, 0xd9, 0x22, 0xe0, 0xde, 0x25,
+0xe2, 0xe0, 0x2d, 0xd2, 0xcc, 0x1b, 0xd2, 0xcc, 0x1b, 0xe6, 0xe0, 0x39,
+0x3b, 0x44, 0x64, 0x2f, 0x39, 0x7a, 0x39, 0x43, 0x87, 0x45, 0x50, 0x95,
+0x41, 0x4c, 0x93, 0x3c, 0x47, 0x8f, 0x37, 0x42, 0x8b, 0x34, 0x3f, 0x89,
+0x32, 0x3d, 0x86, 0x2f, 0x3a, 0x82, 0x6a, 0x6f, 0x57, 0xdf, 0xd8, 0x20,
+0xcf, 0xc9, 0x1a, 0xdf, 0xd9, 0x22, 0xdd, 0xd6, 0x1c, 0xd4, 0xcd, 0x1b,
+0xcf, 0xca, 0x11, 0x35, 0x3c, 0x57, 0x24, 0x2d, 0x66, 0x1d, 0x25, 0x59,
+0x1b, 0x22, 0x54, 0x33, 0x3f, 0x7f, 0x49, 0x59, 0xb1, 0x50, 0x62, 0xc6,
+0x15, 0x1c, 0x46, 0x14, 0x1b, 0x43, 0x14, 0x1a, 0x41, 0x13, 0x19, 0x3e,
+0x12, 0x18, 0x3c, 0x22, 0x29, 0x55, 0x65, 0x6c, 0x75, 0xd5, 0xcf, 0x1c,
+0xc9, 0xc3, 0x18, 0xdb, 0xd4, 0x1c, 0xe0, 0xd9, 0x23, 0xc9, 0xc3, 0x18,
+0xc9, 0xc7, 0x18, 0xd9, 0xd2, 0x1c, 0xde, 0xd7, 0x1d, 0x71, 0x76, 0x8b,
+0x36, 0x3f, 0xc9, 0x36, 0x40, 0xc5, 0x39, 0x42, 0xc1, 0x39, 0x44, 0xbd,
+0x3b, 0x45, 0xba, 0x3b, 0x46, 0xb6, 0x3d, 0x47, 0xb3, 0x3e, 0x47, 0xb0,
+0x3e, 0x47, 0xac, 0x3c, 0x46, 0xa9, 0x3c, 0x45, 0xa6, 0x3a, 0x42, 0xa3,
+0xac, 0xaa, 0x3a, 0xe2, 0xe0, 0x2b, 0xdf, 0xd8, 0x20, 0xe1, 0xdf, 0x2a,
+0xe2, 0xdc, 0x2b, 0xbc, 0xb6, 0x15, 0x6e, 0x71, 0x63, 0x31, 0x39, 0x8e,
+0x31, 0x38, 0x8d, 0x30, 0x36, 0x8a, 0x2e, 0x35, 0x88, 0x2d, 0x35, 0x87,
+0x2d, 0x34, 0x84, 0x2b, 0x32, 0x82, 0x2a, 0x32, 0x80, 0xbb, 0xb7, 0x21,
+0xde, 0xd8, 0x1f, 0xe1, 0xdb, 0x2a, 0xe2, 0xdc, 0x2b, 0xde, 0xd8, 0x1f,
+0xdf, 0xd8, 0x20, 0xd0, 0xca, 0x13, 0x24, 0x2a, 0x73, 0x24, 0x29, 0x71,
+0x23, 0x29, 0x70, 0x23, 0x29, 0x6f, 0x22, 0x28, 0x6d, 0x21, 0x27, 0x6c,
+0x21, 0x27, 0x6b, 0x21, 0x26, 0x69, 0x20, 0x26, 0x68, 0x77, 0x77, 0x3c,
+0xe0, 0xda, 0x25, 0xdf, 0xd8, 0x20, 0x1f, 0x24, 0x63, 0x1e, 0x24, 0x62,
+0x1e, 0x23, 0x61, 0x1e, 0x22, 0x60, 0x1e, 0x22, 0x5f, 0x1d, 0x22, 0x5e,
+0x1d, 0x21, 0x5d, 0x1d, 0x21, 0x5c, 0xdf, 0xd9, 0x22, 0xe0, 0xde, 0x25,
+0xe2, 0xe0, 0x2d, 0xd2, 0xcc, 0x1b, 0xd2, 0xcc, 0x1b, 0xe6, 0xe0, 0x39,
+0xde, 0xdb, 0x1d, 0x73, 0x74, 0x31, 0x19, 0x1e, 0x54, 0x19, 0x1d, 0x53,
+0x19, 0x1d, 0x52, 0x19, 0x1d, 0x51, 0x18, 0x1c, 0x50, 0x18, 0x1c, 0x50,
+0x73, 0x72, 0x2f, 0xd4, 0xcd, 0x1b, 0xe3, 0xdd, 0x30, 0xdf, 0xd8, 0x20,
+0xcf, 0xc9, 0x1a, 0xdf, 0xd9, 0x22, 0xb7, 0xb2, 0x16, 0xd4, 0xcd, 0x1b,
+0xd7, 0xd0, 0x1c, 0x2b, 0x2e, 0x41, 0x15, 0x19, 0x48, 0x15, 0x19, 0x48,
+0x15, 0x18, 0x47, 0x14, 0x18, 0x47, 0x14, 0x17, 0x45, 0x14, 0x17, 0x45,
+0x13, 0x17, 0x45, 0x13, 0x16, 0x44, 0x13, 0x16, 0x44, 0x12, 0x16, 0x43,
+0x12, 0x15, 0x42, 0x12, 0x15, 0x41, 0x11, 0x15, 0x41, 0x11, 0x14, 0x40,
+0x11, 0x14, 0x40, 0x11, 0x14, 0x3f, 0x10, 0x14, 0x3f, 0x10, 0x13, 0x3e,
+0x10, 0x13, 0x3e, 0x10, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x14, 0x18, 0x48, 0x29, 0x32, 0x92, 0x2d, 0x35, 0x98, 0x27, 0x2d, 0x81,
+0x25, 0x2a, 0x78, 0x26, 0x2c, 0x7a, 0x26, 0x2d, 0x7c, 0x28, 0x2f, 0x7e,
+0x2a, 0x30, 0x80, 0x2c, 0x32, 0x81, 0x2d, 0x35, 0x83, 0x2f, 0x36, 0x85,
+0x32, 0x38, 0x87, 0x34, 0x3c, 0x89, 0x37, 0x3f, 0x8b, 0x38, 0x40, 0x89,
+0x34, 0x3c, 0x7c, 0x30, 0x36, 0x6f, 0x3d, 0x42, 0x54, 0xcf, 0xca, 0x0e,
+0xe0, 0xda, 0x25, 0xe3, 0xe1, 0x32, 0xe6, 0xe0, 0x39, 0xe2, 0xe0, 0x2d,
+0xdd, 0xd6, 0x1c, 0xe0, 0xde, 0x25, 0xcf, 0xc9, 0x0e, 0x3d, 0x42, 0x53,
+0x35, 0x3c, 0x77, 0x3d, 0x47, 0x90, 0x46, 0x51, 0xab, 0x49, 0x55, 0xba,
+0x46, 0x51, 0xbe, 0x42, 0x4d, 0xc1, 0x3f, 0x49, 0xc6, 0x74, 0x79, 0x89,
+0xe0, 0xde, 0x25, 0xdd, 0xd6, 0x1c, 0xd1, 0xca, 0x1a, 0xce, 0xc7, 0x19,
+0xd9, 0xd2, 0x1c, 0xde, 0xdb, 0x1d, 0x44, 0x52, 0xdf, 0x4b, 0x59, 0xde,
+0x54, 0x63, 0xdd, 0x56, 0x65, 0xdc, 0x55, 0x64, 0xdb, 0x53, 0x64, 0xd9,
+0x4d, 0x5d, 0xd8, 0x47, 0x57, 0xd7, 0x51, 0x62, 0xd5, 0x13, 0x1a, 0x44,
+0x14, 0x1b, 0x47, 0x2b, 0x31, 0x42, 0xe0, 0xda, 0x25, 0xe3, 0xdd, 0x30,
+0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xe6, 0xdf, 0x37, 0xe2, 0xe0, 0x2d,
+0xd0, 0xca, 0x12, 0x6a, 0x6f, 0x4f, 0x36, 0x40, 0x7f, 0x3b, 0x45, 0x86,
+0x38, 0x42, 0x84, 0x34, 0x3e, 0x81, 0x30, 0x3b, 0x7e, 0x2f, 0x39, 0x7c,
+0x2c, 0x36, 0x7a, 0x91, 0x92, 0x39, 0xdf, 0xd8, 0x20, 0xe0, 0xde, 0x25,
+0xe4, 0xde, 0x33, 0xdb, 0xd4, 0x1c, 0xd7, 0xd5, 0x1c, 0xcf, 0xca, 0x11,
+0x35, 0x3c, 0x56, 0x1e, 0x26, 0x5c, 0x1d, 0x24, 0x58, 0x42, 0x51, 0xa1,
+0x19, 0x21, 0x50, 0x18, 0x1f, 0x4e, 0x47, 0x56, 0xab, 0x54, 0x65, 0xd7,
+0x4e, 0x5f, 0xd8, 0x43, 0x50, 0x9e, 0x12, 0x18, 0x3e, 0x12, 0x17, 0x3c,
+0x11, 0x16, 0x3a, 0x10, 0x16, 0x38, 0x35, 0x3f, 0x7a, 0xd2, 0xcc, 0x1b,
+0xd9, 0xd2, 0x1c, 0xe1, 0xdb, 0x28, 0xd7, 0xd5, 0x1c, 0xbb, 0xb5, 0x14,
+0xd1, 0xcf, 0x1a, 0xde, 0xd7, 0x1d, 0x99, 0x9a, 0x60, 0x38, 0x43, 0xcb,
+0x37, 0x41, 0xc7, 0x35, 0x3f, 0xc3, 0x33, 0x3d, 0xbf, 0x31, 0x3b, 0xbc,
+0x33, 0x3c, 0xb8, 0x35, 0x3d, 0xb5, 0x35, 0x3e, 0xb2, 0x36, 0x3f, 0xae,
+0x37, 0x3f, 0xab, 0x37, 0x40, 0xa8, 0x38, 0x41, 0xa5, 0x39, 0x42, 0xa2,
+0xdf, 0xd8, 0x20, 0xd2, 0xcc, 0x1b, 0xe2, 0xdc, 0x2b, 0xd4, 0xcd, 0x1b,
+0xe2, 0xe0, 0x2d, 0xe6, 0xe0, 0x3b, 0xbd, 0xb9, 0x25, 0x31, 0x38, 0x8e,
+0x30, 0x36, 0x8c, 0x2f, 0x35, 0x8a, 0x2d, 0x35, 0x87, 0x2d, 0x34, 0x86,
+0x2c, 0x33, 0x84, 0x2b, 0x32, 0x82, 0x2a, 0x32, 0x80, 0x7d, 0x7d, 0x49,
+0xdf, 0xd8, 0x20, 0xe0, 0xde, 0x25, 0xe1, 0xda, 0x26, 0xdf, 0xd8, 0x20,
+0xde, 0xdc, 0x1f, 0xde, 0xdb, 0x1d, 0xba, 0xb6, 0x1e, 0x39, 0x3c, 0x65,
+0x23, 0x29, 0x6f, 0x22, 0x28, 0x6f, 0x22, 0x28, 0x6d, 0x21, 0x27, 0x6c,
+0x21, 0x26, 0x6a, 0x77, 0x77, 0x3d, 0xcf, 0xc9, 0x12, 0xd9, 0xd2, 0x1c,
+0xdb, 0xd4, 0x1c, 0xd5, 0xcf, 0x1c, 0x1d, 0x23, 0x63, 0x1d, 0x23, 0x62,
+0x1d, 0x22, 0x61, 0x1c, 0x22, 0x60, 0x1d, 0x22, 0x5f, 0x1c, 0x21, 0x5e,
+0x1c, 0x21, 0x5d, 0x1c, 0x21, 0x5c, 0xe0, 0xda, 0x25, 0xe3, 0xdd, 0x30,
+0xdf, 0xd8, 0x20, 0xe0, 0xda, 0x25, 0xe6, 0xdf, 0x37, 0xe2, 0xe0, 0x2d,
+0xb8, 0xb3, 0x18, 0x19, 0x1e, 0x54, 0x19, 0x1d, 0x53, 0x19, 0x1d, 0x53,
+0x18, 0x1c, 0x52, 0x18, 0x1c, 0x51, 0x18, 0x1c, 0x50, 0x18, 0x1c, 0x50,
+0x5c, 0x5c, 0x37, 0xcf, 0xc9, 0x1a, 0xdf, 0xd8, 0x20, 0xe0, 0xde, 0x25,
+0xe4, 0xde, 0x33, 0xdb, 0xd4, 0x1c, 0xd7, 0xd5, 0x1c, 0xdf, 0xd8, 0x20,
+0x5a, 0x5b, 0x33, 0x15, 0x19, 0x49, 0x15, 0x19, 0x48, 0x15, 0x18, 0x48,
+0x14, 0x18, 0x47, 0x14, 0x18, 0x46, 0x14, 0x18, 0x45, 0x14, 0x17, 0x45,
+0x14, 0x17, 0x45, 0x14, 0x17, 0x44, 0x14, 0x17, 0x44, 0x13, 0x17, 0x43,
+0x13, 0x16, 0x42, 0x12, 0x16, 0x41, 0x12, 0x16, 0x41, 0x12, 0x15, 0x40,
+0x12, 0x15, 0x40, 0x11, 0x15, 0x3f, 0x11, 0x14, 0x3f, 0x11, 0x14, 0x3e,
+0x10, 0x14, 0x3e, 0x10, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x16, 0x19, 0x48, 0x2d, 0x33, 0x92, 0x2f, 0x37, 0x97, 0x29, 0x2f, 0x81,
+0x26, 0x2d, 0x78, 0x28, 0x2f, 0x7a, 0x2a, 0x2f, 0x7b, 0x2b, 0x32, 0x7d,
+0x2d, 0x34, 0x7f, 0x2f, 0x36, 0x81, 0x32, 0x39, 0x82, 0x35, 0x3c, 0x85,
+0x34, 0x3c, 0x80, 0x31, 0x38, 0x75, 0x2d, 0x33, 0x69, 0x29, 0x2f, 0x5e,
+0x23, 0x29, 0x50, 0x1b, 0x1f, 0x40, 0x17, 0x1b, 0x37, 0x2a, 0x2c, 0x2b,
+0xcd, 0xc8, 0x0b, 0xe6, 0xe0, 0x3b, 0xe0, 0xde, 0x25, 0xe0, 0xde, 0x25,
+0xde, 0xd7, 0x1d, 0xe0, 0xde, 0x25, 0xde, 0xd7, 0x1d, 0xdc, 0xda, 0x1d,
+0x9d, 0x9d, 0x52, 0x65, 0x6b, 0x8c, 0x3f, 0x49, 0xb6, 0x3b, 0x45, 0xb9,
+0x39, 0x43, 0xbc, 0x36, 0x40, 0xc0, 0x33, 0x3d, 0xc4, 0x82, 0x85, 0x71,
+0xe4, 0xde, 0x33, 0xe1, 0xda, 0x26, 0xdc, 0xda, 0x1d, 0xd1, 0xcf, 0x1a,
+0xde, 0xd8, 0x1f, 0xaf, 0xaf, 0x4f, 0x49, 0x56, 0xdf, 0x4d, 0x5a, 0xde,
+0x4c, 0x5b, 0xdd, 0x4b, 0x59, 0xdd, 0x48, 0x57, 0xdc, 0x43, 0x52, 0xdb,
+0x3f, 0x4d, 0xd9, 0x54, 0x64, 0xd8, 0x11, 0x18, 0x40, 0x12, 0x18, 0x41,
+0x13, 0x19, 0x44, 0x14, 0x1b, 0x47, 0x5b, 0x5d, 0x34, 0xd4, 0xcd, 0x1b,
+0xe1, 0xda, 0x26, 0xe5, 0xdf, 0x34, 0xe0, 0xde, 0x25, 0xe3, 0xdd, 0x2e,
+0xe6, 0xe0, 0x3b, 0xe0, 0xde, 0x25, 0xbd, 0xba, 0x20, 0x6f, 0x73, 0x53,
+0x44, 0x4c, 0x6b, 0x2e, 0x38, 0x76, 0x69, 0x6d, 0x4f, 0x7c, 0x7f, 0x42,
+0xd0, 0xcb, 0x12, 0xe0, 0xd9, 0x23, 0xe2, 0xe0, 0x2b, 0xe2, 0xdc, 0x2b,
+0xd2, 0xcc, 0x1b, 0xc3, 0xbd, 0x16, 0xb9, 0xb6, 0x1b, 0x34, 0x3b, 0x54,
+0x1d, 0x25, 0x5a, 0x1c, 0x24, 0x57, 0x1b, 0x22, 0x53, 0x21, 0x2a, 0x5e,
+0x53, 0x65, 0xd0, 0x28, 0x31, 0x67, 0x22, 0x2b, 0x5c, 0x54, 0x66, 0xd3,
+0x4d, 0x5e, 0xd9, 0x48, 0x58, 0xda, 0x4e, 0x5d, 0xdb, 0x31, 0x3b, 0x74,
+0x10, 0x16, 0x38, 0x10, 0x15, 0x36, 0x19, 0x20, 0x46, 0xd4, 0xcd, 0x1b,
+0xe2, 0xdc, 0x2b, 0xde, 0xdb, 0x1d, 0xd7, 0xd0, 0x1c, 0xcb, 0xc4, 0x18,
+0xdc, 0xda, 0x1d, 0xb0, 0xae, 0x4a, 0x3f, 0x4a, 0xcd, 0x3c, 0x46, 0xc9,
+0x39, 0x43, 0xc5, 0x37, 0x40, 0xc1, 0x34, 0x3e, 0xbe, 0x33, 0x3c, 0xba,
+0x31, 0x3b, 0xb7, 0x30, 0x38, 0xb3, 0x2f, 0x38, 0xb0, 0x30, 0x38, 0xad,
+0x31, 0x3a, 0xaa, 0x31, 0x3a, 0xa7, 0x33, 0x3a, 0xa4, 0x33, 0x3a, 0xa1,
+0xde, 0xd7, 0x1d, 0xd2, 0xcc, 0x1b, 0xd1, 0xca, 0x1a, 0xcc, 0xc6, 0x19,
+0xe2, 0xe0, 0x2d, 0xe1, 0xdf, 0x2a, 0xe6, 0xe4, 0x39, 0xa9, 0xa7, 0x33,
+0x6c, 0x6e, 0x5f, 0x6b, 0x6d, 0x5d, 0x93, 0x93, 0x40, 0xbc, 0xb8, 0x23,
+0x69, 0x6b, 0x59, 0x2a, 0x31, 0x81, 0x2a, 0x31, 0x7f, 0x2a, 0x30, 0x7d,
+0xd0, 0xca, 0x14, 0xe0, 0xd9, 0x23, 0xe1, 0xda, 0x26, 0xe1, 0xdf, 0x2a,
+0xe2, 0xdc, 0x2b, 0xd7, 0xd0, 0x1c, 0xde, 0xd8, 0x1f, 0xe0, 0xde, 0x25,
+0xa5, 0xa2, 0x29, 0xa4, 0xa2, 0x29, 0xa4, 0xa1, 0x28, 0xa4, 0xa1, 0x28,
+0xde, 0xd8, 0x1f, 0xe1, 0xdb, 0x28, 0xde, 0xd8, 0x1f, 0xe1, 0xda, 0x26,
+0xcf, 0xc9, 0x11, 0x49, 0x4d, 0x4f, 0x1d, 0x23, 0x63, 0x1d, 0x22, 0x62,
+0x1c, 0x22, 0x61, 0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5e, 0x1b, 0x21, 0x5d,
+0x1b, 0x20, 0x5c, 0x1b, 0x20, 0x5b, 0xce, 0xc9, 0x10, 0xd4, 0xcd, 0x1b,
+0xe1, 0xda, 0x26, 0xe5, 0xdf, 0x34, 0xe0, 0xde, 0x25, 0xe3, 0xdd, 0x2e,
+0x46, 0x48, 0x43, 0x18, 0x1d, 0x54, 0x18, 0x1c, 0x53, 0x18, 0x1c, 0x53,
+0x18, 0x1c, 0x52, 0x18, 0x1c, 0x51, 0x17, 0x1b, 0x50, 0x17, 0x1b, 0x4f,
+0x5c, 0x5c, 0x37, 0xe0, 0xd9, 0x23, 0xe2, 0xe0, 0x2b, 0xe2, 0xdc, 0x2b,
+0xd2, 0xcc, 0x1b, 0xc3, 0xbd, 0x16, 0xdb, 0xd4, 0x1c, 0x88, 0x86, 0x24,
+0x15, 0x18, 0x49, 0x15, 0x18, 0x49, 0x15, 0x18, 0x48, 0x15, 0x18, 0x48,
+0x14, 0x18, 0x47, 0x14, 0x17, 0x45, 0x14, 0x17, 0x45, 0x13, 0x17, 0x45,
+0x13, 0x17, 0x45, 0x13, 0x16, 0x44, 0x13, 0x16, 0x44, 0x13, 0x16, 0x42,
+0x13, 0x16, 0x42, 0x12, 0x16, 0x41, 0x12, 0x16, 0x41, 0x12, 0x15, 0x40,
+0x12, 0x15, 0x40, 0x12, 0x15, 0x3f, 0x11, 0x15, 0x3f, 0x11, 0x14, 0x3e,
+0x11, 0x14, 0x3e, 0x11, 0x14, 0x3d, 0x10, 0x12, 0x37, 0x01, 0x01, 0x05,
+0x17, 0x1a, 0x48, 0x2f, 0x37, 0x90, 0x32, 0x3b, 0x97, 0x2c, 0x32, 0x80,
+0x2a, 0x30, 0x77, 0x2c, 0x32, 0x79, 0x2d, 0x34, 0x7b, 0x2f, 0x35, 0x7d,
+0x32, 0x39, 0x7f, 0x32, 0x39, 0x7a, 0x30, 0x36, 0x72, 0x2d, 0x32, 0x68,
+0x27, 0x2d, 0x5c, 0x23, 0x29, 0x51, 0x23, 0x28, 0x4f, 0x22, 0x27, 0x4a,
+0x1e, 0x23, 0x45, 0x1e, 0x23, 0x45, 0x23, 0x29, 0x51, 0x28, 0x2f, 0x5c,
+0x41, 0x46, 0x5d, 0xbd, 0xba, 0x20, 0xdd, 0xd6, 0x1c, 0xd7, 0xd0, 0x1c,
+0xe3, 0xdd, 0x2e, 0xdf, 0xd9, 0x22, 0xd5, 0xcf, 0x1c, 0xe0, 0xde, 0x25,
+0xd1, 0xca, 0x1a, 0xd4, 0xcd, 0x1b, 0xe0, 0xd9, 0x23, 0xbd, 0xba, 0x2e,
+0xa9, 0xa8, 0x43, 0xaa, 0xa8, 0x44, 0xcf, 0xc9, 0x1a, 0xe2, 0xe0, 0x2d,
+0xe0, 0xde, 0x25, 0xdd, 0xd6, 0x1c, 0xd9, 0xd2, 0x1c, 0xd9, 0xd2, 0x1c,
+0xe1, 0xda, 0x26, 0x9e, 0x9f, 0x67, 0x44, 0x51, 0xe0, 0x44, 0x51, 0xdf,
+0x44, 0x51, 0xde, 0x3f, 0x4d, 0xdd, 0x3b, 0x48, 0xdc, 0x3a, 0x48, 0xdb,
+0x56, 0x66, 0xda, 0x10, 0x15, 0x3b, 0x11, 0x16, 0x3d, 0x11, 0x18, 0x40,
+0x12, 0x19, 0x42, 0x13, 0x1a, 0x44, 0x15, 0x1b, 0x47, 0x54, 0x5a, 0x58,
+0xce, 0xc9, 0x0e, 0xd4, 0xcd, 0x1b, 0xe3, 0xdd, 0x30, 0xe2, 0xe0, 0x2d,
+0xdc, 0xda, 0x1d, 0xd1, 0xca, 0x1a, 0xe1, 0xdf, 0x2a, 0xe2, 0xe0, 0x2b,
+0xce, 0xcc, 0x19, 0xcb, 0xc4, 0x18, 0xcb, 0xc4, 0x18, 0xce, 0xcc, 0x19,
+0xe2, 0xdc, 0x2d, 0xe0, 0xde, 0x25, 0xe3, 0xdd, 0x30, 0xe1, 0xdf, 0x2a,
+0xde, 0xd8, 0x1f, 0x77, 0x78, 0x36, 0x1e, 0x26, 0x5b, 0x1d, 0x24, 0x58,
+0x1c, 0x24, 0x56, 0x1a, 0x22, 0x53, 0x19, 0x20, 0x50, 0x18, 0x1f, 0x4d,
+0x46, 0x55, 0xa8, 0x4f, 0x61, 0xd7, 0x43, 0x50, 0x9f, 0x3d, 0x4a, 0x91,
+0x50, 0x61, 0xda, 0x47, 0x56, 0xdb, 0x43, 0x51, 0xdc, 0x41, 0x4f, 0xdd,
+0x55, 0x64, 0xdd, 0x24, 0x2b, 0x58, 0x0e, 0x13, 0x33, 0xe1, 0xdb, 0x2a,
+0xcc, 0xc6, 0x19, 0xce, 0xc7, 0x19, 0xdf, 0xd8, 0x20, 0xe1, 0xdf, 0x2a,
+0xb3, 0xb2, 0x4b, 0x49, 0x55, 0xcf, 0x44, 0x4f, 0xcb, 0x3f, 0x4a, 0xc7,
+0x3c, 0x46, 0xc3, 0x39, 0x42, 0xc0, 0x36, 0x3f, 0xbc, 0x34, 0x3e, 0xb9,
+0x32, 0x3b, 0xb5, 0x30, 0x3a, 0xb2, 0x2f, 0x38, 0xaf, 0x2e, 0x36, 0xac,
+0x2c, 0x35, 0xa9, 0x2c, 0x34, 0xa6, 0x2d, 0x35, 0xa4, 0x2e, 0x36, 0xa0,
+0xbc, 0xb9, 0x28, 0xc9, 0xc3, 0x18, 0xce, 0xc7, 0x19, 0xe1, 0xdf, 0x2a,
+0xeb, 0xe6, 0x4a, 0xe6, 0xe4, 0x39, 0xdb, 0xd4, 0x1c, 0xe0, 0xd9, 0x23,
+0xe2, 0xdc, 0x2b, 0xde, 0xd8, 0x1f, 0xdd, 0xd6, 0x1c, 0xd7, 0xd0, 0x1c,
+0x68, 0x6b, 0x59, 0x2a, 0x31, 0x81, 0x2a, 0x30, 0x7f, 0x29, 0x2e, 0x7d,
+0x3c, 0x41, 0x6f, 0xd0, 0xca, 0x14, 0xe0, 0xd9, 0x23, 0xe1, 0xda, 0x26,
+0xd4, 0xcd, 0x1b, 0xde, 0xd7, 0x1d, 0xcf, 0xc9, 0x1a, 0xe2, 0xe0, 0x2d,
+0xe0, 0xde, 0x25, 0xdd, 0xd6, 0x1c, 0xd9, 0xd2, 0x1c, 0xd9, 0xd2, 0x1c,
+0xe1, 0xda, 0x26, 0xdf, 0xd8, 0x20, 0xe1, 0xda, 0x26, 0x8c, 0x8b, 0x31,
+0x1e, 0x24, 0x65, 0x1d, 0x23, 0x64, 0x1d, 0x23, 0x63, 0x1d, 0x22, 0x62,
+0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5f, 0x1c, 0x21, 0x5e, 0x1b, 0x20, 0x5d,
+0x1b, 0x20, 0x5c, 0x1b, 0x20, 0x5b, 0xa2, 0x9f, 0x22, 0xdb, 0xd4, 0x1c,
+0xe1, 0xda, 0x26, 0xd4, 0xcd, 0x1b, 0xe3, 0xdd, 0x30, 0xb8, 0xb3, 0x18,
+0x18, 0x1d, 0x55, 0x18, 0x1d, 0x54, 0x18, 0x1c, 0x53, 0x17, 0x1c, 0x52,
+0x17, 0x1c, 0x52, 0x17, 0x1c, 0x51, 0x17, 0x1b, 0x50, 0x16, 0x1b, 0x4f,
+0x5b, 0x5c, 0x37, 0xe0, 0xde, 0x25, 0xe3, 0xdd, 0x30, 0xe1, 0xdf, 0x2a,
+0xde, 0xd8, 0x1f, 0xd1, 0xcf, 0x1a, 0xb7, 0xb2, 0x16, 0x15, 0x19, 0x4a,
+0x14, 0x18, 0x49, 0x14, 0x18, 0x49, 0x14, 0x18, 0x48, 0x14, 0x18, 0x48,
+0x13, 0x17, 0x47, 0x13, 0x17, 0x45, 0x13, 0x17, 0x45, 0x13, 0x17, 0x45,
+0x13, 0x17, 0x45, 0x13, 0x16, 0x44, 0x13, 0x16, 0x44, 0x12, 0x16, 0x42,
+0x12, 0x16, 0x42, 0x12, 0x16, 0x41, 0x12, 0x15, 0x41, 0x12, 0x15, 0x40,
+0x12, 0x15, 0x40, 0x11, 0x15, 0x3f, 0x11, 0x15, 0x3f, 0x11, 0x14, 0x3e,
+0x11, 0x14, 0x3e, 0x11, 0x14, 0x3d, 0x10, 0x12, 0x37, 0x01, 0x01, 0x05,
+0x19, 0x1d, 0x48, 0x33, 0x3b, 0x90, 0x37, 0x3f, 0x97, 0x30, 0x36, 0x80,
+0x2d, 0x34, 0x77, 0x2f, 0x35, 0x79, 0x2f, 0x35, 0x74, 0x2e, 0x34, 0x71,
+0x2c, 0x32, 0x67, 0x2b, 0x30, 0x63, 0x2a, 0x30, 0x5f, 0x2b, 0x30, 0x5c,
+0x28, 0x2e, 0x57, 0x26, 0x2a, 0x53, 0x25, 0x2b, 0x54, 0x29, 0x2f, 0x5e,
+0x2d, 0x33, 0x68, 0x32, 0x39, 0x76, 0x35, 0x3d, 0x80, 0x39, 0x41, 0x8b,
+0x3c, 0x45, 0x97, 0x3b, 0x43, 0x99, 0x85, 0x87, 0x59, 0xd2, 0xcd, 0x18,
+0xd2, 0xcc, 0x1b, 0xde, 0xd8, 0x1f, 0xe2, 0xdc, 0x2b, 0xdf, 0xd9, 0x22,
+0xe0, 0xd9, 0x23, 0xe0, 0xd9, 0x23, 0xdb, 0xd4, 0x1c, 0xdf, 0xd8, 0x20,
+0xdd, 0xd6, 0x1c, 0xdd, 0xd6, 0x1c, 0xd9, 0xd2, 0x1c, 0xdf, 0xd8, 0x20,
+0xe3, 0xe1, 0x32, 0xde, 0xdc, 0x1f, 0xdf, 0xd9, 0x22, 0xc1, 0xbe, 0x34,
+0x89, 0x8d, 0x7a, 0x50, 0x5a, 0xc3, 0x3d, 0x49, 0xdf, 0x3b, 0x47, 0xdf,
+0x38, 0x44, 0xdf, 0x35, 0x41, 0xde, 0x3b, 0x48, 0xdd, 0x57, 0x66, 0xdc,
+0x0f, 0x14, 0x38, 0x0f, 0x15, 0x39, 0x10, 0x16, 0x3b, 0x11, 0x17, 0x3e,
+0x11, 0x18, 0x40, 0x12, 0x19, 0x42, 0x45, 0x53, 0xa8, 0x31, 0x3c, 0x79,
+0x47, 0x50, 0x73, 0xa5, 0xa4, 0x26, 0xe6, 0xdf, 0x37, 0xcc, 0xc6, 0x19,
+0xce, 0xc7, 0x19, 0xe1, 0xda, 0x26, 0xe2, 0xe0, 0x2d, 0xd7, 0xd5, 0x1c,
+0xbc, 0xb6, 0x15, 0xc6, 0xc4, 0x17, 0xdf, 0xd8, 0x20, 0xdf, 0xd8, 0x20,
+0xe2, 0xe0, 0x2d, 0xde, 0xd8, 0x1f, 0xd9, 0xd2, 0x1c, 0xd9, 0xd2, 0x1c,
+0x76, 0x77, 0x34, 0x1d, 0x24, 0x58, 0x1b, 0x23, 0x55, 0x1b, 0x22, 0x53,
+0x1a, 0x21, 0x51, 0x19, 0x20, 0x4e, 0x18, 0x1f, 0x4c, 0x17, 0x1d, 0x49,
+0x29, 0x32, 0x68, 0x53, 0x65, 0xd8, 0x49, 0x5a, 0xd9, 0x55, 0x67, 0xd5,
+0x4f, 0x5f, 0xbf, 0x4c, 0x5b, 0xdb, 0x41, 0x50, 0xdc, 0x3e, 0x4b, 0xdd,
+0x3a, 0x46, 0xde, 0x46, 0x53, 0xdf, 0x77, 0x80, 0xab, 0xd7, 0xd0, 0x1c,
+0xd7, 0xd0, 0x1c, 0xdb, 0xd4, 0x1c, 0xe2, 0xdc, 0x2b, 0xd5, 0xd0, 0x1e,
+0x5f, 0x69, 0xb9, 0x4b, 0x57, 0xcd, 0x48, 0x52, 0xc9, 0x43, 0x4f, 0xc5,
+0x40, 0x4a, 0xc2, 0x3c, 0x46, 0xbe, 0x38, 0x42, 0xba, 0x35, 0x3f, 0xb7,
+0x34, 0x3d, 0xb4, 0x32, 0x3a, 0xb1, 0x30, 0x39, 0xae, 0x2e, 0x37, 0xaa,
+0x2d, 0x35, 0xa7, 0x2c, 0x35, 0xa5, 0x2a, 0x33, 0xa2, 0x29, 0x31, 0x9f,
+0x68, 0x6b, 0x6b, 0xe1, 0xdb, 0x2a, 0xe5, 0xdf, 0x36, 0xe6, 0xdf, 0x37,
+0xe4, 0xe2, 0x35, 0xe0, 0xd9, 0x23, 0xe1, 0xdb, 0x2a, 0xe2, 0xdc, 0x2d,
+0xd4, 0xcd, 0x1b, 0xcc, 0xc6, 0x19, 0xbc, 0xb8, 0x23, 0x7d, 0x7e, 0x4c,
+0x2a, 0x30, 0x82, 0x2a, 0x30, 0x80, 0x28, 0x2e, 0x7e, 0x28, 0x2e, 0x7c,
+0x28, 0x2e, 0x7c, 0x3b, 0x3f, 0x6d, 0xd0, 0xca, 0x13, 0xdf, 0xd8, 0x20,
+0xdd, 0xd6, 0x1c, 0xdd, 0xd6, 0x1c, 0xd9, 0xd2, 0x1c, 0xdf, 0xd8, 0x20,
+0xe3, 0xe1, 0x32, 0xde, 0xdc, 0x1f, 0xdf, 0xd9, 0x22, 0xe2, 0xdc, 0x2b,
+0xd7, 0xd0, 0x1c, 0x8d, 0x8b, 0x32, 0x34, 0x39, 0x5c, 0x1e, 0x24, 0x66,
+0x1e, 0x24, 0x65, 0x1d, 0x23, 0x64, 0x1d, 0x22, 0x62, 0x1c, 0x22, 0x61,
+0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5f, 0x1c, 0x20, 0x5e, 0x1b, 0x20, 0x5d,
+0x1b, 0x20, 0x5c, 0x1b, 0x1f, 0x5b, 0xce, 0xc9, 0x10, 0xdd, 0xd6, 0x1c,
+0xd4, 0xcd, 0x1b, 0xe2, 0xe0, 0x2b, 0xe6, 0xdf, 0x37, 0x2f, 0x32, 0x4d,
+0x18, 0x1c, 0x55, 0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1c, 0x52,
+0x17, 0x1c, 0x52, 0x17, 0x1b, 0x51, 0x16, 0x1b, 0x50, 0x16, 0x1b, 0x4f,
+0x5b, 0x5c, 0x37, 0xde, 0xd8, 0x1f, 0xd9, 0xd2, 0x1c, 0xd9, 0xd2, 0x1c,
+0xe2, 0xe0, 0x2b, 0xce, 0xc8, 0x0e, 0x2b, 0x2e, 0x42, 0x15, 0x19, 0x4a,
+0x14, 0x18, 0x49, 0x14, 0x18, 0x49, 0x14, 0x17, 0x48, 0x13, 0x17, 0x47,
+0x13, 0x17, 0x47, 0x13, 0x17, 0x45, 0x13, 0x17, 0x45, 0x13, 0x16, 0x45,
+0x13, 0x16, 0x45, 0x12, 0x16, 0x44, 0x12, 0x16, 0x44, 0x12, 0x15, 0x42,
+0x12, 0x15, 0x42, 0x12, 0x15, 0x41, 0x12, 0x15, 0x41, 0x11, 0x15, 0x40,
+0x11, 0x15, 0x40, 0x11, 0x14, 0x3f, 0x11, 0x14, 0x3f, 0x11, 0x14, 0x3e,
+0x11, 0x14, 0x3e, 0x10, 0x14, 0x3d, 0x0f, 0x12, 0x37, 0x01, 0x01, 0x05,
+0x1a, 0x1e, 0x48, 0x38, 0x3e, 0x90, 0x3b, 0x45, 0x96, 0x33, 0x3b, 0x7e,
+0x2e, 0x34, 0x6f, 0x2f, 0x34, 0x6d, 0x2e, 0x34, 0x6b, 0x2f, 0x35, 0x68,
+0x2e, 0x35, 0x65, 0x2d, 0x33, 0x62, 0x2a, 0x30, 0x5f, 0x28, 0x2d, 0x5c,
+0x2c, 0x32, 0x66, 0x2f, 0x36, 0x6f, 0x31, 0x39, 0x78, 0x35, 0x3d, 0x82,
+0x38, 0x40, 0x8d, 0x37, 0x3f, 0x8f, 0x36, 0x3e, 0x91, 0x35, 0x3e, 0x93,
+0x35, 0x3c, 0x96, 0x33, 0x3b, 0x98, 0x32, 0x3a, 0x9b, 0x31, 0x39, 0x9d,
+0x6c, 0x6f, 0x6d, 0xa8, 0xa6, 0x3b, 0xd0, 0xcb, 0x19, 0xe1, 0xda, 0x26,
+0xe5, 0xdf, 0x36, 0xe1, 0xdf, 0x2a, 0xe1, 0xdf, 0x2a, 0xd4, 0xcd, 0x1b,
+0xd5, 0xcf, 0x1c, 0xdf, 0xd8, 0x20, 0xdd, 0xd6, 0x1c, 0xab, 0xaa, 0x45,
+0x99, 0x99, 0x5c, 0x75, 0x7a, 0x88, 0x3d, 0x49, 0xcd, 0x3c, 0x48, 0xd0,
+0x3c, 0x47, 0xd5, 0x39, 0x45, 0xd9, 0x36, 0x41, 0xdd, 0x31, 0x3d, 0xdf,
+0x2f, 0x3a, 0xdf, 0x3c, 0x48, 0xde, 0x58, 0x67, 0xdd, 0x0e, 0x13, 0x34,
+0x0e, 0x13, 0x35, 0x0f, 0x14, 0x38, 0x0f, 0x15, 0x39, 0x10, 0x16, 0x3c,
+0x2a, 0x34, 0x6b, 0x53, 0x64, 0xd7, 0x4b, 0x5b, 0xb8, 0x44, 0x53, 0xa6,
+0x4d, 0x5d, 0xbe, 0x17, 0x1e, 0x4a, 0x30, 0x35, 0x47, 0x8c, 0x8b, 0x28,
+0xcf, 0xca, 0x10, 0xe4, 0xe2, 0x33, 0xdf, 0xd9, 0x22, 0xd4, 0xcd, 0x1b,
+0xc9, 0xc7, 0x18, 0xd4, 0xcd, 0x1b, 0xe2, 0xdc, 0x2b, 0xe1, 0xdb, 0x2a,
+0xe2, 0xe0, 0x2d, 0xde, 0xd7, 0x1d, 0xdb, 0xd4, 0x1c, 0xcf, 0xc9, 0x1a,
+0xd1, 0xcc, 0x13, 0x1a, 0x22, 0x53, 0x19, 0x21, 0x50, 0x19, 0x20, 0x4f,
+0x18, 0x1f, 0x4d, 0x17, 0x1e, 0x4a, 0x16, 0x1d, 0x48, 0x15, 0x1c, 0x46,
+0x39, 0x46, 0x88, 0x48, 0x56, 0xab, 0x4a, 0x5a, 0xda, 0x45, 0x54, 0xdb,
+0x51, 0x61, 0xdb, 0x56, 0x66, 0xdc, 0x47, 0x56, 0xdd, 0x3c, 0x4a, 0xde,
+0x39, 0x45, 0xdf, 0x36, 0x42, 0xdf, 0x5f, 0x67, 0xb0, 0xb2, 0xb1, 0x4f,
+0xb3, 0xb3, 0x42, 0xa8, 0xa6, 0x27, 0xaf, 0xae, 0x36, 0x5f, 0x69, 0xa9,
+0x52, 0x5e, 0xce, 0x4e, 0x59, 0xca, 0x49, 0x54, 0xc7, 0x46, 0x51, 0xc3,
+0x42, 0x4d, 0xbf, 0x40, 0x4a, 0xbd, 0x3c, 0x46, 0xb9, 0x38, 0x43, 0xb6,
+0x36, 0x3f, 0xb2, 0x34, 0x3d, 0xaf, 0x32, 0x3a, 0xac, 0x2f, 0x38, 0xaa,
+0x2e, 0x36, 0xa7, 0x2d, 0x35, 0xa4, 0x2b, 0x34, 0xa1, 0x2a, 0x32, 0x9e,
+0x29, 0x31, 0x9c, 0x7b, 0x7c, 0x58, 0xd0, 0xca, 0x17, 0xdb, 0xd4, 0x1c,
+0xd4, 0xcd, 0x1b, 0xde, 0xd7, 0x1d, 0xa6, 0xa4, 0x33, 0xa6, 0xa4, 0x33,
+0x67, 0x6a, 0x5d, 0x29, 0x2f, 0x87, 0x29, 0x2f, 0x85, 0x29, 0x2f, 0x84,
+0x29, 0x2f, 0x82, 0x29, 0x2f, 0x80, 0x28, 0x2e, 0x7e, 0x27, 0x2d, 0x7c,
+0x27, 0x2c, 0x7b, 0x26, 0x2c, 0x79, 0x26, 0x2b, 0x78, 0x65, 0x66, 0x51,
+0xa5, 0xa2, 0x2b, 0xdf, 0xd8, 0x20, 0xdd, 0xd6, 0x1c, 0xe0, 0xda, 0x25,
+0xe4, 0xde, 0x33, 0xe4, 0xde, 0x33, 0xa4, 0xa1, 0x28, 0x77, 0x77, 0x3e,
+0x35, 0x3a, 0x5e, 0x20, 0x25, 0x68, 0x1f, 0x25, 0x67, 0x1e, 0x24, 0x66,
+0x1e, 0x24, 0x65, 0x1d, 0x23, 0x63, 0x1d, 0x22, 0x62, 0x1c, 0x22, 0x61,
+0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5f, 0x1c, 0x20, 0x5e, 0x1b, 0x20, 0x5d,
+0x1b, 0x20, 0x5c, 0x1b, 0x1f, 0x5b, 0xa2, 0x9f, 0x22, 0xa2, 0x9e, 0x22,
+0xa2, 0x9e, 0x22, 0xa1, 0x9e, 0x21, 0x73, 0x72, 0x32, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x55, 0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52,
+0x17, 0x1b, 0x51, 0x17, 0x1b, 0x51, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f,
+0x2c, 0x2f, 0x46, 0xa0, 0x9d, 0x1e, 0xa0, 0x9d, 0x1e, 0xa0, 0x9d, 0x1e,
+0xa0, 0x9d, 0x1e, 0x42, 0x44, 0x3c, 0x15, 0x18, 0x4a, 0x14, 0x17, 0x4a,
+0x13, 0x17, 0x49, 0x13, 0x17, 0x49, 0x13, 0x17, 0x48, 0x13, 0x16, 0x47,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x45, 0x13, 0x16, 0x45, 0x12, 0x16, 0x45,
+0x12, 0x16, 0x45, 0x12, 0x15, 0x44, 0x12, 0x15, 0x43, 0x12, 0x15, 0x42,
+0x11, 0x15, 0x41, 0x11, 0x15, 0x41, 0x11, 0x14, 0x40, 0x11, 0x14, 0x40,
+0x11, 0x14, 0x40, 0x11, 0x14, 0x3f, 0x11, 0x14, 0x3f, 0x10, 0x14, 0x3e,
+0x10, 0x14, 0x3e, 0x10, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x1c, 0x21, 0x48, 0x3b, 0x42, 0x8f, 0x40, 0x48, 0x96, 0x36, 0x3f, 0x7d,
+0x32, 0x39, 0x71, 0x32, 0x38, 0x6d, 0x30, 0x35, 0x6b, 0x2e, 0x34, 0x6a,
+0x2c, 0x32, 0x67, 0x2c, 0x34, 0x6b, 0x2e, 0x35, 0x70, 0x32, 0x39, 0x7b,
+0x35, 0x3c, 0x84, 0x34, 0x3b, 0x86, 0x34, 0x3b, 0x88, 0x32, 0x3b, 0x8a,
+0x31, 0x39, 0x8c, 0x30, 0x39, 0x8e, 0x30, 0x37, 0x90, 0x2f, 0x37, 0x93,
+0x2f, 0x36, 0x95, 0x2d, 0x35, 0x98, 0x2c, 0x34, 0x9a, 0x2b, 0x32, 0x9d,
+0x2a, 0x32, 0x9f, 0x29, 0x31, 0xa1, 0x2a, 0x33, 0xa5, 0x2b, 0x33, 0xa7,
+0x54, 0x5a, 0x86, 0x6a, 0x6e, 0x75, 0x6b, 0x6f, 0x77, 0x6c, 0x70, 0x79,
+0x59, 0x5f, 0x8f, 0x34, 0x3e, 0xb9, 0x37, 0x41, 0xbc, 0x3a, 0x44, 0xc0,
+0x3b, 0x46, 0xc3, 0x3a, 0x45, 0xc7, 0x3a, 0x44, 0xca, 0x39, 0x43, 0xcf,
+0x37, 0x41, 0xd2, 0x32, 0x3d, 0xd6, 0x2e, 0x39, 0xda, 0x2d, 0x37, 0xde,
+0x3c, 0x49, 0xdf, 0x59, 0x68, 0xdf, 0x1e, 0x24, 0x4e, 0x1c, 0x22, 0x4c,
+0x1e, 0x25, 0x50, 0x0e, 0x14, 0x36, 0x0f, 0x14, 0x38, 0x3c, 0x48, 0x8e,
+0x4e, 0x5e, 0xd9, 0x53, 0x63, 0xd8, 0x51, 0x62, 0xcd, 0x52, 0x64, 0xd7,
+0x42, 0x50, 0x9e, 0x17, 0x1d, 0x48, 0x44, 0x52, 0x9f, 0x1c, 0x23, 0x50,
+0x20, 0x27, 0x54, 0x5a, 0x6c, 0xd0, 0x5e, 0x6c, 0x9d, 0x62, 0x65, 0x3d,
+0x62, 0x64, 0x3c, 0x60, 0x63, 0x3b, 0xdf, 0xd8, 0x20, 0xe2, 0xe0, 0x2d,
+0xde, 0xd7, 0x1d, 0xe0, 0xde, 0x25, 0xdd, 0xd6, 0x1c, 0xd7, 0xd5, 0x1c,
+0xdf, 0xd9, 0x22, 0x73, 0x74, 0x2e, 0x18, 0x1f, 0x4c, 0x17, 0x1e, 0x4a,
+0x16, 0x1d, 0x48, 0x16, 0x1c, 0x47, 0x15, 0x1b, 0x45, 0x14, 0x1b, 0x43,
+0x43, 0x50, 0x9e, 0x4e, 0x5d, 0xbb, 0x54, 0x65, 0xdb, 0x43, 0x52, 0xdb,
+0x3f, 0x4e, 0xdc, 0x4a, 0x59, 0xdd, 0x50, 0x5f, 0xde, 0x44, 0x51, 0xdf,
+0x39, 0x45, 0xdf, 0x35, 0x41, 0xe0, 0x32, 0x3d, 0xe1, 0x31, 0x3d, 0xdf,
+0x3f, 0x4b, 0xdb, 0x51, 0x5d, 0xd7, 0x33, 0x3c, 0x74, 0x3d, 0x46, 0x8a,
+0x48, 0x52, 0xa9, 0x50, 0x5c, 0xc8, 0x4a, 0x56, 0xc4, 0x48, 0x53, 0xc1,
+0x44, 0x4f, 0xbe, 0x41, 0x4c, 0xba, 0x3f, 0x49, 0xb7, 0x3b, 0x45, 0xb4,
+0x38, 0x41, 0xb0, 0x36, 0x3f, 0xad, 0x34, 0x3c, 0xab, 0x31, 0x39, 0xa8,
+0x2f, 0x37, 0xa6, 0x2d, 0x35, 0xa2, 0x2c, 0x34, 0xa0, 0x2b, 0x33, 0x9d,
+0x29, 0x31, 0x9b, 0x28, 0x30, 0x98, 0x27, 0x2e, 0x96, 0x27, 0x2d, 0x93,
+0x25, 0x2c, 0x91, 0x25, 0x2c, 0x8f, 0x25, 0x2b, 0x8d, 0x26, 0x2c, 0x8b,
+0x26, 0x2c, 0x89, 0x25, 0x2c, 0x86, 0x25, 0x2c, 0x85, 0x26, 0x2d, 0x83,
+0x26, 0x2c, 0x81, 0x26, 0x2d, 0x7f, 0x26, 0x2d, 0x7d, 0x26, 0x2c, 0x7c,
+0x26, 0x2c, 0x7b, 0x26, 0x2b, 0x79, 0x25, 0x2b, 0x77, 0x24, 0x2a, 0x75,
+0x23, 0x2a, 0x74, 0x23, 0x29, 0x72, 0x23, 0x29, 0x71, 0x22, 0x28, 0x6f,
+0x21, 0x28, 0x6e, 0x21, 0x27, 0x6c, 0x20, 0x26, 0x6c, 0x20, 0x26, 0x6a,
+0x1f, 0x25, 0x69, 0x1f, 0x25, 0x68, 0x1f, 0x25, 0x67, 0x1e, 0x24, 0x65,
+0x1e, 0x23, 0x64, 0x1d, 0x23, 0x63, 0x1c, 0x22, 0x62, 0x1c, 0x22, 0x61,
+0x1c, 0x21, 0x60, 0x1c, 0x21, 0x5f, 0x1c, 0x20, 0x5e, 0x1b, 0x20, 0x5d,
+0x1b, 0x20, 0x5c, 0x1b, 0x1f, 0x5b, 0x1a, 0x1f, 0x5a, 0x1a, 0x1e, 0x59,
+0x1a, 0x1e, 0x58, 0x19, 0x1d, 0x57, 0x19, 0x1d, 0x56, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x54, 0x17, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52,
+0x17, 0x1b, 0x51, 0x17, 0x1b, 0x50, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f,
+0x16, 0x1a, 0x4e, 0x16, 0x1a, 0x4e, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c,
+0x15, 0x19, 0x4c, 0x15, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x14, 0x17, 0x4a,
+0x13, 0x17, 0x49, 0x13, 0x17, 0x48, 0x13, 0x17, 0x48, 0x13, 0x16, 0x47,
+0x13, 0x16, 0x47, 0x12, 0x16, 0x45, 0x12, 0x16, 0x45, 0x12, 0x16, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x12, 0x15, 0x43, 0x11, 0x15, 0x42,
+0x11, 0x15, 0x41, 0x11, 0x15, 0x41, 0x11, 0x14, 0x40, 0x11, 0x14, 0x40,
+0x11, 0x14, 0x3f, 0x11, 0x14, 0x3f, 0x10, 0x14, 0x3f, 0x10, 0x13, 0x3e,
+0x10, 0x13, 0x3e, 0x10, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x1e, 0x22, 0x47, 0x3f, 0x48, 0x8f, 0x41, 0x4b, 0x95, 0x35, 0x3f, 0x7d,
+0x30, 0x36, 0x70, 0x2e, 0x34, 0x6f, 0x2d, 0x33, 0x6e, 0x2f, 0x35, 0x74,
+0x31, 0x38, 0x7d, 0x31, 0x38, 0x7f, 0x30, 0x37, 0x80, 0x30, 0x37, 0x81,
+0x2f, 0x36, 0x84, 0x2f, 0x36, 0x86, 0x2e, 0x35, 0x87, 0x2d, 0x34, 0x89,
+0x2c, 0x34, 0x8c, 0x2c, 0x33, 0x8d, 0x2c, 0x32, 0x90, 0x2b, 0x31, 0x92,
+0x29, 0x31, 0x94, 0x28, 0x30, 0x97, 0x27, 0x2e, 0x98, 0x27, 0x2f, 0x9b,
+0x28, 0x30, 0x9d, 0x29, 0x32, 0xa1, 0x2b, 0x32, 0xa3, 0x2c, 0x33, 0xa5,
+0x2c, 0x35, 0xa8, 0x2d, 0x36, 0xab, 0x2f, 0x38, 0xae, 0x31, 0x3a, 0xb1,
+0x33, 0x3d, 0xb5, 0x36, 0x3f, 0xb8, 0x38, 0x42, 0xba, 0x38, 0x42, 0xbe,
+0x37, 0x41, 0xc1, 0x37, 0x41, 0xc5, 0x35, 0x40, 0xc8, 0x32, 0x3c, 0xcc,
+0x2f, 0x3a, 0xd0, 0x2c, 0x36, 0xd3, 0x2f, 0x3b, 0xd6, 0x3e, 0x4a, 0xdb,
+0x59, 0x67, 0xde, 0x39, 0x43, 0x84, 0x39, 0x43, 0x84, 0x3c, 0x47, 0x8c,
+0x2d, 0x36, 0x6c, 0x1e, 0x25, 0x51, 0x4a, 0x58, 0xb0, 0x4c, 0x5b, 0xdb,
+0x4b, 0x5a, 0xda, 0x51, 0x60, 0xd9, 0x4d, 0x5e, 0xd9, 0x50, 0x60, 0xd9,
+0x2d, 0x37, 0x6e, 0x3d, 0x49, 0x8d, 0x50, 0x61, 0xbe, 0x1b, 0x22, 0x4c,
+0x47, 0x54, 0x9e, 0x5c, 0x6e, 0xdf, 0x51, 0x61, 0xb9, 0x1e, 0x25, 0x53,
+0x1d, 0x24, 0x52, 0x1c, 0x23, 0x51, 0x8b, 0x8a, 0x27, 0xe3, 0xdd, 0x2e,
+0xe1, 0xda, 0x26, 0xe1, 0xda, 0x26, 0xd5, 0xcf, 0x1c, 0xdb, 0xd4, 0x1c,
+0xdd, 0xd6, 0x1c, 0xd4, 0xcd, 0x1b, 0x2c, 0x32, 0x40, 0x16, 0x1c, 0x47,
+0x15, 0x1b, 0x45, 0x14, 0x1b, 0x43, 0x14, 0x1a, 0x42, 0x13, 0x19, 0x40,
+0x12, 0x18, 0x3e, 0x54, 0x63, 0xd0, 0x56, 0x65, 0xdc, 0x4b, 0x5a, 0xdc,
+0x3d, 0x4a, 0xdd, 0x3b, 0x48, 0xde, 0x45, 0x53, 0xdf, 0x4a, 0x58, 0xdf,
+0x3f, 0x4b, 0xe0, 0x35, 0x42, 0xe1, 0x31, 0x3d, 0xe0, 0x30, 0x3b, 0xdc,
+0x2f, 0x3a, 0xd7, 0x37, 0x42, 0xd4, 0x45, 0x51, 0xd1, 0x4d, 0x58, 0xb9,
+0x39, 0x42, 0x82, 0x45, 0x4f, 0xa2, 0x4c, 0x57, 0xb9, 0x4a, 0x55, 0xbf,
+0x46, 0x50, 0xbb, 0x43, 0x4d, 0xb8, 0x3f, 0x49, 0xb5, 0x3d, 0x46, 0xb2,
+0x3a, 0x44, 0xaf, 0x38, 0x42, 0xac, 0x36, 0x3f, 0xa9, 0x33, 0x3b, 0xa6,
+0x31, 0x39, 0xa4, 0x2f, 0x36, 0xa1, 0x2d, 0x35, 0x9e, 0x2b, 0x33, 0x9c,
+0x29, 0x31, 0x99, 0x29, 0x31, 0x97, 0x27, 0x2f, 0x95, 0x27, 0x2e, 0x92,
+0x26, 0x2d, 0x91, 0x25, 0x2c, 0x8e, 0x25, 0x2a, 0x8c, 0x23, 0x2a, 0x8a,
+0x23, 0x29, 0x88, 0x23, 0x29, 0x86, 0x23, 0x29, 0x85, 0x23, 0x29, 0x82,
+0x24, 0x2a, 0x80, 0x24, 0x2a, 0x7f, 0x24, 0x2a, 0x7d, 0x23, 0x2a, 0x7b,
+0x24, 0x2a, 0x7a, 0x23, 0x2a, 0x78, 0x23, 0x2a, 0x77, 0x23, 0x2a, 0x75,
+0x23, 0x29, 0x73, 0x23, 0x29, 0x72, 0x22, 0x28, 0x70, 0x21, 0x28, 0x6f,
+0x21, 0x27, 0x6e, 0x20, 0x26, 0x6c, 0x20, 0x26, 0x6b, 0x1f, 0x25, 0x6a,
+0x1f, 0x25, 0x69, 0x1f, 0x25, 0x68, 0x1e, 0x24, 0x66, 0x1e, 0x23, 0x65,
+0x1d, 0x23, 0x64, 0x1d, 0x22, 0x63, 0x1c, 0x22, 0x62, 0x1c, 0x22, 0x61,
+0x1c, 0x21, 0x5f, 0x1c, 0x20, 0x5e, 0x1b, 0x20, 0x5d, 0x1b, 0x20, 0x5c,
+0x1b, 0x1f, 0x5b, 0x1b, 0x1f, 0x5a, 0x1a, 0x1f, 0x5a, 0x1a, 0x1e, 0x59,
+0x1a, 0x1e, 0x58, 0x19, 0x1d, 0x57, 0x18, 0x1d, 0x56, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52,
+0x17, 0x1b, 0x51, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f,
+0x16, 0x1a, 0x4e, 0x16, 0x19, 0x4d, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c,
+0x15, 0x18, 0x4b, 0x15, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x17, 0x49,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47,
+0x13, 0x16, 0x47, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x12, 0x14, 0x43, 0x11, 0x14, 0x42,
+0x11, 0x14, 0x41, 0x11, 0x14, 0x41, 0x11, 0x14, 0x40, 0x11, 0x14, 0x40,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3e, 0x10, 0x13, 0x3e,
+0x10, 0x13, 0x3e, 0x10, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x1e, 0x22, 0x47, 0x3c, 0x43, 0x8e, 0x3e, 0x46, 0x95, 0x32, 0x3a, 0x7e,
+0x2e, 0x34, 0x75, 0x2e, 0x34, 0x77, 0x2d, 0x33, 0x78, 0x2d, 0x33, 0x7a,
+0x2c, 0x33, 0x7c, 0x2c, 0x34, 0x7e, 0x2b, 0x32, 0x7f, 0x2b, 0x32, 0x81,
+0x2b, 0x32, 0x83, 0x2a, 0x30, 0x85, 0x29, 0x30, 0x86, 0x29, 0x2f, 0x88,
+0x28, 0x2f, 0x8b, 0x27, 0x2e, 0x8c, 0x26, 0x2e, 0x8f, 0x26, 0x2d, 0x91,
+0x26, 0x2c, 0x93, 0x26, 0x2d, 0x95, 0x26, 0x2e, 0x97, 0x27, 0x2f, 0x9a,
+0x29, 0x31, 0x9c, 0x2a, 0x31, 0x9f, 0x2a, 0x32, 0xa1, 0x2b, 0x34, 0xa4,
+0x2d, 0x36, 0xa7, 0x2f, 0x37, 0xaa, 0x31, 0x3a, 0xac, 0x33, 0x3c, 0xaf,
+0x36, 0x3f, 0xb2, 0x36, 0x3e, 0xb5, 0x35, 0x3e, 0xb9, 0x35, 0x3e, 0xbc,
+0x34, 0x3e, 0xbf, 0x32, 0x3c, 0xc2, 0x2f, 0x39, 0xc5, 0x2d, 0x36, 0xc9,
+0x2a, 0x34, 0xcd, 0x32, 0x3d, 0xd0, 0x41, 0x4d, 0xd4, 0x4f, 0x5b, 0xbf,
+0x46, 0x50, 0xa1, 0x4c, 0x58, 0xb4, 0x4d, 0x58, 0xb5, 0x46, 0x51, 0xa2,
+0x3c, 0x47, 0x8c, 0x54, 0x62, 0xcd, 0x49, 0x58, 0xdc, 0x44, 0x52, 0xdc,
+0x4a, 0x59, 0xdb, 0x49, 0x58, 0xdb, 0x47, 0x56, 0xda, 0x56, 0x66, 0xd5,
+0x37, 0x42, 0x81, 0x56, 0x67, 0xdc, 0x3a, 0x45, 0x85, 0x1a, 0x20, 0x49,
+0x56, 0x67, 0xe0, 0x56, 0x68, 0xdf, 0x54, 0x64, 0xc1, 0x1c, 0x22, 0x4d,
+0x1b, 0x21, 0x4d, 0x1a, 0x20, 0x4c, 0x2f, 0x34, 0x43, 0xd4, 0xcf, 0x19,
+0xd1, 0xcf, 0x1a, 0xce, 0xc7, 0x19, 0xcc, 0xc6, 0x19, 0xe0, 0xde, 0x25,
+0xde, 0xd8, 0x1f, 0xde, 0xd7, 0x1d, 0xce, 0xc8, 0x0e, 0x2b, 0x30, 0x3c,
+0x14, 0x1a, 0x42, 0x13, 0x19, 0x40, 0x13, 0x19, 0x3f, 0x12, 0x18, 0x3e,
+0x11, 0x17, 0x3c, 0x3f, 0x4b, 0x93, 0x51, 0x61, 0xdd, 0x4e, 0x5c, 0xdd,
+0x43, 0x52, 0xde, 0x38, 0x44, 0xdf, 0x37, 0x43, 0xdf, 0x40, 0x4c, 0xe0,
+0x46, 0x53, 0xe0, 0x3b, 0x46, 0xe0, 0x34, 0x3f, 0xdd, 0x31, 0x3c, 0xd9,
+0x2f, 0x3a, 0xd5, 0x2f, 0x39, 0xd1, 0x31, 0x3c, 0xce, 0x3c, 0x47, 0xca,
+0x49, 0x55, 0xc6, 0x3d, 0x46, 0x8b, 0x41, 0x4a, 0x96, 0x49, 0x54, 0xb0,
+0x49, 0x54, 0xba, 0x44, 0x4e, 0xb6, 0x40, 0x4b, 0xb3, 0x3d, 0x48, 0xb0,
+0x3b, 0x45, 0xad, 0x39, 0x42, 0xab, 0x37, 0x40, 0xa8, 0x34, 0x3e, 0xa5,
+0x33, 0x3b, 0xa2, 0x31, 0x39, 0xa0, 0x2f, 0x36, 0x9d, 0x2d, 0x35, 0x9b,
+0x2b, 0x33, 0x98, 0x29, 0x31, 0x96, 0x28, 0x30, 0x94, 0x27, 0x2f, 0x92,
+0x26, 0x2d, 0x90, 0x25, 0x2c, 0x8d, 0x25, 0x2b, 0x8c, 0x24, 0x2a, 0x89,
+0x23, 0x29, 0x87, 0x22, 0x28, 0x85, 0x21, 0x28, 0x84, 0x21, 0x28, 0x82,
+0x22, 0x27, 0x80, 0x22, 0x27, 0x7e, 0x21, 0x27, 0x7c, 0x22, 0x27, 0x7b,
+0x21, 0x27, 0x79, 0x22, 0x28, 0x78, 0x22, 0x27, 0x76, 0x22, 0x27, 0x74,
+0x21, 0x27, 0x73, 0x21, 0x27, 0x71, 0x21, 0x27, 0x70, 0x21, 0x27, 0x6e,
+0x20, 0x26, 0x6d, 0x20, 0x26, 0x6c, 0x1f, 0x25, 0x6b, 0x1f, 0x25, 0x6a,
+0x1f, 0x25, 0x69, 0x1e, 0x24, 0x67, 0x1e, 0x23, 0x66, 0x1e, 0x23, 0x65,
+0x1d, 0x22, 0x64, 0x1c, 0x22, 0x63, 0x1c, 0x21, 0x61, 0x1c, 0x21, 0x60,
+0x1c, 0x21, 0x5f, 0x1b, 0x20, 0x5e, 0x1b, 0x20, 0x5d, 0x1b, 0x20, 0x5c,
+0x1b, 0x1f, 0x5b, 0x1a, 0x1f, 0x5a, 0x1a, 0x1e, 0x59, 0x1a, 0x1e, 0x58,
+0x19, 0x1d, 0x57, 0x19, 0x1d, 0x57, 0x18, 0x1d, 0x56, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x52,
+0x17, 0x1b, 0x51, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x1a, 0x4f,
+0x16, 0x1a, 0x4e, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c,
+0x15, 0x18, 0x4b, 0x15, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x12, 0x14, 0x43, 0x11, 0x14, 0x42,
+0x11, 0x14, 0x41, 0x11, 0x14, 0x41, 0x10, 0x14, 0x40, 0x10, 0x14, 0x40,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3e, 0x10, 0x13, 0x3e,
+0x10, 0x13, 0x3e, 0x0f, 0x13, 0x3d, 0x0f, 0x11, 0x37, 0x01, 0x01, 0x05,
+0x1b, 0x1f, 0x46, 0x37, 0x3e, 0x8e, 0x38, 0x40, 0x94, 0x2f, 0x35, 0x7e,
+0x2a, 0x30, 0x75, 0x2a, 0x30, 0x76, 0x2a, 0x30, 0x78, 0x29, 0x2f, 0x7a,
+0x29, 0x2f, 0x7b, 0x28, 0x2e, 0x7d, 0x28, 0x2e, 0x7e, 0x27, 0x2e, 0x80,
+0x27, 0x2e, 0x82, 0x26, 0x2d, 0x84, 0x25, 0x2c, 0x86, 0x25, 0x2c, 0x87,
+0x25, 0x2b, 0x8a, 0x24, 0x2a, 0x8c, 0x24, 0x2b, 0x8d, 0x24, 0x2b, 0x90,
+0x26, 0x2c, 0x92, 0x26, 0x2d, 0x94, 0x27, 0x2f, 0x97, 0x27, 0x2f, 0x99,
+0x28, 0x30, 0x9c, 0x2a, 0x31, 0x9e, 0x2b, 0x33, 0xa0, 0x2c, 0x35, 0xa3,
+0x2f, 0x36, 0xa5, 0x30, 0x39, 0xa8, 0x32, 0x3a, 0xab, 0x33, 0x3c, 0xae,
+0x32, 0x3c, 0xb1, 0x31, 0x3b, 0xb4, 0x32, 0x3b, 0xb7, 0x32, 0x3b, 0xba,
+0x2f, 0x38, 0xbd, 0x2d, 0x37, 0xc0, 0x2b, 0x34, 0xc3, 0x2a, 0x34, 0xc7,
+0x34, 0x3e, 0xca, 0x43, 0x4f, 0xce, 0x47, 0x52, 0xa7, 0x48, 0x54, 0xab,
+0x4e, 0x5b, 0xbc, 0x53, 0x5f, 0xca, 0x53, 0x60, 0xca, 0x4d, 0x58, 0xb5,
+0x56, 0x64, 0xde, 0x45, 0x53, 0xde, 0x3e, 0x4b, 0xde, 0x43, 0x51, 0xdd,
+0x45, 0x53, 0xdc, 0x43, 0x51, 0xdc, 0x4a, 0x59, 0xdc, 0x4b, 0x59, 0xb2,
+0x58, 0x68, 0xdd, 0x51, 0x61, 0xdd, 0x17, 0x1d, 0x43, 0x4e, 0x5c, 0xb1,
+0x4f, 0x5e, 0xe1, 0x52, 0x62, 0xe0, 0x57, 0x68, 0xcd, 0x1a, 0x20, 0x49,
+0x19, 0x1f, 0x48, 0x18, 0x1e, 0x48, 0x2f, 0x3a, 0x72, 0x86, 0x8f, 0x8f,
+0xde, 0xd8, 0x1f, 0xd4, 0xcd, 0x1b, 0xcc, 0xc6, 0x19, 0xe0, 0xde, 0x25,
+0xe0, 0xde, 0x25, 0xdd, 0xd6, 0x1c, 0xc9, 0xc3, 0x18, 0xce, 0xc8, 0x0d,
+0x41, 0x44, 0x32, 0x12, 0x18, 0x3e, 0x12, 0x17, 0x3c, 0x11, 0x17, 0x3b,
+0x11, 0x16, 0x39, 0x27, 0x2c, 0x32, 0x84, 0x8b, 0x95, 0xb2, 0xb2, 0x4e,
+0x48, 0x56, 0xdf, 0x3d, 0x4a, 0xdf, 0x33, 0x3e, 0xe0, 0x34, 0x40, 0xe0,
+0x3b, 0x46, 0xe0, 0x41, 0x4e, 0xdd, 0x3a, 0x45, 0xd9, 0x33, 0x3f, 0xd6,
+0x30, 0x3a, 0xd2, 0x2f, 0x39, 0xce, 0x2e, 0x38, 0xcb, 0x2f, 0x38, 0xc8,
+0x37, 0x40, 0xc4, 0x41, 0x4b, 0xc1, 0x4c, 0x58, 0xbe, 0x3f, 0x49, 0x95,
+0x45, 0x50, 0xa8, 0x48, 0x52, 0xb4, 0x44, 0x4d, 0xb1, 0x3f, 0x49, 0xae,
+0x3d, 0x46, 0xab, 0x3a, 0x43, 0xa9, 0x37, 0x41, 0xa6, 0x36, 0x3f, 0xa4,
+0x34, 0x3d, 0xa1, 0x33, 0x3a, 0x9f, 0x30, 0x38, 0x9c, 0x2e, 0x35, 0x9a,
+0x2d, 0x34, 0x97, 0x2a, 0x32, 0x95, 0x29, 0x30, 0x93, 0x28, 0x2f, 0x91,
+0x26, 0x2e, 0x8e, 0x25, 0x2c, 0x8c, 0x24, 0x2b, 0x8b, 0x24, 0x2a, 0x88,
+0x23, 0x29, 0x86, 0x22, 0x28, 0x84, 0x22, 0x28, 0x83, 0x21, 0x27, 0x81,
+0x20, 0x26, 0x7f, 0x1f, 0x25, 0x7d, 0x1f, 0x25, 0x7b, 0x20, 0x25, 0x7b,
+0x20, 0x25, 0x79, 0x20, 0x25, 0x77, 0x1f, 0x25, 0x75, 0x20, 0x25, 0x74,
+0x20, 0x25, 0x72, 0x20, 0x25, 0x71, 0x20, 0x25, 0x6f, 0x20, 0x25, 0x6e,
+0x1f, 0x25, 0x6c, 0x1f, 0x25, 0x6c, 0x1f, 0x25, 0x6a, 0x1f, 0x25, 0x69,
+0x1f, 0x24, 0x68, 0x1e, 0x23, 0x67, 0x1e, 0x23, 0x66, 0x1e, 0x23, 0x65,
+0x1c, 0x22, 0x63, 0x1c, 0x22, 0x62, 0x1c, 0x21, 0x61, 0x1c, 0x21, 0x60,
+0x1c, 0x21, 0x5f, 0x1b, 0x20, 0x5e, 0x1b, 0x20, 0x5d, 0x1b, 0x1f, 0x5c,
+0x1a, 0x1f, 0x5b, 0x1a, 0x1f, 0x5a, 0x1a, 0x1e, 0x59, 0x1a, 0x1e, 0x58,
+0x19, 0x1d, 0x57, 0x18, 0x1d, 0x56, 0x18, 0x1d, 0x56, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x52,
+0x17, 0x1b, 0x51, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x1a, 0x4f,
+0x16, 0x1a, 0x4e, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c,
+0x15, 0x18, 0x4b, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x11, 0x14, 0x42, 0x11, 0x14, 0x42,
+0x11, 0x14, 0x41, 0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3e, 0x10, 0x13, 0x3e,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x1a, 0x1d, 0x46, 0x32, 0x39, 0x8d, 0x34, 0x3b, 0x94, 0x2a, 0x30, 0x7d,
+0x27, 0x2d, 0x75, 0x27, 0x2d, 0x76, 0x26, 0x2d, 0x77, 0x26, 0x2c, 0x79,
+0x25, 0x2c, 0x7b, 0x24, 0x2b, 0x7d, 0x25, 0x2a, 0x7e, 0x24, 0x2a, 0x7f,
+0x24, 0x2a, 0x81, 0x23, 0x29, 0x83, 0x22, 0x29, 0x85, 0x22, 0x29, 0x87,
+0x22, 0x2a, 0x89, 0x23, 0x2a, 0x8b, 0x24, 0x2a, 0x8c, 0x25, 0x2b, 0x8f,
+0x25, 0x2c, 0x91, 0x26, 0x2d, 0x93, 0x26, 0x2e, 0x96, 0x28, 0x30, 0x97,
+0x29, 0x31, 0x9a, 0x2b, 0x32, 0x9c, 0x2c, 0x35, 0x9f, 0x2e, 0x35, 0xa1,
+0x2f, 0x38, 0xa4, 0x31, 0x3a, 0xa7, 0x31, 0x3a, 0xa9, 0x30, 0x39, 0xac,
+0x30, 0x39, 0xaf, 0x2f, 0x39, 0xb1, 0x2e, 0x37, 0xb4, 0x2c, 0x36, 0xb7,
+0x2b, 0x34, 0xbb, 0x28, 0x32, 0xbe, 0x2c, 0x35, 0xc0, 0x35, 0x3f, 0xc4,
+0x44, 0x50, 0xc7, 0x46, 0x50, 0xa6, 0x49, 0x54, 0xaf, 0x50, 0x5c, 0xc1,
+0x55, 0x62, 0xd2, 0x53, 0x62, 0xce, 0x53, 0x5f, 0xca, 0x51, 0x5f, 0xdf,
+0x43, 0x50, 0xdf, 0x3a, 0x46, 0xdf, 0x3e, 0x4a, 0xde, 0x41, 0x4f, 0xde,
+0x3f, 0x4d, 0xdd, 0x3f, 0x4d, 0xdd, 0x51, 0x60, 0xdd, 0x59, 0x68, 0xdc,
+0x4b, 0x5a, 0xde, 0x5a, 0x6a, 0xdf, 0x16, 0x1c, 0x41, 0x53, 0x62, 0xe1,
+0x4b, 0x5a, 0xe1, 0x4f, 0x5f, 0xe0, 0x59, 0x69, 0xd4, 0x18, 0x1e, 0x45,
+0x17, 0x1d, 0x45, 0x16, 0x1c, 0x43, 0x47, 0x55, 0xa7, 0x53, 0x63, 0xda,
+0xb6, 0xb7, 0x4d, 0xd7, 0xd5, 0x1c, 0xdb, 0xd4, 0x1c, 0xe0, 0xd9, 0x23,
+0xdd, 0xd6, 0x1c, 0xd4, 0xcd, 0x1b, 0xd7, 0xd5, 0x1c, 0xd4, 0xcd, 0x1b,
+0xdb, 0xd4, 0x1c, 0xcd, 0xc8, 0x0c, 0xa3, 0xa1, 0x20, 0xa2, 0x9f, 0x1d,
+0xcd, 0xc8, 0x0c, 0xde, 0xdb, 0x1d, 0xe3, 0xdd, 0x30, 0xdd, 0xd6, 0x1c,
+0x46, 0x52, 0xdf, 0x42, 0x4f, 0xe0, 0x37, 0x43, 0xe1, 0x2e, 0x39, 0xe0,
+0x31, 0x3c, 0xdd, 0x39, 0x44, 0xda, 0x40, 0x4b, 0xd6, 0x39, 0x44, 0xd3,
+0x33, 0x3e, 0xcf, 0x2f, 0x39, 0xcc, 0x2f, 0x38, 0xc8, 0x2c, 0x36, 0xc5,
+0x2b, 0x34, 0xc1, 0x31, 0x3b, 0xbe, 0x39, 0x43, 0xbc, 0x43, 0x4d, 0xb8,
+0x41, 0x4a, 0x9a, 0x43, 0x4d, 0xa0, 0x47, 0x50, 0xb0, 0x42, 0x4b, 0xad,
+0x3e, 0x48, 0xaa, 0x3b, 0x44, 0xa7, 0x39, 0x41, 0xa5, 0x37, 0x40, 0xa2,
+0x35, 0x3e, 0xa0, 0x33, 0x3b, 0x9d, 0x31, 0x39, 0x9b, 0x30, 0x38, 0x98,
+0x2e, 0x35, 0x96, 0x2c, 0x34, 0x94, 0x2a, 0x32, 0x91, 0x29, 0x30, 0x90,
+0x27, 0x2e, 0x8d, 0x26, 0x2d, 0x8b, 0x25, 0x2c, 0x8a, 0x24, 0x2b, 0x88,
+0x23, 0x2a, 0x85, 0x23, 0x29, 0x84, 0x22, 0x28, 0x82, 0x21, 0x27, 0x80,
+0x20, 0x26, 0x7e, 0x20, 0x25, 0x7d, 0x1f, 0x25, 0x7b, 0x1e, 0x24, 0x7a,
+0x1e, 0x24, 0x78, 0x1e, 0x24, 0x77, 0x1e, 0x24, 0x75, 0x1e, 0x23, 0x73,
+0x1e, 0x23, 0x72, 0x1e, 0x23, 0x70, 0x1e, 0x23, 0x6f, 0x1e, 0x23, 0x6e,
+0x1e, 0x23, 0x6c, 0x1e, 0x23, 0x6c, 0x1e, 0x23, 0x6a, 0x1e, 0x23, 0x69,
+0x1e, 0x23, 0x68, 0x1e, 0x23, 0x67, 0x1e, 0x22, 0x65, 0x1d, 0x22, 0x64,
+0x1c, 0x22, 0x63, 0x1c, 0x21, 0x62, 0x1c, 0x21, 0x61, 0x1c, 0x20, 0x60,
+0x1c, 0x20, 0x5f, 0x1b, 0x20, 0x5e, 0x1b, 0x20, 0x5d, 0x1b, 0x1f, 0x5c,
+0x1a, 0x1f, 0x5b, 0x1a, 0x1e, 0x5a, 0x1a, 0x1e, 0x59, 0x19, 0x1d, 0x58,
+0x19, 0x1d, 0x57, 0x18, 0x1d, 0x56, 0x18, 0x1c, 0x55, 0x18, 0x1c, 0x55,
+0x18, 0x1c, 0x54, 0x17, 0x1c, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x51,
+0x17, 0x1b, 0x51, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x1a, 0x4e,
+0x16, 0x19, 0x4e, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c, 0x15, 0x19, 0x4c,
+0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x14, 0x18, 0x4a, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x15, 0x44, 0x11, 0x14, 0x42, 0x11, 0x14, 0x42,
+0x10, 0x14, 0x41, 0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3e, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x37, 0x01, 0x01, 0x05,
+0x17, 0x1b, 0x45, 0x2e, 0x37, 0x8d, 0x2f, 0x37, 0x93, 0x28, 0x2e, 0x7d,
+0x24, 0x29, 0x74, 0x24, 0x29, 0x75, 0x24, 0x29, 0x77, 0x23, 0x29, 0x78,
+0x22, 0x28, 0x7a, 0x22, 0x27, 0x7c, 0x21, 0x28, 0x7e, 0x21, 0x28, 0x7f,
+0x21, 0x27, 0x80, 0x20, 0x27, 0x82, 0x21, 0x28, 0x85, 0x22, 0x29, 0x86,
+0x23, 0x29, 0x88, 0x23, 0x2a, 0x8a, 0x24, 0x2a, 0x8c, 0x25, 0x2b, 0x8e,
+0x25, 0x2c, 0x90, 0x26, 0x2d, 0x92, 0x27, 0x2f, 0x94, 0x28, 0x30, 0x97,
+0x2a, 0x31, 0x99, 0x2b, 0x33, 0x9c, 0x2d, 0x35, 0x9d, 0x2f, 0x37, 0xa0,
+0x2f, 0x36, 0xa3, 0x2f, 0x36, 0xa5, 0x2e, 0x36, 0xa7, 0x2e, 0x36, 0xab,
+0x2e, 0x36, 0xad, 0x2b, 0x35, 0xb0, 0x2b, 0x33, 0xb3, 0x29, 0x32, 0xb6,
+0x27, 0x30, 0xb9, 0x2d, 0x36, 0xbc, 0x37, 0x40, 0xbe, 0x45, 0x50, 0xc1,
+0x46, 0x51, 0xa7, 0x4b, 0x56, 0xb7, 0x4f, 0x5b, 0xc5, 0x51, 0x5f, 0xce,
+0x53, 0x60, 0xd1, 0x55, 0x62, 0xd2, 0x4f, 0x5d, 0xd8, 0x40, 0x4d, 0xdc,
+0x36, 0x41, 0xdf, 0x39, 0x45, 0xdf, 0x3d, 0x49, 0xdf, 0x3c, 0x48, 0xdf,
+0x3a, 0x46, 0xde, 0x45, 0x52, 0xde, 0x58, 0x67, 0xde, 0x4c, 0x5b, 0xdf,
+0x46, 0x55, 0xe0, 0x50, 0x5e, 0xb9, 0x56, 0x64, 0xc8, 0x45, 0x54, 0xe2,
+0x47, 0x56, 0xe2, 0x4d, 0x5c, 0xe1, 0x5c, 0x6c, 0xde, 0x16, 0x1c, 0x42,
+0x15, 0x1b, 0x41, 0x14, 0x1a, 0x40, 0x57, 0x68, 0xd7, 0x4e, 0x5e, 0xdc,
+0x50, 0x60, 0xdb, 0xb2, 0xb3, 0x41, 0xe1, 0xdf, 0x2a, 0xd7, 0xd5, 0x1c,
+0xbb, 0xb5, 0x14, 0xd7, 0xd0, 0x1c, 0xd9, 0xd2, 0x1c, 0xd1, 0xcf, 0x1a,
+0xdf, 0xd8, 0x20, 0xde, 0xd8, 0x1f, 0xe1, 0xda, 0x26, 0xdf, 0xd9, 0x22,
+0xdf, 0xd9, 0x22, 0xdd, 0xd6, 0x1c, 0xd5, 0xcf, 0x1c, 0xc5, 0xc3, 0x37,
+0x42, 0x4f, 0xe0, 0x40, 0x4d, 0xe1, 0x3c, 0x49, 0xe0, 0x33, 0x3f, 0xdd,
+0x2d, 0x37, 0xd9, 0x31, 0x3c, 0xd6, 0x37, 0x42, 0xd3, 0x3f, 0x4a, 0xcf,
+0x37, 0x42, 0xcc, 0x32, 0x3c, 0xc8, 0x2e, 0x38, 0xc6, 0x2d, 0x36, 0xc2,
+0x2c, 0x35, 0xbf, 0x2b, 0x34, 0xbc, 0x2d, 0x36, 0xb9, 0x34, 0x3d, 0xb6,
+0x3c, 0x46, 0xb3, 0x45, 0x4f, 0xb1, 0x4a, 0x54, 0xad, 0x45, 0x4f, 0xab,
+0x41, 0x4a, 0xa8, 0x3e, 0x47, 0xa6, 0x3a, 0x43, 0xa3, 0x38, 0x41, 0xa1,
+0x36, 0x3e, 0x9e, 0x33, 0x3c, 0x9c, 0x32, 0x3a, 0x9a, 0x30, 0x38, 0x97,
+0x2e, 0x36, 0x95, 0x2d, 0x34, 0x93, 0x2c, 0x33, 0x90, 0x29, 0x31, 0x8f,
+0x28, 0x2f, 0x8c, 0x27, 0x2e, 0x8a, 0x26, 0x2d, 0x89, 0x25, 0x2c, 0x87,
+0x23, 0x2a, 0x85, 0x22, 0x29, 0x83, 0x22, 0x28, 0x81, 0x22, 0x27, 0x80,
+0x21, 0x26, 0x7e, 0x20, 0x25, 0x7c, 0x1f, 0x25, 0x7a, 0x1f, 0x24, 0x79,
+0x1e, 0x23, 0x78, 0x1d, 0x23, 0x76, 0x1c, 0x22, 0x74, 0x1c, 0x22, 0x73,
+0x1c, 0x22, 0x71, 0x1c, 0x22, 0x70, 0x1d, 0x21, 0x6e, 0x1d, 0x21, 0x6d,
+0x1d, 0x22, 0x6c, 0x1d, 0x21, 0x6b, 0x1c, 0x21, 0x6a, 0x1d, 0x22, 0x69,
+0x1c, 0x21, 0x67, 0x1c, 0x21, 0x66, 0x1c, 0x21, 0x65, 0x1c, 0x21, 0x64,
+0x1c, 0x21, 0x63, 0x1c, 0x21, 0x62, 0x1c, 0x21, 0x61, 0x1c, 0x20, 0x5f,
+0x1b, 0x20, 0x5e, 0x1b, 0x1f, 0x5d, 0x1a, 0x1f, 0x5c, 0x1a, 0x1f, 0x5b,
+0x1a, 0x1e, 0x5a, 0x1a, 0x1e, 0x5a, 0x1a, 0x1e, 0x59, 0x19, 0x1d, 0x58,
+0x18, 0x1d, 0x57, 0x18, 0x1c, 0x56, 0x18, 0x1c, 0x55, 0x18, 0x1c, 0x54,
+0x17, 0x1c, 0x54, 0x17, 0x1b, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x51,
+0x16, 0x1a, 0x50, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x19, 0x4e,
+0x16, 0x19, 0x4e, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c, 0x15, 0x19, 0x4c,
+0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x44, 0x12, 0x14, 0x43, 0x11, 0x14, 0x42, 0x11, 0x14, 0x41,
+0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x16, 0x1a, 0x45, 0x2c, 0x32, 0x8b, 0x2d, 0x35, 0x93, 0x26, 0x2b, 0x7c,
+0x21, 0x27, 0x74, 0x21, 0x26, 0x74, 0x20, 0x26, 0x76, 0x20, 0x26, 0x78,
+0x1f, 0x26, 0x79, 0x1f, 0x26, 0x7b, 0x1f, 0x25, 0x7d, 0x1f, 0x25, 0x7e,
+0x20, 0x26, 0x80, 0x20, 0x27, 0x82, 0x21, 0x28, 0x84, 0x22, 0x28, 0x85,
+0x23, 0x28, 0x87, 0x23, 0x29, 0x89, 0x24, 0x2a, 0x8b, 0x24, 0x2b, 0x8d,
+0x25, 0x2c, 0x8f, 0x26, 0x2e, 0x91, 0x28, 0x2f, 0x93, 0x2a, 0x31, 0x96,
+0x2b, 0x33, 0x97, 0x2c, 0x34, 0x9a, 0x2d, 0x35, 0x9c, 0x2d, 0x35, 0x9f,
+0x2c, 0x35, 0xa1, 0x2d, 0x35, 0xa4, 0x2b, 0x34, 0xa6, 0x2b, 0x34, 0xa8,
+0x2a, 0x32, 0xab, 0x29, 0x31, 0xae, 0x27, 0x2f, 0xb1, 0x27, 0x2f, 0xb4,
+0x2e, 0x37, 0xb7, 0x37, 0x40, 0xb9, 0x46, 0x50, 0xbc, 0x48, 0x52, 0xaf,
+0x4c, 0x58, 0xc0, 0x4e, 0x5a, 0xc5, 0x4e, 0x5a, 0xc8, 0x50, 0x5c, 0xcb,
+0x51, 0x5f, 0xce, 0x4c, 0x59, 0xd1, 0x40, 0x4c, 0xd5, 0x36, 0x41, 0xd8,
+0x36, 0x41, 0xdb, 0x38, 0x44, 0xde, 0x39, 0x44, 0xe0, 0x36, 0x42, 0xdf,
+0x3b, 0x47, 0xdf, 0x4b, 0x58, 0xe0, 0x4e, 0x5b, 0xe0, 0x42, 0x50, 0xe0,
+0x4d, 0x5b, 0xe1, 0x3d, 0x48, 0x88, 0x50, 0x5e, 0xe2, 0x41, 0x4f, 0xe3,
+0x43, 0x51, 0xe2, 0x4b, 0x5a, 0xe1, 0x5c, 0x6c, 0xe0, 0x14, 0x1a, 0x3e,
+0x14, 0x19, 0x3d, 0x13, 0x19, 0x3d, 0x54, 0x64, 0xdd, 0x4a, 0x58, 0xdc,
+0x4b, 0x5a, 0xdc, 0x57, 0x68, 0xdc, 0xa0, 0xa3, 0x66, 0xe0, 0xd9, 0x23,
+0xdb, 0xd4, 0x1c, 0xd1, 0xcf, 0x1a, 0xcb, 0xc4, 0x18, 0xcf, 0xc9, 0x1a,
+0xce, 0xcc, 0x19, 0xdb, 0xd4, 0x1c, 0xe5, 0xdf, 0x34, 0xe2, 0xdc, 0x2d,
+0xd3, 0xcf, 0x18, 0x8c, 0x8a, 0x25, 0x3d, 0x3f, 0x28, 0x3e, 0x48, 0x8d,
+0x47, 0x54, 0xe1, 0x3f, 0x4b, 0xdf, 0x3d, 0x49, 0xdc, 0x39, 0x45, 0xd9,
+0x31, 0x3c, 0xd6, 0x2c, 0x36, 0xd3, 0x2f, 0x3a, 0xcf, 0x37, 0x40, 0xcc,
+0x3c, 0x46, 0xc9, 0x37, 0x40, 0xc6, 0x32, 0x3b, 0xc3, 0x2e, 0x36, 0xc0,
+0x2b, 0x35, 0xbd, 0x2a, 0x33, 0xb9, 0x2a, 0x32, 0xb7, 0x2a, 0x32, 0xb4,
+0x2f, 0x39, 0xb1, 0x36, 0x3f, 0xae, 0x3d, 0x47, 0xac, 0x46, 0x50, 0xa9,
+0x43, 0x4d, 0xa6, 0x40, 0x48, 0xa4, 0x3d, 0x45, 0xa2, 0x39, 0x42, 0x9f,
+0x36, 0x3f, 0x9d, 0x34, 0x3d, 0x9a, 0x32, 0x3a, 0x98, 0x31, 0x39, 0x96,
+0x2f, 0x37, 0x94, 0x2e, 0x35, 0x91, 0x2d, 0x34, 0x90, 0x2b, 0x32, 0x8e,
+0x29, 0x31, 0x8b, 0x28, 0x2f, 0x8a, 0x27, 0x2d, 0x88, 0x25, 0x2c, 0x86,
+0x24, 0x2b, 0x84, 0x23, 0x2a, 0x82, 0x22, 0x29, 0x81, 0x22, 0x27, 0x7f,
+0x21, 0x26, 0x7d, 0x20, 0x26, 0x7b, 0x1f, 0x25, 0x7a, 0x1f, 0x24, 0x79,
+0x1e, 0x23, 0x77, 0x1e, 0x23, 0x75, 0x1d, 0x23, 0x74, 0x1c, 0x22, 0x72,
+0x1c, 0x22, 0x71, 0x1b, 0x21, 0x6f, 0x1b, 0x21, 0x6e, 0x1b, 0x20, 0x6c,
+0x1b, 0x20, 0x6c, 0x1b, 0x20, 0x6b, 0x1b, 0x20, 0x6a, 0x1b, 0x20, 0x68,
+0x1b, 0x20, 0x67, 0x1c, 0x20, 0x66, 0x1b, 0x20, 0x65, 0x1b, 0x1f, 0x63,
+0x1b, 0x20, 0x62, 0x1b, 0x20, 0x61, 0x1b, 0x1f, 0x60, 0x1b, 0x20, 0x5f,
+0x1b, 0x1f, 0x5e, 0x1b, 0x1f, 0x5d, 0x1a, 0x1f, 0x5c, 0x1a, 0x1e, 0x5b,
+0x1a, 0x1e, 0x5a, 0x19, 0x1d, 0x59, 0x19, 0x1d, 0x58, 0x19, 0x1d, 0x57,
+0x18, 0x1d, 0x57, 0x18, 0x1c, 0x56, 0x18, 0x1c, 0x55, 0x17, 0x1b, 0x54,
+0x17, 0x1b, 0x53, 0x17, 0x1b, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x51,
+0x16, 0x1a, 0x50, 0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x19, 0x4e,
+0x15, 0x19, 0x4d, 0x15, 0x19, 0x4d, 0x15, 0x19, 0x4c, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x44,
+0x12, 0x15, 0x44, 0x12, 0x14, 0x43, 0x11, 0x14, 0x42, 0x10, 0x14, 0x41,
+0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x14, 0x17, 0x45, 0x29, 0x2f, 0x8b, 0x2a, 0x31, 0x90, 0x23, 0x29, 0x7c,
+0x1e, 0x24, 0x72, 0x1e, 0x24, 0x74, 0x1e, 0x24, 0x75, 0x1e, 0x24, 0x77,
+0x1d, 0x24, 0x79, 0x1d, 0x24, 0x7a, 0x1e, 0x25, 0x7c, 0x1f, 0x25, 0x7d,
+0x20, 0x26, 0x7f, 0x20, 0x27, 0x81, 0x21, 0x28, 0x83, 0x21, 0x28, 0x84,
+0x22, 0x28, 0x86, 0x24, 0x29, 0x88, 0x24, 0x2a, 0x8a, 0x24, 0x2c, 0x8b,
+0x26, 0x2d, 0x8e, 0x27, 0x2f, 0x90, 0x29, 0x30, 0x92, 0x2a, 0x31, 0x94,
+0x2a, 0x32, 0x96, 0x2a, 0x32, 0x98, 0x2a, 0x32, 0x9b, 0x2b, 0x33, 0x9d,
+0x2b, 0x32, 0xa0, 0x2a, 0x32, 0xa2, 0x29, 0x31, 0xa4, 0x28, 0x30, 0xa7,
+0x27, 0x2f, 0xa9, 0x27, 0x2e, 0xac, 0x28, 0x30, 0xae, 0x2e, 0x37, 0xb1,
+0x38, 0x41, 0xb4, 0x46, 0x51, 0xb7, 0x4c, 0x57, 0xb9, 0x4a, 0x55, 0xbc,
+0x4a, 0x56, 0xbf, 0x4b, 0x56, 0xc2, 0x4c, 0x57, 0xc5, 0x4e, 0x5a, 0xc8,
+0x4a, 0x57, 0xcb, 0x3f, 0x4b, 0xce, 0x36, 0x40, 0xd1, 0x35, 0x40, 0xd4,
+0x36, 0x41, 0xd7, 0x37, 0x43, 0xda, 0x34, 0x40, 0xdd, 0x33, 0x3e, 0xe0,
+0x3f, 0x4b, 0xe0, 0x4f, 0x5d, 0xe0, 0x42, 0x50, 0xe1, 0x3d, 0x49, 0xe1,
+0x54, 0x62, 0xe2, 0x5d, 0x6c, 0xe1, 0x42, 0x50, 0xe3, 0x3e, 0x4b, 0xe3,
+0x40, 0x4e, 0xe3, 0x4a, 0x58, 0xe2, 0x5c, 0x6c, 0xe1, 0x13, 0x18, 0x3b,
+0x13, 0x18, 0x3b, 0x12, 0x17, 0x3a, 0x4d, 0x5c, 0xde, 0x45, 0x53, 0xde,
+0x47, 0x55, 0xdd, 0x52, 0x61, 0xdd, 0x49, 0x56, 0xdd, 0x65, 0x6e, 0xae,
+0x9d, 0x9f, 0x66, 0xd2, 0xcd, 0x1f, 0xd4, 0xcd, 0x1b, 0xd4, 0xcd, 0x1b,
+0xc1, 0xbf, 0x16, 0x9f, 0x9c, 0x18, 0x97, 0x97, 0x3a, 0x74, 0x7e, 0xa3,
+0x55, 0x63, 0xcc, 0x4e, 0x5a, 0xb6, 0x1c, 0x22, 0x49, 0x0d, 0x11, 0x2f,
+0x58, 0x66, 0xde, 0x3e, 0x4a, 0xdb, 0x3c, 0x48, 0xd7, 0x3c, 0x47, 0xd5,
+0x36, 0x41, 0xd2, 0x2f, 0x3a, 0xcf, 0x2b, 0x35, 0xcc, 0x2f, 0x39, 0xc9,
+0x34, 0x3e, 0xc6, 0x3b, 0x45, 0xc3, 0x34, 0x3e, 0xc0, 0x31, 0x39, 0xbd,
+0x2d, 0x36, 0xba, 0x2b, 0x34, 0xb7, 0x2a, 0x32, 0xb5, 0x2a, 0x32, 0xb2,
+0x29, 0x31, 0xaf, 0x2c, 0x34, 0xac, 0x31, 0x3a, 0xa9, 0x37, 0x40, 0xa7,
+0x3e, 0x47, 0xa5, 0x42, 0x4c, 0xa2, 0x3e, 0x47, 0xa0, 0x3b, 0x44, 0x9e,
+0x38, 0x40, 0x9b, 0x35, 0x3d, 0x99, 0x33, 0x3b, 0x97, 0x31, 0x39, 0x94,
+0x30, 0x37, 0x93, 0x2e, 0x36, 0x90, 0x2d, 0x34, 0x8f, 0x2b, 0x32, 0x8c,
+0x2b, 0x32, 0x8a, 0x29, 0x30, 0x89, 0x28, 0x2e, 0x87, 0x27, 0x2d, 0x85,
+0x25, 0x2c, 0x83, 0x24, 0x2b, 0x82, 0x23, 0x2a, 0x80, 0x22, 0x28, 0x7e,
+0x21, 0x27, 0x7c, 0x20, 0x26, 0x7a, 0x20, 0x26, 0x79, 0x1f, 0x24, 0x78,
+0x1e, 0x23, 0x76, 0x1e, 0x23, 0x75, 0x1d, 0x22, 0x73, 0x1c, 0x22, 0x72,
+0x1c, 0x21, 0x70, 0x1c, 0x21, 0x6f, 0x1b, 0x20, 0x6e, 0x1a, 0x20, 0x6c,
+0x1a, 0x1f, 0x6c, 0x1a, 0x1f, 0x6a, 0x1a, 0x1f, 0x69, 0x1a, 0x1f, 0x68,
+0x1a, 0x1f, 0x67, 0x19, 0x1e, 0x65, 0x1a, 0x1e, 0x64, 0x1a, 0x1e, 0x63,
+0x1a, 0x1e, 0x62, 0x1a, 0x1e, 0x61, 0x1a, 0x1e, 0x60, 0x1a, 0x1f, 0x5f,
+0x19, 0x1e, 0x5e, 0x1a, 0x1e, 0x5d, 0x1a, 0x1e, 0x5c, 0x19, 0x1e, 0x5b,
+0x1a, 0x1e, 0x5a, 0x19, 0x1d, 0x59, 0x19, 0x1d, 0x58, 0x18, 0x1c, 0x57,
+0x18, 0x1c, 0x56, 0x18, 0x1c, 0x56, 0x18, 0x1c, 0x55, 0x17, 0x1b, 0x54,
+0x17, 0x1b, 0x53, 0x17, 0x1b, 0x52, 0x17, 0x1b, 0x52, 0x16, 0x1a, 0x51,
+0x16, 0x1a, 0x50, 0x16, 0x1a, 0x4f, 0x16, 0x1a, 0x4f, 0x16, 0x19, 0x4e,
+0x15, 0x19, 0x4d, 0x15, 0x19, 0x4d, 0x15, 0x18, 0x4c, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4b, 0x14, 0x18, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x44,
+0x12, 0x15, 0x44, 0x12, 0x14, 0x43, 0x11, 0x14, 0x42, 0x10, 0x14, 0x41,
+0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x13, 0x16, 0x45, 0x25, 0x2d, 0x8a, 0x27, 0x2e, 0x90, 0x21, 0x27, 0x7b,
+0x1d, 0x22, 0x72, 0x1d, 0x22, 0x74, 0x1d, 0x22, 0x75, 0x1d, 0x23, 0x76,
+0x1d, 0x23, 0x78, 0x1e, 0x24, 0x7a, 0x1e, 0x25, 0x7b, 0x1f, 0x25, 0x7d,
+0x20, 0x26, 0x7e, 0x21, 0x27, 0x80, 0x21, 0x27, 0x82, 0x22, 0x28, 0x84,
+0x23, 0x28, 0x85, 0x24, 0x2a, 0x87, 0x24, 0x2b, 0x89, 0x26, 0x2d, 0x8b,
+0x26, 0x2e, 0x8c, 0x28, 0x2f, 0x8f, 0x29, 0x30, 0x91, 0x29, 0x30, 0x93,
+0x29, 0x30, 0x95, 0x29, 0x30, 0x97, 0x29, 0x30, 0x99, 0x29, 0x30, 0x9b,
+0x28, 0x30, 0x9e, 0x27, 0x2f, 0xa0, 0x26, 0x2e, 0xa3, 0x26, 0x2d, 0xa5,
+0x24, 0x2d, 0xa7, 0x28, 0x31, 0xaa, 0x2f, 0x38, 0xad, 0x38, 0x41, 0xaf,
+0x45, 0x50, 0xb2, 0x48, 0x52, 0xb4, 0x47, 0x52, 0xb7, 0x48, 0x52, 0xba,
+0x47, 0x53, 0xbc, 0x49, 0x54, 0xbf, 0x4b, 0x56, 0xc2, 0x49, 0x55, 0xc5,
+0x3f, 0x49, 0xc7, 0x36, 0x40, 0xcb, 0x33, 0x3d, 0xce, 0x35, 0x3f, 0xd1,
+0x37, 0x41, 0xd3, 0x34, 0x3f, 0xd6, 0x32, 0x3d, 0xd9, 0x38, 0x43, 0xdc,
+0x44, 0x50, 0xdf, 0x43, 0x50, 0xe2, 0x3a, 0x46, 0xe2, 0x42, 0x4f, 0xe2,
+0x5c, 0x6b, 0xe3, 0x4c, 0x5a, 0xe3, 0x39, 0x45, 0xe4, 0x3b, 0x47, 0xe4,
+0x3f, 0x4b, 0xe3, 0x49, 0x56, 0xe2, 0x5d, 0x6c, 0xe2, 0x12, 0x17, 0x39,
+0x11, 0x16, 0x38, 0x21, 0x29, 0x54, 0x47, 0x56, 0xdf, 0x41, 0x4f, 0xde,
+0x42, 0x50, 0xde, 0x4c, 0x5a, 0xde, 0x46, 0x53, 0xde, 0x3d, 0x4a, 0xde,
+0x3f, 0x4c, 0xde, 0x3b, 0x47, 0xdf, 0x32, 0x3e, 0xdf, 0x3e, 0x4b, 0xdf,
+0x54, 0x62, 0xdf, 0x44, 0x4f, 0x9c, 0x35, 0x3f, 0x7b, 0x56, 0x63, 0xcf,
+0x59, 0x68, 0xe1, 0x5a, 0x68, 0xe1, 0x48, 0x54, 0xa8, 0x0d, 0x11, 0x30,
+0x2e, 0x35, 0x69, 0x4b, 0x58, 0xd7, 0x3b, 0x47, 0xd4, 0x3a, 0x46, 0xd1,
+0x3a, 0x44, 0xce, 0x34, 0x3e, 0xcc, 0x2f, 0x38, 0xc8, 0x2a, 0x33, 0xc6,
+0x2e, 0x37, 0xc3, 0x33, 0x3d, 0xc0, 0x39, 0x42, 0xbd, 0x33, 0x3d, 0xbb,
+0x2f, 0x39, 0xb8, 0x2c, 0x34, 0xb5, 0x2a, 0x32, 0xb3, 0x29, 0x31, 0xb0,
+0x28, 0x30, 0xad, 0x27, 0x2f, 0xaa, 0x29, 0x31, 0xa8, 0x2d, 0x35, 0xa6,
+0x33, 0x3c, 0xa3, 0x39, 0x41, 0xa1, 0x3f, 0x48, 0x9e, 0x3d, 0x45, 0x9c,
+0x3a, 0x42, 0x99, 0x37, 0x40, 0x98, 0x35, 0x3c, 0x95, 0x31, 0x3a, 0x94,
+0x30, 0x37, 0x91, 0x2e, 0x37, 0x8f, 0x2d, 0x35, 0x8d, 0x2d, 0x33, 0x8b,
+0x2b, 0x31, 0x89, 0x2a, 0x31, 0x88, 0x28, 0x2f, 0x86, 0x27, 0x2e, 0x84,
+0x27, 0x2d, 0x82, 0x25, 0x2b, 0x81, 0x23, 0x2a, 0x7f, 0x22, 0x29, 0x7d,
+0x21, 0x28, 0x7b, 0x21, 0x27, 0x7a, 0x20, 0x26, 0x78, 0x20, 0x25, 0x77,
+0x1f, 0x24, 0x76, 0x1e, 0x23, 0x74, 0x1e, 0x22, 0x73, 0x1d, 0x22, 0x71,
+0x1c, 0x21, 0x70, 0x1c, 0x21, 0x6e, 0x1b, 0x20, 0x6d, 0x1b, 0x1f, 0x6b,
+0x1a, 0x1f, 0x6b, 0x1a, 0x1e, 0x69, 0x19, 0x1e, 0x69, 0x19, 0x1d, 0x67,
+0x19, 0x1d, 0x66, 0x19, 0x1d, 0x65, 0x19, 0x1d, 0x64, 0x19, 0x1d, 0x63,
+0x19, 0x1d, 0x62, 0x19, 0x1d, 0x61, 0x19, 0x1d, 0x60, 0x19, 0x1d, 0x5e,
+0x18, 0x1d, 0x5d, 0x19, 0x1d, 0x5d, 0x19, 0x1d, 0x5c, 0x18, 0x1d, 0x5b,
+0x19, 0x1d, 0x5a, 0x18, 0x1d, 0x59, 0x18, 0x1c, 0x58, 0x18, 0x1c, 0x57,
+0x18, 0x1c, 0x56, 0x17, 0x1b, 0x55, 0x17, 0x1b, 0x54, 0x17, 0x1b, 0x54,
+0x17, 0x1b, 0x53, 0x17, 0x1b, 0x52, 0x16, 0x1a, 0x51, 0x16, 0x1a, 0x51,
+0x16, 0x1a, 0x50, 0x16, 0x19, 0x4f, 0x15, 0x19, 0x4e, 0x15, 0x19, 0x4e,
+0x15, 0x19, 0x4d, 0x15, 0x18, 0x4c, 0x15, 0x18, 0x4c, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x14, 0x18, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x44,
+0x12, 0x15, 0x44, 0x11, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x14, 0x41,
+0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x12, 0x16, 0x44, 0x24, 0x2b, 0x8a, 0x25, 0x2c, 0x8f, 0x1f, 0x25, 0x7a,
+0x1c, 0x21, 0x72, 0x1c, 0x21, 0x72, 0x1d, 0x22, 0x74, 0x1d, 0x23, 0x76,
+0x1d, 0x23, 0x77, 0x1e, 0x24, 0x79, 0x1e, 0x25, 0x7b, 0x1f, 0x25, 0x7c,
+0x1f, 0x26, 0x7d, 0x20, 0x27, 0x7f, 0x21, 0x27, 0x81, 0x22, 0x28, 0x83,
+0x23, 0x29, 0x84, 0x24, 0x2a, 0x86, 0x25, 0x2c, 0x88, 0x26, 0x2e, 0x8a,
+0x27, 0x2e, 0x8b, 0x27, 0x2f, 0x8d, 0x27, 0x2f, 0x90, 0x27, 0x2f, 0x91,
+0x28, 0x2f, 0x94, 0x27, 0x2f, 0x96, 0x27, 0x2f, 0x98, 0x26, 0x2d, 0x9a,
+0x25, 0x2d, 0x9c, 0x25, 0x2c, 0x9f, 0x24, 0x2b, 0xa1, 0x24, 0x2c, 0xa3,
+0x29, 0x31, 0xa6, 0x2f, 0x38, 0xa8, 0x38, 0x41, 0xaa, 0x44, 0x4e, 0xad,
+0x44, 0x4e, 0xb0, 0x44, 0x4f, 0xb2, 0x44, 0x4e, 0xb4, 0x45, 0x4f, 0xb7,
+0x46, 0x50, 0xba, 0x47, 0x53, 0xbc, 0x47, 0x51, 0xbf, 0x3d, 0x48, 0xc2,
+0x36, 0x40, 0xc5, 0x31, 0x3b, 0xc8, 0x33, 0x3d, 0xca, 0x35, 0x3f, 0xcd,
+0x34, 0x3e, 0xd0, 0x32, 0x3c, 0xd2, 0x33, 0x3e, 0xd5, 0x3d, 0x49, 0xd8,
+0x46, 0x52, 0xdb, 0x3c, 0x47, 0xde, 0x36, 0x42, 0xe1, 0x48, 0x54, 0xe3,
+0x59, 0x67, 0xe4, 0x40, 0x4d, 0xe4, 0x36, 0x42, 0xe5, 0x38, 0x44, 0xe4,
+0x3d, 0x49, 0xe3, 0x47, 0x54, 0xe3, 0x5d, 0x6b, 0xe1, 0x19, 0x1f, 0x44,
+0x10, 0x15, 0x36, 0x41, 0x4c, 0x93, 0x42, 0x50, 0xe0, 0x3d, 0x4a, 0xe0,
+0x3e, 0x4b, 0xe0, 0x47, 0x54, 0xdf, 0x43, 0x50, 0xdf, 0x39, 0x45, 0xdf,
+0x3b, 0x48, 0xdf, 0x39, 0x46, 0xdf, 0x30, 0x3c, 0xdf, 0x35, 0x42, 0xe0,
+0x48, 0x56, 0xe0, 0x5b, 0x6a, 0xe0, 0x35, 0x3f, 0x7a, 0x56, 0x64, 0xd0,
+0x53, 0x61, 0xdf, 0x55, 0x62, 0xdd, 0x57, 0x64, 0xda, 0x39, 0x42, 0x82,
+0x0b, 0x10, 0x2b, 0x4b, 0x56, 0xb0, 0x43, 0x4f, 0xd1, 0x3a, 0x44, 0xce,
+0x39, 0x43, 0xcb, 0x38, 0x42, 0xc8, 0x32, 0x3c, 0xc6, 0x2c, 0x36, 0xc3,
+0x2a, 0x32, 0xc0, 0x2e, 0x36, 0xbd, 0x31, 0x3b, 0xbb, 0x37, 0x40, 0xb8,
+0x32, 0x3b, 0xb5, 0x2e, 0x37, 0xb3, 0x2b, 0x33, 0xb1, 0x29, 0x30, 0xad,
+0x28, 0x30, 0xab, 0x27, 0x30, 0xa9, 0x26, 0x2e, 0xa6, 0x26, 0x2f, 0xa4,
+0x2a, 0x33, 0xa2, 0x2f, 0x37, 0x9f, 0x34, 0x3b, 0x9d, 0x39, 0x41, 0x9a,
+0x3c, 0x44, 0x98, 0x39, 0x41, 0x96, 0x36, 0x3e, 0x94, 0x34, 0x3c, 0x92,
+0x31, 0x39, 0x90, 0x2f, 0x37, 0x8e, 0x2d, 0x35, 0x8c, 0x2d, 0x33, 0x8a,
+0x2c, 0x32, 0x89, 0x2a, 0x31, 0x87, 0x29, 0x30, 0x85, 0x27, 0x2f, 0x83,
+0x27, 0x2d, 0x81, 0x26, 0x2c, 0x80, 0x25, 0x2a, 0x7e, 0x23, 0x29, 0x7c,
+0x22, 0x29, 0x7b, 0x21, 0x28, 0x79, 0x20, 0x26, 0x78, 0x20, 0x25, 0x77,
+0x1f, 0x24, 0x75, 0x1e, 0x23, 0x73, 0x1e, 0x23, 0x72, 0x1d, 0x22, 0x70,
+0x1c, 0x21, 0x6f, 0x1c, 0x21, 0x6e, 0x1b, 0x20, 0x6c, 0x1b, 0x1f, 0x6b,
+0x1a, 0x1f, 0x6a, 0x1a, 0x1e, 0x69, 0x1a, 0x1e, 0x68, 0x19, 0x1d, 0x67,
+0x19, 0x1d, 0x66, 0x18, 0x1c, 0x65, 0x17, 0x1c, 0x63, 0x18, 0x1c, 0x62,
+0x18, 0x1c, 0x61, 0x18, 0x1c, 0x60, 0x18, 0x1c, 0x5f, 0x18, 0x1c, 0x5e,
+0x18, 0x1c, 0x5d, 0x17, 0x1c, 0x5c, 0x17, 0x1c, 0x5b, 0x18, 0x1c, 0x5a,
+0x18, 0x1c, 0x59, 0x18, 0x1c, 0x58, 0x18, 0x1c, 0x58, 0x18, 0x1c, 0x57,
+0x17, 0x1b, 0x56, 0x17, 0x1b, 0x55, 0x17, 0x1b, 0x54, 0x17, 0x1b, 0x53,
+0x17, 0x1b, 0x53, 0x16, 0x1a, 0x52, 0x16, 0x1a, 0x51, 0x16, 0x1a, 0x50,
+0x16, 0x1a, 0x50, 0x16, 0x19, 0x4f, 0x15, 0x19, 0x4e, 0x15, 0x19, 0x4e,
+0x15, 0x19, 0x4d, 0x15, 0x18, 0x4c, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x44,
+0x12, 0x15, 0x44, 0x11, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x14, 0x41,
+0x10, 0x14, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x11, 0x14, 0x44, 0x23, 0x28, 0x89, 0x24, 0x2a, 0x8e, 0x1f, 0x25, 0x7a,
+0x1c, 0x21, 0x71, 0x1c, 0x21, 0x72, 0x1d, 0x22, 0x74, 0x1d, 0x22, 0x75,
+0x1d, 0x23, 0x76, 0x1e, 0x24, 0x78, 0x1e, 0x25, 0x7a, 0x1f, 0x25, 0x7b,
+0x20, 0x26, 0x7d, 0x21, 0x27, 0x7e, 0x22, 0x28, 0x80, 0x23, 0x29, 0x82,
+0x24, 0x2a, 0x84, 0x24, 0x2b, 0x85, 0x25, 0x2d, 0x87, 0x26, 0x2d, 0x89,
+0x26, 0x2e, 0x8b, 0x26, 0x2d, 0x8c, 0x26, 0x2d, 0x8e, 0x26, 0x2e, 0x91,
+0x25, 0x2d, 0x92, 0x25, 0x2c, 0x94, 0x25, 0x2c, 0x96, 0x24, 0x2b, 0x99,
+0x23, 0x2a, 0x9b, 0x22, 0x2a, 0x9d, 0x25, 0x2c, 0x9f, 0x29, 0x30, 0xa1,
+0x30, 0x38, 0xa3, 0x39, 0x41, 0xa6, 0x40, 0x4a, 0xa8, 0x41, 0x4a, 0xaa,
+0x40, 0x4b, 0xad, 0x41, 0x4b, 0xb0, 0x41, 0x4b, 0xb2, 0x43, 0x4e, 0xb5,
+0x45, 0x4f, 0xb7, 0x45, 0x4f, 0xba, 0x3c, 0x46, 0xbc, 0x35, 0x3f, 0xbf,
+0x30, 0x3a, 0xc1, 0x31, 0x3c, 0xc4, 0x33, 0x3d, 0xc7, 0x33, 0x3d, 0xc9,
+0x32, 0x3c, 0xcc, 0x2f, 0x3a, 0xcf, 0x38, 0x43, 0xd1, 0x42, 0x4e, 0xd4,
+0x3e, 0x4a, 0xd7, 0x36, 0x42, 0xd9, 0x3c, 0x47, 0xdc, 0x4f, 0x5c, 0xdf,
+0x49, 0x56, 0xe2, 0x37, 0x42, 0xe4, 0x33, 0x3e, 0xe5, 0x35, 0x41, 0xe5,
+0x3c, 0x47, 0xe4, 0x45, 0x52, 0xe3, 0x5d, 0x6c, 0xe3, 0x27, 0x2e, 0x5c,
+0x10, 0x14, 0x34, 0x54, 0x60, 0xc6, 0x3e, 0x4a, 0xe1, 0x3a, 0x46, 0xe1,
+0x3b, 0x46, 0xe0, 0x43, 0x50, 0xe0, 0x40, 0x4d, 0xe0, 0x38, 0x43, 0xe0,
+0x37, 0x44, 0xe0, 0x39, 0x44, 0xe0, 0x30, 0x3b, 0xe0, 0x2f, 0x3a, 0xe1,
+0x3e, 0x4a, 0xe1, 0x4f, 0x5d, 0xe0, 0x4f, 0x5c, 0xba, 0x4f, 0x5b, 0xb9,
+0x54, 0x61, 0xdb, 0x51, 0x5d, 0xd8, 0x52, 0x60, 0xd6, 0x50, 0x5b, 0xc0,
+0x2a, 0x31, 0x61, 0x1e, 0x25, 0x4a, 0x4e, 0x5b, 0xcc, 0x3b, 0x46, 0xca,
+0x37, 0x42, 0xc8, 0x37, 0x41, 0xc5, 0x35, 0x3f, 0xc2, 0x2f, 0x39, 0xc0,
+0x2a, 0x34, 0xbd, 0x29, 0x31, 0xbb, 0x2d, 0x36, 0xb8, 0x30, 0x39, 0xb6,
+0x35, 0x3d, 0xb3, 0x31, 0x39, 0xb1, 0x2d, 0x36, 0xae, 0x2a, 0x32, 0xab,
+0x28, 0x30, 0xa9, 0x27, 0x2f, 0xa6, 0x25, 0x2e, 0xa4, 0x25, 0x2d, 0xa2,
+0x25, 0x2c, 0xa0, 0x27, 0x2f, 0x9d, 0x2b, 0x32, 0x9b, 0x30, 0x37, 0x99,
+0x34, 0x3c, 0x97, 0x39, 0x40, 0x94, 0x38, 0x3f, 0x93, 0x35, 0x3d, 0x91,
+0x33, 0x3a, 0x8e, 0x31, 0x38, 0x8d, 0x2f, 0x35, 0x8b, 0x2d, 0x34, 0x89,
+0x2c, 0x33, 0x88, 0x2b, 0x31, 0x86, 0x29, 0x30, 0x84, 0x28, 0x2f, 0x82,
+0x27, 0x2d, 0x81, 0x26, 0x2c, 0x7f, 0x25, 0x2b, 0x7d, 0x24, 0x2a, 0x7b,
+0x23, 0x29, 0x7a, 0x22, 0x28, 0x78, 0x20, 0x27, 0x77, 0x20, 0x26, 0x76,
+0x20, 0x25, 0x74, 0x1f, 0x24, 0x73, 0x1e, 0x23, 0x71, 0x1d, 0x22, 0x70,
+0x1d, 0x21, 0x6e, 0x1c, 0x21, 0x6d, 0x1c, 0x20, 0x6c, 0x1b, 0x1f, 0x6b,
+0x1a, 0x1f, 0x69, 0x1a, 0x1f, 0x69, 0x1a, 0x1e, 0x68, 0x19, 0x1d, 0x66,
+0x18, 0x1d, 0x65, 0x18, 0x1c, 0x64, 0x18, 0x1c, 0x63, 0x18, 0x1b, 0x62,
+0x17, 0x1b, 0x61, 0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1b, 0x5e,
+0x17, 0x1b, 0x5d, 0x17, 0x1b, 0x5c, 0x16, 0x1b, 0x5b, 0x17, 0x1b, 0x5a,
+0x17, 0x1b, 0x59, 0x17, 0x1b, 0x58, 0x17, 0x1b, 0x57, 0x16, 0x1a, 0x56,
+0x17, 0x1b, 0x56, 0x16, 0x1a, 0x55, 0x16, 0x1a, 0x54, 0x16, 0x1a, 0x53,
+0x16, 0x1a, 0x52, 0x16, 0x1a, 0x52, 0x16, 0x1a, 0x51, 0x16, 0x1a, 0x50,
+0x16, 0x19, 0x4f, 0x16, 0x19, 0x4f, 0x15, 0x19, 0x4e, 0x15, 0x19, 0x4d,
+0x15, 0x19, 0x4d, 0x15, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x18, 0x4a, 0x13, 0x17, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x15, 0x44, 0x12, 0x14, 0x44,
+0x11, 0x14, 0x43, 0x10, 0x14, 0x42, 0x10, 0x14, 0x41, 0x10, 0x14, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x11, 0x14, 0x44, 0x23, 0x28, 0x89, 0x24, 0x2a, 0x8e, 0x20, 0x24, 0x79,
+0x1c, 0x21, 0x71, 0x1c, 0x22, 0x72, 0x1c, 0x22, 0x73, 0x1d, 0x23, 0x74,
+0x1d, 0x23, 0x76, 0x1e, 0x24, 0x77, 0x1e, 0x25, 0x79, 0x1f, 0x26, 0x7b,
+0x20, 0x26, 0x7c, 0x21, 0x27, 0x7d, 0x22, 0x28, 0x7f, 0x23, 0x29, 0x81,
+0x24, 0x2b, 0x83, 0x24, 0x2b, 0x84, 0x24, 0x2b, 0x85, 0x24, 0x2b, 0x87,
+0x24, 0x2c, 0x8a, 0x24, 0x2b, 0x8b, 0x24, 0x2c, 0x8d, 0x25, 0x2b, 0x8f,
+0x24, 0x2b, 0x91, 0x23, 0x2a, 0x93, 0x22, 0x2a, 0x95, 0x22, 0x29, 0x97,
+0x21, 0x29, 0x99, 0x25, 0x2c, 0x9b, 0x29, 0x31, 0x9d, 0x2f, 0x38, 0x9f,
+0x39, 0x41, 0xa2, 0x3e, 0x48, 0xa4, 0x3e, 0x48, 0xa6, 0x3e, 0x48, 0xa9,
+0x3f, 0x47, 0xab, 0x3e, 0x48, 0xad, 0x40, 0x4b, 0xb0, 0x41, 0x4b, 0xb2,
+0x43, 0x4c, 0xb4, 0x3b, 0x44, 0xb7, 0x34, 0x3d, 0xb9, 0x2e, 0x38, 0xbc,
+0x30, 0x3a, 0xbf, 0x31, 0x3b, 0xc1, 0x33, 0x3d, 0xc3, 0x30, 0x3b, 0xc5,
+0x2f, 0x39, 0xc8, 0x33, 0x3e, 0xcb, 0x3c, 0x46, 0xce, 0x41, 0x4d, 0xd0,
+0x39, 0x44, 0xd3, 0x34, 0x3e, 0xd5, 0x41, 0x4d, 0xd8, 0x56, 0x63, 0xdb,
+0x40, 0x4c, 0xdd, 0x31, 0x3b, 0xdf, 0x32, 0x3d, 0xe1, 0x33, 0x3f, 0xe2,
+0x3b, 0x46, 0xe3, 0x45, 0x52, 0xe4, 0x5c, 0x6a, 0xe3, 0x37, 0x41, 0x7c,
+0x20, 0x27, 0x4f, 0x58, 0x67, 0xe2, 0x3a, 0x46, 0xe1, 0x37, 0x43, 0xe1,
+0x37, 0x43, 0xe1, 0x3e, 0x4b, 0xe1, 0x3e, 0x4a, 0xe1, 0x35, 0x41, 0xe1,
+0x35, 0x40, 0xe1, 0x36, 0x42, 0xe1, 0x2f, 0x3a, 0xe0, 0x2a, 0x34, 0xde,
+0x37, 0x42, 0xdd, 0x48, 0x55, 0xdb, 0x56, 0x64, 0xda, 0x46, 0x52, 0xa3,
+0x56, 0x62, 0xd6, 0x4d, 0x5a, 0xd4, 0x4f, 0x5c, 0xd2, 0x4f, 0x5c, 0xd0,
+0x45, 0x50, 0xa1, 0x20, 0x25, 0x4d, 0x3d, 0x47, 0x8c, 0x46, 0x51, 0xc6,
+0x37, 0x41, 0xc4, 0x36, 0x40, 0xc1, 0x35, 0x3f, 0xbf, 0x33, 0x3d, 0xbd,
+0x2d, 0x36, 0xba, 0x2a, 0x32, 0xb8, 0x28, 0x30, 0xb5, 0x2b, 0x34, 0xb3,
+0x2e, 0x38, 0xb1, 0x32, 0x3b, 0xae, 0x2f, 0x38, 0xac, 0x2c, 0x34, 0xa9,
+0x29, 0x31, 0xa7, 0x26, 0x2e, 0xa5, 0x26, 0x2e, 0xa2, 0x25, 0x2d, 0xa0,
+0x24, 0x2c, 0x9e, 0x24, 0x2b, 0x9c, 0x25, 0x2c, 0x99, 0x28, 0x30, 0x98,
+0x2c, 0x33, 0x95, 0x30, 0x38, 0x93, 0x34, 0x3c, 0x91, 0x36, 0x3f, 0x8f,
+0x34, 0x3b, 0x8d, 0x31, 0x39, 0x8c, 0x30, 0x37, 0x8a, 0x2d, 0x35, 0x87,
+0x2c, 0x33, 0x86, 0x2a, 0x31, 0x84, 0x2a, 0x30, 0x83, 0x28, 0x2f, 0x81,
+0x27, 0x2e, 0x7f, 0x26, 0x2c, 0x7e, 0x25, 0x2b, 0x7c, 0x25, 0x2b, 0x7b,
+0x24, 0x29, 0x79, 0x22, 0x29, 0x78, 0x21, 0x28, 0x77, 0x20, 0x27, 0x75,
+0x1f, 0x26, 0x74, 0x1f, 0x25, 0x72, 0x1f, 0x24, 0x71, 0x1e, 0x23, 0x6f,
+0x1d, 0x22, 0x6e, 0x1d, 0x21, 0x6d, 0x1c, 0x20, 0x6b, 0x1b, 0x20, 0x6b,
+0x1a, 0x1f, 0x69, 0x1a, 0x1f, 0x68, 0x19, 0x1e, 0x67, 0x19, 0x1e, 0x66,
+0x19, 0x1d, 0x65, 0x18, 0x1d, 0x64, 0x18, 0x1c, 0x63, 0x18, 0x1c, 0x62,
+0x17, 0x1b, 0x61, 0x17, 0x1b, 0x5f, 0x17, 0x1a, 0x5e, 0x16, 0x1a, 0x5d,
+0x16, 0x1a, 0x5c, 0x16, 0x1a, 0x5c, 0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5a,
+0x16, 0x1a, 0x59, 0x16, 0x1a, 0x58, 0x16, 0x1a, 0x57, 0x16, 0x1a, 0x56,
+0x15, 0x19, 0x55, 0x16, 0x1a, 0x55, 0x15, 0x19, 0x54, 0x16, 0x1a, 0x53,
+0x15, 0x19, 0x52, 0x15, 0x19, 0x51, 0x15, 0x19, 0x51, 0x15, 0x19, 0x50,
+0x15, 0x19, 0x4f, 0x16, 0x19, 0x4f, 0x15, 0x19, 0x4e, 0x15, 0x19, 0x4d,
+0x15, 0x19, 0x4d, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x18, 0x4b,
+0x14, 0x17, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x48, 0x13, 0x16, 0x47, 0x13, 0x16, 0x46, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x14, 0x44, 0x12, 0x14, 0x44,
+0x11, 0x14, 0x43, 0x10, 0x14, 0x42, 0x10, 0x14, 0x41, 0x10, 0x14, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x05,
+0x11, 0x14, 0x44, 0x22, 0x28, 0x87, 0x24, 0x2a, 0x8d, 0x1f, 0x24, 0x79,
+0x1b, 0x21, 0x70, 0x1b, 0x21, 0x71, 0x1c, 0x22, 0x72, 0x1c, 0x22, 0x73,
+0x1d, 0x23, 0x75, 0x1e, 0x24, 0x76, 0x1f, 0x25, 0x78, 0x20, 0x26, 0x7a,
+0x20, 0x26, 0x7b, 0x21, 0x27, 0x7d, 0x22, 0x28, 0x7e, 0x24, 0x2a, 0x80,
+0x23, 0x29, 0x81, 0x23, 0x29, 0x83, 0x23, 0x2a, 0x84, 0x24, 0x2a, 0x86,
+0x24, 0x2a, 0x88, 0x24, 0x2a, 0x8a, 0x23, 0x29, 0x8b, 0x23, 0x2a, 0x8e,
+0x22, 0x29, 0x90, 0x21, 0x29, 0x91, 0x21, 0x28, 0x93, 0x21, 0x29, 0x96,
+0x25, 0x2c, 0x97, 0x2a, 0x31, 0x9a, 0x30, 0x38, 0x9b, 0x37, 0x41, 0x9e,
+0x3c, 0x45, 0xa0, 0x3c, 0x45, 0xa2, 0x3c, 0x45, 0xa4, 0x3b, 0x44, 0xa6,
+0x3c, 0x46, 0xa9, 0x3e, 0x47, 0xab, 0x3f, 0x49, 0xae, 0x40, 0x4b, 0xb0,
+0x39, 0x43, 0xb2, 0x33, 0x3d, 0xb4, 0x2e, 0x37, 0xb7, 0x2e, 0x37, 0xb9,
+0x30, 0x3a, 0xbc, 0x32, 0x3b, 0xbe, 0x30, 0x3a, 0xc0, 0x2e, 0x38, 0xc2,
+0x2f, 0x3a, 0xc5, 0x37, 0x41, 0xc8, 0x3f, 0x4a, 0xca, 0x3b, 0x45, 0xcc,
+0x34, 0x3f, 0xcf, 0x38, 0x43, 0xd1, 0x46, 0x53, 0xd4, 0x4a, 0x56, 0xd6,
+0x39, 0x43, 0xd9, 0x31, 0x3b, 0xdb, 0x33, 0x3d, 0xdc, 0x34, 0x3f, 0xdd,
+0x3c, 0x47, 0xde, 0x47, 0x54, 0xdf, 0x59, 0x67, 0xd9, 0x3c, 0x45, 0x87,
+0x2b, 0x32, 0x62, 0x52, 0x5f, 0xdf, 0x36, 0x42, 0xe0, 0x35, 0x40, 0xe0,
+0x34, 0x40, 0xe0, 0x3b, 0x46, 0xdf, 0x3c, 0x48, 0xde, 0x35, 0x40, 0xde,
+0x33, 0x3e, 0xdd, 0x34, 0x3f, 0xdc, 0x30, 0x3b, 0xdb, 0x2a, 0x34, 0xda,
+0x31, 0x3c, 0xd8, 0x41, 0x4d, 0xd7, 0x4e, 0x5a, 0xd5, 0x49, 0x54, 0xab,
+0x52, 0x5d, 0xc5, 0x4d, 0x59, 0xd0, 0x4c, 0x58, 0xce, 0x4b, 0x58, 0xcc,
+0x51, 0x5d, 0xca, 0x3a, 0x43, 0x85, 0x17, 0x1c, 0x3c, 0x4d, 0x59, 0xbd,
+0x3e, 0x49, 0xc1, 0x35, 0x3f, 0xbe, 0x34, 0x3e, 0xbc, 0x33, 0x3d, 0xb9,
+0x31, 0x39, 0xb7, 0x2c, 0x34, 0xb5, 0x28, 0x31, 0xb3, 0x28, 0x2f, 0xb1,
+0x2a, 0x33, 0xae, 0x2d, 0x36, 0xac, 0x30, 0x39, 0xa9, 0x2e, 0x36, 0xa7,
+0x2b, 0x33, 0xa5, 0x28, 0x30, 0xa2, 0x26, 0x2e, 0xa1, 0x24, 0x2d, 0x9e,
+0x24, 0x2b, 0x9c, 0x24, 0x2b, 0x9a, 0x23, 0x2a, 0x98, 0x23, 0x2a, 0x96,
+0x26, 0x2d, 0x93, 0x29, 0x31, 0x92, 0x2c, 0x34, 0x90, 0x30, 0x37, 0x8e,
+0x34, 0x3b, 0x8c, 0x32, 0x3b, 0x8a, 0x31, 0x38, 0x88, 0x2f, 0x35, 0x87,
+0x2c, 0x34, 0x85, 0x2c, 0x32, 0x83, 0x2a, 0x30, 0x81, 0x28, 0x2f, 0x80,
+0x27, 0x2e, 0x7f, 0x26, 0x2c, 0x7d, 0x25, 0x2c, 0x7b, 0x25, 0x2b, 0x7a,
+0x24, 0x2a, 0x78, 0x23, 0x28, 0x77, 0x22, 0x27, 0x76, 0x21, 0x27, 0x74,
+0x20, 0x26, 0x73, 0x1f, 0x25, 0x71, 0x1e, 0x25, 0x70, 0x1e, 0x24, 0x6f,
+0x1e, 0x22, 0x6d, 0x1d, 0x22, 0x6c, 0x1c, 0x21, 0x6b, 0x1b, 0x20, 0x69,
+0x1b, 0x1f, 0x68, 0x1a, 0x1f, 0x68, 0x1a, 0x1e, 0x66, 0x19, 0x1e, 0x66,
+0x19, 0x1d, 0x64, 0x18, 0x1d, 0x63, 0x18, 0x1c, 0x62, 0x17, 0x1c, 0x61,
+0x17, 0x1b, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1a, 0x5e, 0x16, 0x1a, 0x5d,
+0x16, 0x1a, 0x5c, 0x15, 0x19, 0x5b, 0x15, 0x1a, 0x5a, 0x15, 0x19, 0x59,
+0x15, 0x19, 0x58, 0x15, 0x19, 0x58, 0x15, 0x19, 0x57, 0x15, 0x19, 0x56,
+0x15, 0x19, 0x55, 0x15, 0x19, 0x54, 0x15, 0x19, 0x54, 0x15, 0x19, 0x53,
+0x15, 0x19, 0x52, 0x15, 0x19, 0x51, 0x14, 0x18, 0x50, 0x15, 0x19, 0x50,
+0x15, 0x18, 0x4f, 0x15, 0x18, 0x4e, 0x15, 0x18, 0x4e, 0x14, 0x18, 0x4d,
+0x14, 0x18, 0x4c, 0x14, 0x18, 0x4c, 0x14, 0x18, 0x4b, 0x14, 0x17, 0x4a,
+0x14, 0x17, 0x4a, 0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x14, 0x44, 0x12, 0x14, 0x44,
+0x10, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x04,
+0x11, 0x14, 0x43, 0x22, 0x28, 0x86, 0x23, 0x2a, 0x8d, 0x1f, 0x24, 0x78,
+0x1b, 0x21, 0x6f, 0x1b, 0x21, 0x71, 0x1c, 0x22, 0x71, 0x1d, 0x23, 0x73,
+0x1e, 0x24, 0x74, 0x1f, 0x24, 0x76, 0x1f, 0x25, 0x77, 0x20, 0x26, 0x79,
+0x21, 0x27, 0x7a, 0x22, 0x27, 0x7b, 0x22, 0x28, 0x7d, 0x22, 0x28, 0x7f,
+0x22, 0x28, 0x80, 0x22, 0x28, 0x82, 0x22, 0x28, 0x84, 0x23, 0x28, 0x85,
+0x23, 0x28, 0x87, 0x22, 0x29, 0x89, 0x21, 0x28, 0x8b, 0x21, 0x27, 0x8c,
+0x20, 0x27, 0x8e, 0x20, 0x26, 0x90, 0x21, 0x28, 0x92, 0x25, 0x2c, 0x94,
+0x2a, 0x31, 0x96, 0x2f, 0x37, 0x98, 0x37, 0x3f, 0x9a, 0x3a, 0x42, 0x9c,
+0x39, 0x42, 0x9e, 0x3a, 0x42, 0xa0, 0x3a, 0x43, 0xa3, 0x3a, 0x43, 0xa4,
+0x3b, 0x44, 0xa6, 0x3c, 0x46, 0xa9, 0x3e, 0x48, 0xab, 0x38, 0x41, 0xae,
+0x32, 0x3b, 0xb0, 0x2e, 0x37, 0xb2, 0x2d, 0x36, 0xb4, 0x2e, 0x37, 0xb7,
+0x2f, 0x39, 0xb9, 0x2f, 0x39, 0xbb, 0x2e, 0x37, 0xbd, 0x2d, 0x37, 0xc0,
+0x32, 0x3c, 0xc2, 0x3a, 0x44, 0xc4, 0x3c, 0x47, 0xc7, 0x36, 0x40, 0xc9,
+0x31, 0x3b, 0xcb, 0x3d, 0x47, 0xcd, 0x4d, 0x58, 0xd0, 0x41, 0x4c, 0xd2,
+0x32, 0x3d, 0xd5, 0x31, 0x3b, 0xd6, 0x31, 0x3b, 0xd7, 0x35, 0x3f, 0xd8,
+0x3b, 0x46, 0xd9, 0x48, 0x54, 0xd9, 0x52, 0x5e, 0xc1, 0x3e, 0x48, 0x8b,
+0x2b, 0x33, 0x62, 0x4d, 0x59, 0xda, 0x35, 0x40, 0xda, 0x34, 0x3f, 0xdb,
+0x34, 0x3e, 0xda, 0x39, 0x45, 0xda, 0x3d, 0x47, 0xd9, 0x35, 0x40, 0xd9,
+0x32, 0x3d, 0xd7, 0x34, 0x3f, 0xd7, 0x30, 0x3b, 0xd6, 0x2b, 0x35, 0xd5,
+0x2d, 0x37, 0xd4, 0x3a, 0x45, 0xd3, 0x47, 0x53, 0xd1, 0x52, 0x60, 0xcf,
+0x4c, 0x58, 0xb6, 0x4e, 0x5a, 0xcc, 0x48, 0x54, 0xca, 0x49, 0x54, 0xc8,
+0x4a, 0x55, 0xc6, 0x4a, 0x55, 0xb4, 0x32, 0x3a, 0x70, 0x32, 0x3a, 0x72,
+0x47, 0x51, 0xbe, 0x38, 0x43, 0xbc, 0x34, 0x3d, 0xb9, 0x33, 0x3c, 0xb7,
+0x31, 0x3b, 0xb5, 0x2e, 0x38, 0xb3, 0x2a, 0x33, 0xb1, 0x27, 0x2f, 0xae,
+0x27, 0x2f, 0xac, 0x29, 0x31, 0xa9, 0x2c, 0x34, 0xa7, 0x2e, 0x37, 0xa5,
+0x2d, 0x36, 0xa3, 0x2a, 0x32, 0xa1, 0x28, 0x2f, 0x9e, 0x25, 0x2d, 0x9d,
+0x24, 0x2b, 0x9a, 0x23, 0x2a, 0x98, 0x22, 0x29, 0x96, 0x22, 0x29, 0x94,
+0x22, 0x28, 0x93, 0x23, 0x2b, 0x90, 0x27, 0x2d, 0x8e, 0x29, 0x30, 0x8d,
+0x2c, 0x34, 0x8b, 0x30, 0x37, 0x89, 0x32, 0x39, 0x87, 0x30, 0x37, 0x86,
+0x2d, 0x35, 0x84, 0x2c, 0x33, 0x82, 0x2b, 0x31, 0x80, 0x29, 0x30, 0x7f,
+0x27, 0x2e, 0x7e, 0x26, 0x2d, 0x7c, 0x25, 0x2c, 0x7a, 0x25, 0x2b, 0x79,
+0x24, 0x2a, 0x77, 0x23, 0x29, 0x76, 0x22, 0x27, 0x75, 0x21, 0x27, 0x74,
+0x21, 0x26, 0x72, 0x20, 0x26, 0x71, 0x1f, 0x25, 0x6f, 0x1e, 0x24, 0x6e,
+0x1d, 0x23, 0x6d, 0x1d, 0x22, 0x6b, 0x1d, 0x21, 0x6a, 0x1c, 0x21, 0x69,
+0x1b, 0x20, 0x68, 0x1a, 0x1f, 0x66, 0x1a, 0x1f, 0x66, 0x19, 0x1e, 0x65,
+0x19, 0x1d, 0x64, 0x19, 0x1d, 0x63, 0x18, 0x1c, 0x62, 0x18, 0x1c, 0x61,
+0x18, 0x1c, 0x60, 0x17, 0x1b, 0x5f, 0x17, 0x1b, 0x5e, 0x16, 0x1a, 0x5d,
+0x16, 0x1a, 0x5c, 0x16, 0x1a, 0x5b, 0x15, 0x1a, 0x5a, 0x15, 0x19, 0x59,
+0x14, 0x19, 0x58, 0x14, 0x18, 0x57, 0x14, 0x18, 0x56, 0x15, 0x18, 0x56,
+0x14, 0x18, 0x55, 0x15, 0x18, 0x54, 0x14, 0x18, 0x53, 0x14, 0x18, 0x52,
+0x14, 0x18, 0x52, 0x14, 0x18, 0x51, 0x14, 0x18, 0x50, 0x14, 0x18, 0x50,
+0x14, 0x18, 0x4f, 0x14, 0x18, 0x4e, 0x14, 0x17, 0x4d, 0x14, 0x17, 0x4d,
+0x14, 0x17, 0x4c, 0x14, 0x17, 0x4c, 0x14, 0x17, 0x4b, 0x14, 0x17, 0x4a,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x15, 0x45, 0x12, 0x15, 0x45, 0x12, 0x14, 0x44, 0x12, 0x14, 0x44,
+0x10, 0x14, 0x42, 0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x10, 0x13, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x04,
+0x11, 0x13, 0x42, 0x22, 0x28, 0x86, 0x23, 0x29, 0x8c, 0x1f, 0x24, 0x77,
+0x1b, 0x21, 0x6f, 0x1b, 0x22, 0x70, 0x1c, 0x22, 0x71, 0x1d, 0x23, 0x72,
+0x1e, 0x24, 0x73, 0x1f, 0x24, 0x75, 0x1f, 0x25, 0x76, 0x20, 0x26, 0x78,
+0x21, 0x26, 0x79, 0x21, 0x27, 0x7b, 0x21, 0x27, 0x7c, 0x21, 0x27, 0x7d,
+0x21, 0x27, 0x7f, 0x21, 0x27, 0x81, 0x21, 0x27, 0x83, 0x21, 0x27, 0x84,
+0x20, 0x27, 0x86, 0x20, 0x27, 0x88, 0x1f, 0x26, 0x8a, 0x1f, 0x26, 0x8b,
+0x1f, 0x25, 0x8d, 0x21, 0x28, 0x8f, 0x25, 0x2c, 0x91, 0x29, 0x30, 0x92,
+0x2f, 0x38, 0x95, 0x37, 0x3f, 0x96, 0x37, 0x40, 0x98, 0x37, 0x40, 0x9b,
+0x37, 0x40, 0x9c, 0x37, 0x41, 0x9f, 0x38, 0x41, 0xa0, 0x3a, 0x42, 0xa3,
+0x3a, 0x43, 0xa4, 0x3b, 0x44, 0xa6, 0x37, 0x3f, 0xa9, 0x32, 0x3a, 0xab,
+0x2d, 0x36, 0xad, 0x2b, 0x34, 0xaf, 0x2d, 0x36, 0xb1, 0x2e, 0x37, 0xb4,
+0x2f, 0x37, 0xb6, 0x2e, 0x37, 0xb7, 0x2c, 0x35, 0xba, 0x2f, 0x38, 0xbc,
+0x35, 0x3f, 0xbe, 0x3d, 0x47, 0xc1, 0x37, 0x41, 0xc3, 0x32, 0x3c, 0xc5,
+0x34, 0x3e, 0xc8, 0x41, 0x4c, 0xca, 0x49, 0x55, 0xcc, 0x39, 0x43, 0xce,
+0x2e, 0x38, 0xd0, 0x30, 0x3a, 0xd1, 0x31, 0x3b, 0xd2, 0x35, 0x40, 0xd3,
+0x3c, 0x47, 0xd3, 0x49, 0x55, 0xd4, 0x4d, 0x58, 0xb2, 0x3f, 0x49, 0x8e,
+0x31, 0x3a, 0x6f, 0x49, 0x55, 0xd5, 0x35, 0x3f, 0xd6, 0x33, 0x3e, 0xd6,
+0x33, 0x3e, 0xd6, 0x38, 0x42, 0xd5, 0x3b, 0x47, 0xd5, 0x34, 0x3f, 0xd4,
+0x31, 0x3c, 0xd3, 0x32, 0x3d, 0xd3, 0x31, 0x3c, 0xd1, 0x2b, 0x35, 0xd0,
+0x2a, 0x34, 0xcf, 0x34, 0x3f, 0xce, 0x42, 0x4c, 0xcc, 0x4c, 0x57, 0xcb,
+0x46, 0x52, 0xa5, 0x4f, 0x5b, 0xc8, 0x48, 0x53, 0xc6, 0x46, 0x51, 0xc4,
+0x47, 0x53, 0xc2, 0x49, 0x55, 0xc1, 0x43, 0x4d, 0x9f, 0x2a, 0x31, 0x60,
+0x42, 0x4b, 0x9b, 0x3f, 0x49, 0xb8, 0x34, 0x3d, 0xb6, 0x31, 0x3a, 0xb4,
+0x31, 0x3a, 0xb2, 0x30, 0x39, 0xb0, 0x2d, 0x35, 0xad, 0x29, 0x30, 0xab,
+0x26, 0x2e, 0xa9, 0x26, 0x2d, 0xa7, 0x28, 0x30, 0xa5, 0x2b, 0x33, 0xa3,
+0x2d, 0x35, 0xa1, 0x2d, 0x34, 0x9f, 0x29, 0x31, 0x9d, 0x27, 0x2e, 0x9b,
+0x24, 0x2b, 0x98, 0x23, 0x2a, 0x97, 0x22, 0x2a, 0x95, 0x22, 0x28, 0x93,
+0x22, 0x28, 0x91, 0x21, 0x27, 0x8f, 0x21, 0x28, 0x8d, 0x24, 0x2b, 0x8c,
+0x26, 0x2e, 0x8a, 0x2a, 0x30, 0x88, 0x2c, 0x34, 0x86, 0x30, 0x37, 0x85,
+0x2f, 0x36, 0x83, 0x2d, 0x34, 0x81, 0x2b, 0x32, 0x7f, 0x2a, 0x30, 0x7e,
+0x28, 0x2f, 0x7d, 0x27, 0x2e, 0x7b, 0x25, 0x2c, 0x79, 0x25, 0x2b, 0x78,
+0x24, 0x2a, 0x77, 0x23, 0x29, 0x76, 0x22, 0x27, 0x74, 0x21, 0x27, 0x73,
+0x21, 0x26, 0x71, 0x20, 0x26, 0x70, 0x1f, 0x25, 0x6f, 0x1e, 0x24, 0x6d,
+0x1d, 0x24, 0x6c, 0x1d, 0x23, 0x6b, 0x1c, 0x21, 0x69, 0x1c, 0x21, 0x68,
+0x1b, 0x20, 0x68, 0x1b, 0x20, 0x66, 0x1b, 0x1f, 0x66, 0x19, 0x1e, 0x65,
+0x19, 0x1d, 0x63, 0x19, 0x1d, 0x62, 0x18, 0x1c, 0x61, 0x18, 0x1c, 0x60,
+0x18, 0x1c, 0x5f, 0x17, 0x1b, 0x5e, 0x17, 0x1b, 0x5d, 0x16, 0x1a, 0x5c,
+0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5a, 0x15, 0x19, 0x59,
+0x15, 0x19, 0x58, 0x14, 0x19, 0x57, 0x14, 0x18, 0x56, 0x14, 0x18, 0x55,
+0x14, 0x18, 0x55, 0x14, 0x18, 0x54, 0x14, 0x17, 0x53, 0x14, 0x17, 0x52,
+0x13, 0x17, 0x51, 0x14, 0x17, 0x51, 0x14, 0x17, 0x50, 0x14, 0x17, 0x4f,
+0x14, 0x17, 0x4f, 0x14, 0x17, 0x4e, 0x13, 0x17, 0x4d, 0x13, 0x17, 0x4d,
+0x13, 0x17, 0x4c, 0x13, 0x16, 0x4b, 0x13, 0x17, 0x4b, 0x13, 0x16, 0x4a,
+0x13, 0x16, 0x49, 0x13, 0x16, 0x49, 0x13, 0x16, 0x48, 0x13, 0x16, 0x48,
+0x13, 0x16, 0x47, 0x13, 0x16, 0x47, 0x12, 0x15, 0x45, 0x12, 0x15, 0x45,
+0x12, 0x14, 0x45, 0x12, 0x14, 0x44, 0x12, 0x14, 0x44, 0x11, 0x14, 0x43,
+0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x40, 0x10, 0x13, 0x40, 0x10, 0x13, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3c, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x04,
+0x11, 0x14, 0x42, 0x22, 0x28, 0x85, 0x23, 0x2a, 0x8b, 0x1f, 0x25, 0x77,
+0x1c, 0x21, 0x6e, 0x1c, 0x22, 0x6f, 0x1d, 0x23, 0x71, 0x1e, 0x23, 0x71,
+0x1e, 0x23, 0x72, 0x1f, 0x24, 0x74, 0x1f, 0x25, 0x75, 0x20, 0x25, 0x77,
+0x20, 0x25, 0x79, 0x20, 0x25, 0x7a, 0x20, 0x25, 0x7b, 0x20, 0x26, 0x7c,
+0x20, 0x26, 0x7e, 0x20, 0x26, 0x80, 0x1f, 0x26, 0x82, 0x1f, 0x26, 0x83,
+0x1f, 0x25, 0x84, 0x1e, 0x25, 0x86, 0x1e, 0x25, 0x88, 0x1e, 0x24, 0x8a,
+0x21, 0x28, 0x8b, 0x24, 0x2c, 0x8d, 0x29, 0x30, 0x8f, 0x2f, 0x36, 0x90,
+0x35, 0x3d, 0x93, 0x35, 0x3d, 0x95, 0x36, 0x3d, 0x96, 0x35, 0x3d, 0x98,
+0x36, 0x3d, 0x9b, 0x36, 0x3e, 0x9c, 0x36, 0x3f, 0x9f, 0x38, 0x41, 0xa0,
+0x3a, 0x42, 0xa3, 0x35, 0x3d, 0xa4, 0x31, 0x39, 0xa6, 0x2c, 0x35, 0xa8,
+0x2a, 0x32, 0xab, 0x2b, 0x34, 0xad, 0x2d, 0x36, 0xae, 0x2e, 0x36, 0xb1,
+0x2c, 0x36, 0xb3, 0x2c, 0x34, 0xb5, 0x2c, 0x35, 0xb7, 0x31, 0x3a, 0xb9,
+0x38, 0x41, 0xbb, 0x39, 0x42, 0xbd, 0x33, 0x3c, 0xbf, 0x2f, 0x38, 0xc2,
+0x38, 0x42, 0xc3, 0x44, 0x50, 0xc6, 0x40, 0x4b, 0xc8, 0x34, 0x3d, 0xca,
+0x2f, 0x38, 0xcc, 0x2f, 0x39, 0xcd, 0x31, 0x3b, 0xce, 0x36, 0x40, 0xce,
+0x3d, 0x47, 0xcf, 0x4a, 0x56, 0xd0, 0x4a, 0x55, 0xab, 0x3e, 0x47, 0x8b,
+0x3b, 0x44, 0x85, 0x45, 0x51, 0xd1, 0x33, 0x3e, 0xd1, 0x32, 0x3c, 0xd1,
+0x31, 0x3c, 0xd1, 0x37, 0x42, 0xd0, 0x3b, 0x47, 0xd0, 0x34, 0x3f, 0xcf,
+0x30, 0x3a, 0xcf, 0x31, 0x3b, 0xce, 0x31, 0x3c, 0xcd, 0x2d, 0x36, 0xcc,
+0x28, 0x32, 0xcb, 0x2f, 0x3a, 0xca, 0x3c, 0x46, 0xc8, 0x46, 0x51, 0xc7,
+0x4f, 0x5a, 0xc3, 0x4e, 0x5a, 0xc2, 0x49, 0x53, 0xc2, 0x44, 0x4f, 0xc1,
+0x44, 0x4f, 0xbe, 0x44, 0x50, 0xbd, 0x4b, 0x56, 0xbb, 0x3c, 0x44, 0x8b,
+0x27, 0x2e, 0x5a, 0x47, 0x51, 0xb5, 0x3a, 0x43, 0xb3, 0x31, 0x3a, 0xb1,
+0x31, 0x39, 0xaf, 0x2f, 0x38, 0xad, 0x2e, 0x37, 0xab, 0x2b, 0x33, 0xa9,
+0x28, 0x30, 0xa7, 0x25, 0x2c, 0xa5, 0x24, 0x2c, 0xa3, 0x27, 0x2f, 0xa1,
+0x29, 0x32, 0x9f, 0x2c, 0x34, 0x9d, 0x2a, 0x32, 0x9b, 0x27, 0x2f, 0x98,
+0x26, 0x2d, 0x97, 0x24, 0x2b, 0x95, 0x22, 0x29, 0x93, 0x22, 0x28, 0x91,
+0x22, 0x28, 0x8f, 0x21, 0x27, 0x8d, 0x21, 0x26, 0x8c, 0x21, 0x27, 0x8a,
+0x22, 0x29, 0x88, 0x25, 0x2b, 0x86, 0x26, 0x2d, 0x85, 0x2a, 0x30, 0x83,
+0x2c, 0x33, 0x82, 0x2e, 0x34, 0x80, 0x2c, 0x33, 0x7e, 0x2a, 0x31, 0x7d,
+0x29, 0x2f, 0x7c, 0x28, 0x2e, 0x7a, 0x26, 0x2d, 0x79, 0x25, 0x2b, 0x77,
+0x24, 0x2a, 0x75, 0x23, 0x29, 0x75, 0x22, 0x28, 0x73, 0x22, 0x27, 0x72,
+0x21, 0x26, 0x71, 0x20, 0x26, 0x6f, 0x1f, 0x25, 0x6e, 0x1f, 0x25, 0x6d,
+0x1e, 0x24, 0x6b, 0x1d, 0x23, 0x6a, 0x1d, 0x22, 0x69, 0x1d, 0x22, 0x68,
+0x1c, 0x21, 0x67, 0x1c, 0x20, 0x66, 0x1b, 0x1f, 0x65, 0x1a, 0x1f, 0x64,
+0x1a, 0x1e, 0x63, 0x19, 0x1d, 0x62, 0x18, 0x1d, 0x61, 0x18, 0x1c, 0x60,
+0x18, 0x1c, 0x5f, 0x17, 0x1b, 0x5e, 0x17, 0x1b, 0x5d, 0x16, 0x1a, 0x5c,
+0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5a, 0x15, 0x19, 0x59, 0x15, 0x19, 0x58,
+0x15, 0x19, 0x58, 0x14, 0x19, 0x57, 0x14, 0x18, 0x56, 0x14, 0x18, 0x55,
+0x14, 0x17, 0x54, 0x13, 0x17, 0x53, 0x13, 0x17, 0x53, 0x13, 0x17, 0x52,
+0x13, 0x17, 0x51, 0x13, 0x17, 0x50, 0x13, 0x17, 0x50, 0x13, 0x17, 0x4f,
+0x13, 0x16, 0x4e, 0x13, 0x17, 0x4e, 0x13, 0x16, 0x4d, 0x13, 0x16, 0x4c,
+0x13, 0x16, 0x4c, 0x12, 0x16, 0x4b, 0x13, 0x16, 0x4b, 0x12, 0x16, 0x4a,
+0x12, 0x16, 0x49, 0x12, 0x16, 0x49, 0x12, 0x16, 0x48, 0x12, 0x16, 0x48,
+0x12, 0x15, 0x47, 0x12, 0x14, 0x45, 0x12, 0x15, 0x45, 0x12, 0x14, 0x45,
+0x12, 0x14, 0x45, 0x12, 0x14, 0x44, 0x12, 0x14, 0x44, 0x11, 0x14, 0x43,
+0x10, 0x14, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x40, 0x10, 0x12, 0x3f, 0x10, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d,
+0x0f, 0x12, 0x3c, 0x0f, 0x12, 0x3c, 0x0f, 0x10, 0x36, 0x01, 0x01, 0x04,
+0x11, 0x14, 0x42, 0x22, 0x28, 0x84, 0x23, 0x2a, 0x8b, 0x1f, 0x25, 0x76,
+0x1c, 0x21, 0x6d, 0x1d, 0x22, 0x6f, 0x1d, 0x23, 0x70, 0x1e, 0x23, 0x71,
+0x1e, 0x24, 0x72, 0x1e, 0x24, 0x73, 0x1f, 0x24, 0x75, 0x1f, 0x25, 0x76,
+0x1f, 0x25, 0x78, 0x1f, 0x25, 0x79, 0x1f, 0x25, 0x7b, 0x1f, 0x25, 0x7b,
+0x1f, 0x25, 0x7d, 0x1e, 0x25, 0x7f, 0x1e, 0x24, 0x80, 0x1e, 0x24, 0x82,
+0x1d, 0x24, 0x83, 0x1e, 0x23, 0x85, 0x1e, 0x25, 0x87, 0x21, 0x28, 0x89,
+0x24, 0x2c, 0x8a, 0x29, 0x30, 0x8c, 0x2e, 0x36, 0x8e, 0x32, 0x3b, 0x90,
+0x33, 0x3b, 0x91, 0x33, 0x3b, 0x93, 0x32, 0x3b, 0x95, 0x33, 0x3b, 0x96,
+0x34, 0x3d, 0x99, 0x36, 0x3d, 0x9b, 0x36, 0x3e, 0x9c, 0x36, 0x3f, 0x9f,
+0x34, 0x3d, 0xa0, 0x30, 0x38, 0xa2, 0x2c, 0x34, 0xa4, 0x29, 0x31, 0xa6,
+0x2b, 0x32, 0xa8, 0x2b, 0x34, 0xaa, 0x2c, 0x35, 0xac, 0x2b, 0x34, 0xae,
+0x2b, 0x33, 0xb0, 0x2b, 0x33, 0xb2, 0x2d, 0x37, 0xb4, 0x34, 0x3d, 0xb6,
+0x39, 0x44, 0xb8, 0x34, 0x3d, 0xba, 0x2f, 0x39, 0xbd, 0x32, 0x3b, 0xbe,
+0x3b, 0x46, 0xc0, 0x48, 0x52, 0xc2, 0x39, 0x43, 0xc4, 0x2f, 0x39, 0xc6,
+0x2e, 0x38, 0xc7, 0x2e, 0x39, 0xc8, 0x30, 0x3b, 0xca, 0x35, 0x40, 0xca,
+0x3d, 0x48, 0xca, 0x4b, 0x57, 0xcc, 0x49, 0x54, 0xab, 0x3f, 0x48, 0x8f,
+0x43, 0x4d, 0x99, 0x42, 0x4c, 0xcd, 0x32, 0x3d, 0xcd, 0x31, 0x3b, 0xcc,
+0x31, 0x3b, 0xcc, 0x36, 0x40, 0xcc, 0x3b, 0x45, 0xcb, 0x34, 0x3f, 0xcb,
+0x2f, 0x38, 0xca, 0x2f, 0x3a, 0xca, 0x31, 0x3c, 0xc8, 0x2d, 0x37, 0xc8,
+0x29, 0x32, 0xc7, 0x2c, 0x37, 0xc6, 0x37, 0x40, 0xc4, 0x40, 0x4a, 0xc3,
+0x49, 0x54, 0xc1, 0x49, 0x53, 0xb0, 0x49, 0x53, 0xbe, 0x43, 0x4d, 0xbd,
+0x41, 0x4c, 0xbc, 0x42, 0x4d, 0xb9, 0x43, 0x4d, 0xb8, 0x46, 0x51, 0xaa,
+0x35, 0x3d, 0x7a, 0x3a, 0x42, 0x85, 0x40, 0x4a, 0xb1, 0x34, 0x3d, 0xae,
+0x30, 0x38, 0xac, 0x2f, 0x38, 0xaa, 0x2e, 0x36, 0xa9, 0x2c, 0x34, 0xa6,
+0x29, 0x31, 0xa5, 0x26, 0x2e, 0xa2, 0x24, 0x2b, 0xa1, 0x24, 0x2c, 0x9f,
+0x26, 0x2e, 0x9d, 0x27, 0x30, 0x9b, 0x2a, 0x32, 0x99, 0x2a, 0x31, 0x97,
+0x27, 0x2e, 0x95, 0x25, 0x2c, 0x93, 0x23, 0x2a, 0x92, 0x22, 0x29, 0x90,
+0x21, 0x27, 0x8e, 0x21, 0x26, 0x8d, 0x21, 0x26, 0x8b, 0x20, 0x25, 0x89,
+0x1f, 0x25, 0x87, 0x20, 0x27, 0x86, 0x22, 0x29, 0x84, 0x25, 0x2b, 0x82,
+0x27, 0x2d, 0x80, 0x2a, 0x30, 0x7f, 0x2b, 0x33, 0x7e, 0x2b, 0x32, 0x7c,
+0x2a, 0x30, 0x7b, 0x29, 0x2e, 0x79, 0x27, 0x2d, 0x78, 0x25, 0x2c, 0x76,
+0x24, 0x2b, 0x75, 0x24, 0x29, 0x74, 0x23, 0x28, 0x73, 0x22, 0x27, 0x71,
+0x21, 0x26, 0x70, 0x20, 0x26, 0x6f, 0x1f, 0x25, 0x6d, 0x1f, 0x24, 0x6c,
+0x1e, 0x24, 0x6b, 0x1d, 0x23, 0x69, 0x1d, 0x23, 0x68, 0x1d, 0x22, 0x68,
+0x1c, 0x21, 0x66, 0x1c, 0x20, 0x66, 0x1b, 0x20, 0x65, 0x1b, 0x1f, 0x64,
+0x1a, 0x1e, 0x63, 0x19, 0x1d, 0x61, 0x18, 0x1d, 0x60, 0x18, 0x1d, 0x5f,
+0x18, 0x1c, 0x5e, 0x17, 0x1b, 0x5d, 0x17, 0x1b, 0x5d, 0x17, 0x1b, 0x5c,
+0x16, 0x1a, 0x5b, 0x16, 0x1a, 0x5a, 0x16, 0x1a, 0x59, 0x15, 0x19, 0x58,
+0x15, 0x19, 0x57, 0x15, 0x18, 0x56, 0x14, 0x18, 0x56, 0x14, 0x18, 0x55,
+0x14, 0x18, 0x54, 0x13, 0x17, 0x53, 0x13, 0x17, 0x52, 0x13, 0x17, 0x52,
+0x13, 0x16, 0x51, 0x12, 0x16, 0x50, 0x13, 0x16, 0x50, 0x12, 0x16, 0x4f,
+0x12, 0x16, 0x4e, 0x12, 0x16, 0x4d, 0x12, 0x16, 0x4d, 0x12, 0x16, 0x4c,
+0x12, 0x16, 0x4c, 0x12, 0x16, 0x4b, 0x12, 0x15, 0x4a, 0x12, 0x15, 0x49,
+0x12, 0x15, 0x49, 0x12, 0x15, 0x49, 0x12, 0x16, 0x48, 0x12, 0x15, 0x47,
+0x12, 0x15, 0x47, 0x12, 0x14, 0x45, 0x12, 0x14, 0x45, 0x11, 0x14, 0x45,
+0x12, 0x14, 0x45, 0x11, 0x14, 0x44, 0x11, 0x14, 0x44, 0x10, 0x13, 0x42,
+0x10, 0x13, 0x42, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x40, 0x10, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d,
+0x0e, 0x11, 0x3c, 0x0e, 0x11, 0x3c, 0x0e, 0x10, 0x35, 0x01, 0x01, 0x04,
+0x11, 0x14, 0x42, 0x22, 0x28, 0x84, 0x24, 0x2a, 0x8a, 0x1f, 0x25, 0x75,
+0x1c, 0x22, 0x6d, 0x1d, 0x23, 0x6e, 0x1d, 0x23, 0x6f, 0x1d, 0x23, 0x70,
+0x1e, 0x23, 0x71, 0x1d, 0x23, 0x72, 0x1e, 0x24, 0x74, 0x1e, 0x24, 0x75,
+0x1e, 0x24, 0x77, 0x1e, 0x24, 0x78, 0x1e, 0x24, 0x7a, 0x1d, 0x24, 0x7b,
+0x1e, 0x23, 0x7c, 0x1d, 0x23, 0x7e, 0x1d, 0x23, 0x7f, 0x1d, 0x22, 0x81,
+0x1d, 0x22, 0x83, 0x1e, 0x24, 0x83, 0x21, 0x27, 0x85, 0x24, 0x2c, 0x87,
+0x29, 0x30, 0x89, 0x2e, 0x35, 0x8a, 0x31, 0x38, 0x8c, 0x31, 0x38, 0x8e,
+0x32, 0x39, 0x90, 0x32, 0x39, 0x91, 0x31, 0x39, 0x93, 0x32, 0x3a, 0x95,
+0x33, 0x3b, 0x96, 0x34, 0x3d, 0x99, 0x36, 0x3d, 0x9b, 0x32, 0x3b, 0x9c,
+0x2f, 0x37, 0x9e, 0x2b, 0x33, 0xa0, 0x28, 0x30, 0xa2, 0x29, 0x32, 0xa4,
+0x2a, 0x32, 0xa6, 0x2b, 0x33, 0xa7, 0x2b, 0x33, 0xa9, 0x2a, 0x32, 0xab,
+0x2a, 0x32, 0xad, 0x2b, 0x33, 0xaf, 0x30, 0x38, 0xb1, 0x36, 0x40, 0xb3,
+0x35, 0x3e, 0xb5, 0x31, 0x3a, 0xb7, 0x2e, 0x36, 0xb9, 0x34, 0x3e, 0xbb,
+0x3e, 0x49, 0xbc, 0x3f, 0x49, 0xbe, 0x34, 0x3d, 0xc0, 0x2d, 0x36, 0xc2,
+0x2d, 0x36, 0xc3, 0x2e, 0x37, 0xc4, 0x31, 0x3a, 0xc5, 0x36, 0x40, 0xc6,
+0x3e, 0x48, 0xc6, 0x4b, 0x56, 0xc7, 0x49, 0x54, 0xaa, 0x41, 0x4a, 0x92,
+0x49, 0x54, 0xab, 0x3e, 0x4a, 0xc8, 0x31, 0x3b, 0xc8, 0x30, 0x3a, 0xc8,
+0x2f, 0x3a, 0xc8, 0x34, 0x3e, 0xc7, 0x39, 0x43, 0xc7, 0x33, 0x3d, 0xc7,
+0x2f, 0x38, 0xc6, 0x2f, 0x39, 0xc6, 0x31, 0x3b, 0xc4, 0x2d, 0x37, 0xc4,
+0x29, 0x32, 0xc3, 0x2a, 0x33, 0xc1, 0x32, 0x3c, 0xc1, 0x3c, 0x46, 0xbf,
+0x44, 0x4f, 0xbe, 0x4a, 0x54, 0xb6, 0x49, 0x54, 0xbb, 0x43, 0x4e, 0xb9,
+0x3f, 0x49, 0xb8, 0x40, 0x4a, 0xb6, 0x40, 0x4a, 0xb5, 0x44, 0x4e, 0xb3,
+0x40, 0x49, 0x99, 0x31, 0x39, 0x71, 0x44, 0x4e, 0xa8, 0x3a, 0x43, 0xac,
+0x30, 0x39, 0xa9, 0x2e, 0x37, 0xa8, 0x2d, 0x35, 0xa6, 0x2d, 0x35, 0xa4,
+0x2a, 0x33, 0xa2, 0x28, 0x2f, 0xa1, 0x24, 0x2d, 0x9e, 0x23, 0x2a, 0x9d,
+0x23, 0x2a, 0x9b, 0x25, 0x2c, 0x99, 0x27, 0x2e, 0x97, 0x29, 0x31, 0x95,
+0x28, 0x30, 0x93, 0x27, 0x2d, 0x92, 0x24, 0x2b, 0x90, 0x22, 0x29, 0x8e,
+0x21, 0x27, 0x8d, 0x21, 0x27, 0x8b, 0x20, 0x26, 0x89, 0x20, 0x25, 0x87,
+0x1f, 0x25, 0x86, 0x1f, 0x24, 0x84, 0x1f, 0x25, 0x83, 0x20, 0x27, 0x81,
+0x22, 0x28, 0x7f, 0x25, 0x2b, 0x7e, 0x27, 0x2d, 0x7d, 0x2a, 0x2f, 0x7b,
+0x2b, 0x31, 0x7a, 0x29, 0x2f, 0x78, 0x28, 0x2e, 0x77, 0x26, 0x2d, 0x75,
+0x25, 0x2b, 0x75, 0x24, 0x2a, 0x73, 0x24, 0x29, 0x72, 0x22, 0x27, 0x70,
+0x21, 0x27, 0x6f, 0x21, 0x26, 0x6e, 0x20, 0x25, 0x6d, 0x1f, 0x24, 0x6b,
+0x1e, 0x24, 0x6a, 0x1d, 0x23, 0x69, 0x1d, 0x23, 0x68, 0x1c, 0x22, 0x67,
+0x1c, 0x22, 0x65, 0x1b, 0x21, 0x65, 0x1a, 0x20, 0x63, 0x1a, 0x1f, 0x63,
+0x1a, 0x1f, 0x62, 0x1a, 0x1e, 0x61, 0x19, 0x1d, 0x60, 0x19, 0x1d, 0x5f,
+0x18, 0x1c, 0x5e, 0x17, 0x1c, 0x5d, 0x17, 0x1b, 0x5c, 0x16, 0x1b, 0x5b,
+0x16, 0x1a, 0x5a, 0x16, 0x1a, 0x59, 0x16, 0x1a, 0x59, 0x15, 0x19, 0x58,
+0x15, 0x19, 0x57, 0x15, 0x18, 0x56, 0x14, 0x18, 0x55, 0x14, 0x18, 0x54,
+0x14, 0x18, 0x54, 0x14, 0x17, 0x53, 0x13, 0x17, 0x52, 0x13, 0x17, 0x51,
+0x13, 0x17, 0x51, 0x13, 0x16, 0x50, 0x12, 0x16, 0x4f, 0x12, 0x16, 0x4f,
+0x12, 0x16, 0x4e, 0x12, 0x15, 0x4d, 0x12, 0x16, 0x4d, 0x12, 0x15, 0x4c,
+0x12, 0x15, 0x4b, 0x12, 0x15, 0x4b, 0x12, 0x15, 0x4a, 0x11, 0x15, 0x49,
+0x11, 0x15, 0x49, 0x12, 0x15, 0x48, 0x12, 0x15, 0x48, 0x11, 0x14, 0x47,
+0x12, 0x15, 0x47, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45,
+0x11, 0x14, 0x45, 0x11, 0x14, 0x44, 0x11, 0x14, 0x43, 0x10, 0x13, 0x42,
+0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40,
+0x10, 0x13, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d,
+0x0e, 0x11, 0x3c, 0x0e, 0x11, 0x3c, 0x0e, 0x10, 0x35, 0x01, 0x01, 0x04,
+0x11, 0x14, 0x41, 0x22, 0x29, 0x83, 0x24, 0x2a, 0x88, 0x20, 0x25, 0x75,
+0x1c, 0x22, 0x6c, 0x1d, 0x22, 0x6d, 0x1c, 0x22, 0x6e, 0x1d, 0x23, 0x70,
+0x1c, 0x23, 0x71, 0x1d, 0x23, 0x71, 0x1d, 0x23, 0x73, 0x1d, 0x23, 0x74,
+0x1d, 0x23, 0x76, 0x1d, 0x23, 0x77, 0x1d, 0x23, 0x79, 0x1c, 0x23, 0x7a,
+0x1c, 0x22, 0x7b, 0x1d, 0x22, 0x7c, 0x1c, 0x22, 0x7e, 0x1d, 0x22, 0x80,
+0x1e, 0x24, 0x81, 0x21, 0x27, 0x83, 0x24, 0x2b, 0x84, 0x29, 0x30, 0x86,
+0x2e, 0x35, 0x87, 0x2f, 0x37, 0x89, 0x2f, 0x37, 0x8a, 0x2f, 0x38, 0x8c,
+0x2f, 0x37, 0x8e, 0x2f, 0x37, 0x90, 0x31, 0x38, 0x91, 0x31, 0x39, 0x93,
+0x32, 0x3a, 0x95, 0x33, 0x3b, 0x96, 0x31, 0x39, 0x98, 0x2e, 0x36, 0x9b,
+0x2a, 0x32, 0x9c, 0x27, 0x2f, 0x9e, 0x28, 0x2f, 0x9f, 0x28, 0x31, 0xa1,
+0x2a, 0x32, 0xa4, 0x2a, 0x32, 0xa5, 0x29, 0x32, 0xa7, 0x29, 0x31, 0xa8,
+0x29, 0x31, 0xab, 0x2d, 0x35, 0xac, 0x31, 0x3b, 0xae, 0x36, 0x3f, 0xb0,
+0x31, 0x3b, 0xb2, 0x2d, 0x37, 0xb4, 0x2e, 0x37, 0xb6, 0x37, 0x41, 0xb8,
+0x42, 0x4c, 0xba, 0x39, 0x42, 0xbb, 0x2f, 0x38, 0xbc, 0x2c, 0x35, 0xbe,
+0x2c, 0x36, 0xc0, 0x2e, 0x37, 0xc0, 0x31, 0x3b, 0xc1, 0x36, 0x40, 0xc2,
+0x3f, 0x49, 0xc3, 0x4b, 0x56, 0xc3, 0x48, 0x53, 0xaa, 0x41, 0x4b, 0x96,
+0x4d, 0x58, 0xb8, 0x3c, 0x46, 0xc3, 0x31, 0x3a, 0xc4, 0x30, 0x39, 0xc4,
+0x2e, 0x38, 0xc4, 0x33, 0x3c, 0xc3, 0x37, 0x41, 0xc3, 0x32, 0x3c, 0xc2,
+0x2e, 0x38, 0xc2, 0x2d, 0x37, 0xc2, 0x2f, 0x39, 0xc1, 0x2e, 0x37, 0xc0,
+0x29, 0x32, 0xbe, 0x27, 0x30, 0xbe, 0x2e, 0x37, 0xbd, 0x37, 0x40, 0xbc,
+0x3f, 0x4a, 0xba, 0x47, 0x51, 0xb9, 0x49, 0x54, 0xb8, 0x43, 0x4d, 0xb6,
+0x3f, 0x48, 0xb5, 0x3f, 0x48, 0xb3, 0x3e, 0x47, 0xb1, 0x3e, 0x48, 0xb0,
+0x45, 0x4e, 0xae, 0x3b, 0x44, 0x8c, 0x33, 0x3a, 0x74, 0x40, 0x4a, 0xa9,
+0x35, 0x3e, 0xa7, 0x2d, 0x35, 0xa6, 0x2d, 0x35, 0xa4, 0x2c, 0x34, 0xa2,
+0x2b, 0x33, 0xa0, 0x29, 0x31, 0x9e, 0x26, 0x2e, 0x9d, 0x24, 0x2b, 0x9b,
+0x22, 0x28, 0x98, 0x22, 0x2a, 0x97, 0x24, 0x2b, 0x95, 0x26, 0x2d, 0x93,
+0x28, 0x30, 0x92, 0x27, 0x2e, 0x90, 0x25, 0x2c, 0x8e, 0x23, 0x2a, 0x8d,
+0x21, 0x29, 0x8b, 0x20, 0x26, 0x89, 0x20, 0x25, 0x87, 0x1f, 0x25, 0x86,
+0x1f, 0x24, 0x85, 0x1e, 0x24, 0x83, 0x1d, 0x23, 0x81, 0x1e, 0x24, 0x80,
+0x1f, 0x25, 0x7e, 0x20, 0x27, 0x7d, 0x23, 0x28, 0x7c, 0x24, 0x2b, 0x7a,
+0x27, 0x2d, 0x79, 0x29, 0x2f, 0x77, 0x28, 0x2e, 0x76, 0x27, 0x2d, 0x75,
+0x25, 0x2c, 0x74, 0x24, 0x2b, 0x72, 0x24, 0x29, 0x71, 0x23, 0x28, 0x70,
+0x21, 0x27, 0x6e, 0x21, 0x26, 0x6d, 0x20, 0x25, 0x6c, 0x1f, 0x24, 0x6b,
+0x1e, 0x23, 0x69, 0x1e, 0x23, 0x68, 0x1d, 0x23, 0x67, 0x1c, 0x22, 0x66,
+0x1c, 0x22, 0x65, 0x1b, 0x21, 0x65, 0x1b, 0x21, 0x63, 0x1a, 0x20, 0x63,
+0x1a, 0x1f, 0x62, 0x1a, 0x1e, 0x60, 0x19, 0x1e, 0x5f, 0x19, 0x1d, 0x5f,
+0x18, 0x1c, 0x5e, 0x18, 0x1c, 0x5d, 0x17, 0x1c, 0x5c, 0x17, 0x1b, 0x5b,
+0x17, 0x1b, 0x5a, 0x16, 0x1a, 0x59, 0x16, 0x1a, 0x58, 0x15, 0x19, 0x57,
+0x15, 0x19, 0x57, 0x15, 0x19, 0x56, 0x14, 0x18, 0x55, 0x14, 0x18, 0x54,
+0x14, 0x17, 0x53, 0x14, 0x17, 0x53, 0x13, 0x17, 0x52, 0x13, 0x17, 0x51,
+0x13, 0x16, 0x50, 0x13, 0x16, 0x50, 0x12, 0x16, 0x4f, 0x12, 0x16, 0x4e,
+0x12, 0x16, 0x4e, 0x12, 0x15, 0x4d, 0x12, 0x15, 0x4c, 0x12, 0x15, 0x4c,
+0x11, 0x15, 0x4b, 0x11, 0x15, 0x4a, 0x11, 0x15, 0x4a, 0x11, 0x15, 0x49,
+0x11, 0x15, 0x49, 0x11, 0x14, 0x48, 0x11, 0x14, 0x48, 0x11, 0x14, 0x47,
+0x11, 0x14, 0x45, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45, 0x11, 0x14, 0x45,
+0x11, 0x14, 0x44, 0x11, 0x14, 0x44, 0x11, 0x14, 0x43, 0x10, 0x13, 0x42,
+0x10, 0x13, 0x41, 0x10, 0x13, 0x41, 0x10, 0x13, 0x40, 0x10, 0x13, 0x40,
+0x10, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3d, 0x0f, 0x12, 0x3d, 0x0e, 0x11, 0x3c,
+0x0e, 0x11, 0x3c, 0x0e, 0x11, 0x3c, 0x0e, 0x10, 0x35, 0x01, 0x01, 0x04,
+0x10, 0x14, 0x41, 0x22, 0x29, 0x83, 0x23, 0x2a, 0x82, 0x1b, 0x21, 0x68,
+0x19, 0x1d, 0x5c, 0x18, 0x1d, 0x5d, 0x19, 0x1e, 0x5f, 0x19, 0x1e, 0x60,
+0x19, 0x1e, 0x61, 0x19, 0x1e, 0x62, 0x19, 0x1e, 0x63, 0x19, 0x1e, 0x64,
+0x19, 0x1e, 0x65, 0x19, 0x1d, 0x66, 0x19, 0x1e, 0x67, 0x19, 0x1d, 0x68,
+0x19, 0x1d, 0x6a, 0x18, 0x1c, 0x6a, 0x19, 0x1e, 0x6c, 0x1a, 0x20, 0x6d,
+0x1e, 0x22, 0x6f, 0x20, 0x25, 0x70, 0x24, 0x29, 0x71, 0x27, 0x2e, 0x72,
+0x28, 0x2e, 0x73, 0x28, 0x2e, 0x75, 0x28, 0x2e, 0x77, 0x28, 0x2e, 0x77,
+0x28, 0x2f, 0x79, 0x29, 0x30, 0x7b, 0x29, 0x30, 0x7d, 0x2b, 0x31, 0x7d,
+0x2b, 0x32, 0x7e, 0x2a, 0x31, 0x80, 0x27, 0x2e, 0x81, 0x25, 0x2b, 0x83,
+0x22, 0x29, 0x85, 0x22, 0x28, 0x86, 0x22, 0x29, 0x88, 0x23, 0x2b, 0x8a,
+0x25, 0x2b, 0x8a, 0x24, 0x2b, 0x8c, 0x23, 0x2a, 0x8d, 0x22, 0x29, 0x8f,
+0x25, 0x2d, 0x91, 0x29, 0x30, 0x92, 0x2e, 0x35, 0x94, 0x2c, 0x32, 0x96,
+0x28, 0x30, 0x96, 0x25, 0x2d, 0x97, 0x2b, 0x32, 0x99, 0x32, 0x3a, 0x9b,
+0x36, 0x3e, 0x9d, 0x2d, 0x34, 0x9f, 0x26, 0x2e, 0xa0, 0x25, 0x2e, 0xa1,
+0x26, 0x2e, 0xa2, 0x27, 0x2f, 0xa2, 0x2b, 0x33, 0xa3, 0x2f, 0x37, 0xa3,
+0x36, 0x3e, 0xa3, 0x40, 0x4b, 0xa3, 0x3f, 0x48, 0x96, 0x39, 0x40, 0x81,
+0x43, 0x4b, 0xa4, 0x32, 0x3b, 0xa5, 0x29, 0x32, 0xa5, 0x28, 0x31, 0xa5,
+0x28, 0x31, 0xa5, 0x2b, 0x33, 0xa5, 0x2e, 0x37, 0xa4, 0x2c, 0x34, 0xa4,
+0x28, 0x30, 0xa3, 0x27, 0x2f, 0xa3, 0x28, 0x30, 0xa2, 0x28, 0x30, 0xa2,
+0x24, 0x2c, 0xa2, 0x22, 0x29, 0xa1, 0x25, 0x2e, 0xa0, 0x2d, 0x35, 0x9f,
+0x32, 0x3b, 0x9d, 0x39, 0x41, 0x9d, 0x3f, 0x48, 0x9b, 0x3b, 0x44, 0x9a,
+0x37, 0x3e, 0x98, 0x34, 0x3b, 0x97, 0x34, 0x3d, 0x96, 0x34, 0x3d, 0x95,
+0x37, 0x3f, 0x94, 0x39, 0x42, 0x8d, 0x30, 0x37, 0x6f, 0x35, 0x3c, 0x7e,
+0x32, 0x3b, 0x8e, 0x2b, 0x32, 0x8c, 0x26, 0x2e, 0x8b, 0x26, 0x2d, 0x8a,
+0x25, 0x2d, 0x89, 0x24, 0x2c, 0x87, 0x22, 0x29, 0x85, 0x21, 0x26, 0x83,
+0x1e, 0x25, 0x82, 0x1d, 0x23, 0x80, 0x1e, 0x23, 0x7e, 0x1f, 0x25, 0x7e,
+0x21, 0x26, 0x7d, 0x22, 0x28, 0x7b, 0x22, 0x27, 0x7a, 0x20, 0x25, 0x78,
+0x1e, 0x25, 0x77, 0x1d, 0x23, 0x75, 0x1c, 0x22, 0x73, 0x1b, 0x20, 0x73,
+0x1a, 0x20, 0x71, 0x1a, 0x20, 0x70, 0x1a, 0x20, 0x6f, 0x19, 0x1f, 0x6d,
+0x19, 0x1e, 0x6d, 0x1a, 0x1f, 0x6b, 0x1b, 0x22, 0x6a, 0x1d, 0x22, 0x68,
+0x1f, 0x23, 0x67, 0x20, 0x25, 0x66, 0x22, 0x26, 0x65, 0x22, 0x27, 0x64,
+0x22, 0x26, 0x64, 0x21, 0x26, 0x63, 0x20, 0x25, 0x61, 0x1f, 0x24, 0x60,
+0x1e, 0x22, 0x5f, 0x1d, 0x22, 0x5d, 0x1c, 0x21, 0x5c, 0x1b, 0x20, 0x5c,
+0x1b, 0x20, 0x5b, 0x1a, 0x1f, 0x5a, 0x19, 0x1e, 0x58, 0x19, 0x1e, 0x57,
+0x19, 0x1e, 0x57, 0x18, 0x1d, 0x56, 0x18, 0x1d, 0x56, 0x17, 0x1c, 0x55,
+0x17, 0x1b, 0x54, 0x17, 0x1a, 0x53, 0x17, 0x1a, 0x52, 0x17, 0x19, 0x51,
+0x16, 0x19, 0x50, 0x16, 0x19, 0x50, 0x15, 0x19, 0x4f, 0x15, 0x18, 0x4e,
+0x15, 0x18, 0x4e, 0x15, 0x18, 0x4d, 0x14, 0x17, 0x4c, 0x13, 0x17, 0x4b,
+0x13, 0x17, 0x4b, 0x13, 0x16, 0x4a, 0x13, 0x16, 0x4a, 0x12, 0x16, 0x49,
+0x12, 0x16, 0x48, 0x12, 0x15, 0x47, 0x11, 0x15, 0x47, 0x11, 0x15, 0x46,
+0x11, 0x15, 0x45, 0x10, 0x14, 0x45, 0x10, 0x14, 0x45, 0x10, 0x14, 0x44,
+0x10, 0x13, 0x43, 0x10, 0x13, 0x43, 0x10, 0x13, 0x42, 0x10, 0x13, 0x42,
+0x0f, 0x13, 0x41, 0x0f, 0x12, 0x40, 0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3f,
+0x0f, 0x12, 0x3f, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e, 0x0f, 0x12, 0x3e,
+0x0f, 0x12, 0x3c, 0x0f, 0x12, 0x3c, 0x0e, 0x12, 0x3c, 0x0f, 0x12, 0x3c,
+0x0e, 0x12, 0x3b, 0x0e, 0x12, 0x3b, 0x0e, 0x10, 0x39, 0x0e, 0x10, 0x39,
+0x0e, 0x10, 0x39, 0x0e, 0x10, 0x39, 0x0e, 0x10, 0x38, 0x0e, 0x10, 0x38,
+0x0d, 0x10, 0x37, 0x0d, 0x10, 0x37, 0x0d, 0x10, 0x36, 0x0d, 0x10, 0x36,
+0x0d, 0x10, 0x36, 0x0d, 0x10, 0x35, 0x0d, 0x10, 0x35, 0x0c, 0x0f, 0x34,
+0x0c, 0x0f, 0x34, 0x0c, 0x0f, 0x34, 0x0c, 0x0f, 0x32, 0x01, 0x01, 0x04,
+0x02, 0x02, 0x08, 0x0a, 0x0d, 0x29, 0x02, 0x03, 0x09, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01,
+0x00, 0x01, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
+0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff --git a/src/main.c b/src/main.c
new file mode 100644 (file)
index 0000000..157b9ac
--- /dev/null
@@ -0,0 +1,436 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include <gdk/gdkkeysyms.h> /* for keyboard values */
+
+static void parse_command_line(int argc, char *argv[], gchar **path, gchar **file);
+static void setup_default_options();
+
+/*
+ *-----------------------------------------------------------------------------
+ * path manipulation routines (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+gchar *filename_from_path(char *t)
+{
+       char *p;
+
+       p = t + strlen(t);
+       while(p > t && p[0] != '/') p--;
+       if (p[0] == '/') p++;
+       return p;
+}
+
+gchar *remove_level_from_path(gchar *path)
+{
+       gchar *new_path;
+       gchar *ptr = path;
+       gint p;
+
+       if (!path) return NULL;
+
+       p = strlen(path) - 1;
+       if (p < 0) return NULL;
+       while(ptr[p] != '/' && p > 0) p--;
+       if (p == 0 && ptr[p] == '/') p++;
+       new_path = g_strndup(path, (guint)p);
+       return new_path;
+}
+
+void parse_out_relatives(gchar *path)
+{
+       gint s, t;
+
+       if (!path) return;
+
+       s = t = 0;
+
+       while (path[s] != '\0')
+               {
+               if (path[s] == '/' && path[s+1] == '.' && (path[s+2] == '/' || path[s+2] == '\0') )
+                       {
+                       s += 2;
+                       }
+               else if (path[s] == '/' && path[s+1] == '.' && path[s+2] == '.' && (path[s+3] == '/' || path[s+3] == '\0') )
+                       {
+                       s += 3;
+                       if (t > 0) t--;
+                       while (path[t] != '/' && t > 0) t--;
+                       }
+               else
+                       {
+                       if (s != t) path[t] = path[s];
+                       t++;
+                       s++;
+                       }
+               }
+       if (t == 0 && path[t] == '/') t++;
+       if (t > 1 && path[t-1] == '/') t--;
+       path[t] = '\0';
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * external editor start routines (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void start_editor_from_file(gint n, gchar *path)
+{
+       gchar *cmd;
+       if (!path) return;
+       cmd = g_strdup_printf("%s \"%s\" &", editor_command[n], path);
+       printf(_("GQview running: %s\n"),cmd);
+       system(cmd);
+       g_free(cmd);
+}
+
+void start_editor_from_image(gint n)
+{
+       start_editor_from_file(n, image_get_path());
+}
+
+void start_editor_from_list(gint n)
+{
+       gchar *cmd;
+       gchar *buf;
+       GList *list = file_get_selected_list();
+       GList *work;
+       if (!list) return;
+       work = list;
+       cmd = g_strconcat(editor_command[n], " ", NULL);
+       while(work)
+               {
+               buf = cmd;
+               cmd = g_strconcat(buf, "\"", work->data, "\" ", NULL);
+               g_free(buf);
+               work = work->next;
+               }
+       buf = cmd;
+       cmd = g_strconcat(buf, "&", NULL);
+       g_free(buf);
+       printf(_("GQview running: %s\n"),cmd);
+       system(cmd);
+       g_free(cmd);
+       free_selected_list(list);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * keyboard functions
+ *-----------------------------------------------------------------------------
+ */
+
+void keyboard_scroll_calc(gint *x, gint *y, GdkEventKey *event)
+{
+       static gint delta = 0;
+       static guint32 time_old = 0;
+       static guint keyval_old = 0;
+
+       if (progressive_key_scrolling)
+               {
+               guint32 time_diff;
+
+               time_diff = event->time - time_old;
+
+               /* key pressed within 125ms ? (1/8 second) */
+               if (time_diff > 125 || event->keyval != keyval_old) delta = 0;
+
+               time_old = event->time;
+               keyval_old = event->keyval;
+
+               delta += 2;
+               }
+       else
+               {
+               delta = 8;
+               }
+
+       *x = *x * delta;
+       *y = *y * delta;
+}
+
+gint key_press_cb(GtkWidget *widget, GdkEventKey *event)
+{
+       gint stop_signal = FALSE;
+       gint x = 0;
+       gint y = 0;
+
+       if (GTK_WIDGET_HAS_FOCUS(path_entry))
+               {
+               if (event->keyval == GDK_Escape)
+                       gtk_entry_set_text(GTK_ENTRY(path_entry), current_path);
+               return stop_signal;
+               }
+
+       if (full_screen_window || GTK_WIDGET_HAS_FOCUS(main_image->viewport))
+               {
+               switch (event->keyval)
+                       {
+                       case GDK_Left:
+                               x -= 1;
+                               stop_signal = TRUE;
+                               break;
+                       case GDK_Right:
+                               x += 1;
+                               stop_signal = TRUE;
+                               break;
+                       case GDK_Up:
+                               y -= 1;
+                               stop_signal = TRUE;
+                               break;
+                       case GDK_Down:
+                               y += 1;
+                               stop_signal = TRUE;
+                               break;
+                       case GDK_BackSpace:
+                               file_prev_image();
+                               stop_signal = TRUE;
+                               break;
+                       case GDK_space:
+                               file_next_image();
+                               stop_signal = TRUE;
+                               break;
+                       }
+               }
+
+       switch (event->keyval)
+               {
+               case '+':
+                       image_adjust_zoom(1);
+                       break;
+               case GDK_Page_Up:
+                       file_prev_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Page_Down:
+                       file_next_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Home:
+                       file_first_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_End:
+                       file_last_image();
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Delete:
+                       file_util_delete(image_get_path(), NULL);
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Escape:
+                       interrupt_thumbs();
+                       stop_signal = TRUE;
+                       break;
+               case 'Q': case 'q':
+                       if (event->state == 0 || (event->state & GDK_MODIFIER_MASK) == GDK_LOCK_MASK)
+                               {
+                               exit_gqview();
+                               return FALSE;
+                               }
+                       break;
+               }
+
+       if (event->state & GDK_SHIFT_MASK)
+               {
+               x *= 3;
+               y *= 3;
+               }
+
+       if (x != 0 || y!= 0)
+               {
+               keyboard_scroll_calc(&x, &y, event);
+               image_scroll(x, y);
+               }
+
+       if (stop_signal) gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event");
+
+       return stop_signal;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * command line parser (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void parse_command_line(int argc, char *argv[], gchar **path, gchar **file)
+{
+       if (argc > 1)
+               {
+               gint i;
+               gchar *base_dir = get_current_dir();
+               i = 1;
+               while (i < argc)
+                       {
+                       gchar *cmd_line = argv[i];
+                       gchar *cmd_all = g_strconcat(base_dir, "/", cmd_line, NULL);
+
+                       if (!*path && cmd_line[0] == '/' && isdir(cmd_line))
+                               {
+                               *path = g_strdup(cmd_line);
+                               }
+                       else if (!*path && isdir(cmd_all))
+                               {
+                               *path = g_strdup(cmd_all);
+                               }
+                       else if (!*file && cmd_line[0] == '/' && isfile(cmd_line))
+                               {
+                               g_free(*path);
+                               *path = remove_level_from_path(cmd_line);
+                               *file = g_strdup(cmd_line);
+                               }
+                       else if (!*file && isfile(cmd_all))
+                               {
+                               g_free(*path);
+                               *path = remove_level_from_path(cmd_all);
+                               *file = g_strdup(cmd_all);
+                               }
+                       else if (strcmp(cmd_line, "-debug") == 0)
+                               {
+                               debug = TRUE;
+                               printf("debugging output enabled\n");
+                               }
+                       else if (strcmp(cmd_line, "+t") == 0 ||
+                                strcmp(cmd_line, "+tools") == 0)
+                               {
+                               tools_float = FALSE;
+                               tools_hidden = FALSE;
+                               }
+                       else if (strcmp(cmd_line, "-t") == 0 ||
+                                strcmp(cmd_line, "-tools") == 0)
+                               {
+                               tools_hidden = TRUE;
+                               }
+                       else if (strcmp(cmd_line, "-help") == 0)
+                               {
+                               printf("GQview version %s\n", VERSION);
+                               printf(_("Usage: gqview [options] [path]\n\n"));
+                               printf(_("valid options are:\n"));
+                               printf(_("  +t, +tools                 force show of tools\n"));
+                               printf(_("  -t, -tools                 force hide of tools\n"));
+                               printf(_("  -debug                     turn on debug output\n"));
+                               printf(_("  -help                      this message\n\n"));
+                               exit (0);
+                               }
+                       else 
+                               {
+                               printf(_("invalid or ignored: %s\nUse -help for options\n"), cmd_line);
+                               }
+                       g_free(cmd_all);
+                       i++;
+                       }
+               g_free(base_dir);
+               parse_out_relatives(*path);
+               parse_out_relatives(*file);
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * startup, init, and exit
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void setup_default_options()
+{
+       gint i;
+
+       for(i=0; i<8; i++)
+               {
+               editor_name[i] = NULL;
+               editor_command[i] = NULL;
+               }
+
+       editor_name[0] = g_strdup(_("The Gimp"));
+       editor_command[0] = g_strdup("gimp");
+
+       editor_name[1] = g_strdup(_("Electric Eyes"));
+       editor_command[1] = g_strdup("ee");
+
+       editor_name[2] = g_strdup(_("XV"));
+       editor_command[2] = g_strdup("xv");
+
+       editor_name[3] = g_strdup(_("Xpaint"));
+       editor_command[3] = g_strdup("xpaint");
+
+       custom_filter = g_strdup(".eim;");
+}
+
+void exit_gqview()
+{
+       full_screen_stop();
+
+       gdk_window_get_position (mainwindow->window, &main_window_x, &main_window_y);
+       gdk_window_get_size(mainwindow->window, &main_window_w, &main_window_h);
+
+       if (toolwindow)
+               {
+               gdk_window_get_position (toolwindow->window, &float_window_x, &float_window_y);
+               gdk_window_get_size(toolwindow->window, &float_window_w, &float_window_h);
+               }
+       save_options();
+
+       gtk_main_quit();
+}
+
+int main (int argc, char *argv[])
+{
+       gchar *cmd_path = NULL;
+       gchar *cmd_file = NULL;
+
+       /* setup locale, i18n */
+       gtk_set_locale();
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       /* setup random seed for random slideshow */
+        srand (time (0));
+
+       gtk_init (&argc, &argv);
+       gdk_imlib_init();
+
+       /* push the correct color depths to gtk, (for 8-bit psuedo color displays)
+        * they should be popped, too, I guess...
+        */
+       gtk_widget_push_visual(gdk_imlib_get_visual());
+       gtk_widget_push_colormap(gdk_imlib_get_colormap());
+
+       setup_default_options();
+       load_options();
+
+       parse_command_line(argc, argv, &cmd_path, &cmd_file);
+
+       if (cmd_path)
+               current_path = g_strdup(cmd_path);
+       else if (startup_path_enable && startup_path && isdir(startup_path))
+               current_path = g_strdup(startup_path);
+       else
+               current_path = get_current_dir();
+
+       create_main_window();
+       update_edit_menus(mainwindow_accel_grp);
+       rebuild_file_filter();
+       filelist_refresh();
+
+       init_dnd();
+
+       while(gtk_events_pending()) gtk_main_iteration();
+       image_change_to(cmd_file);
+
+       g_free(cmd_path);
+       g_free(cmd_file);
+
+       gtk_main ();
+       return 0;
+}
+
+
diff --git a/src/menu.c b/src/menu.c
new file mode 100644 (file)
index 0000000..36818d0
--- /dev/null
@@ -0,0 +1,671 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+#include "icons/icon_thumb.xpm"
+#include "icons/icon_home.xpm"
+#include "icons/icon_reload.xpm"
+#include "icons/icon_zoom_in.xpm"
+#include "icons/icon_zoom_out.xpm"
+#include "icons/icon_zoom_fit.xpm"
+#include "icons/icon_zoom_norm.xpm"
+#include "icons/icon_config.xpm"
+#include "icons/icon_float.xpm"
+
+static void set_thumbnails(gint mode);
+
+static void add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *accel_group,
+                               guint accel_key, guint accel_mods, GtkSignalFunc func, gpointer data);
+
+static void add_edit_items(GtkWidget *menu, GtkSignalFunc func, GtkAccelGroup *accel_grp);
+
+static void add_button_to_bar(GtkWidget *hbox, gchar **pixmap_data,
+                             GtkTooltips *tooltips, gchar *tip_text,
+                             GtkSignalFunc func, gpointer data);
+
+static void set_thumbnails(gint mode)
+{
+       if (thumbnails_enabled == mode) return;
+       thumbnails_enabled = mode;
+       gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(thumb_menu_item), thumbnails_enabled);
+       gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(thumb_button), thumbnails_enabled);
+       filelist_populate_clist();
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu and button callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void exit_cb(GtkWidget *widget, gpointer data)
+{
+       exit_gqview();
+}
+
+static void about_cb(GtkWidget *widget, gpointer data)
+{
+       show_about_window();
+}
+
+static void create_dir_cb(GtkWidget *widget, gpointer data)
+{
+       file_util_create_dir(current_path);
+}
+
+static void zoom_in_cb(GtkWidget *widget, gpointer data)
+{
+       image_adjust_zoom(1);
+}
+
+static void zoom_out_cb(GtkWidget *widget, gpointer data)
+{
+       image_adjust_zoom(-1);
+}
+
+static void zoom_1_1_cb(GtkWidget *widget, gpointer data)
+{
+       image_set_zoom(1);
+}
+
+static void zoom_fit_cb(GtkWidget *widget, gpointer data)
+{
+       image_set_zoom(0);
+}
+
+static void thumb_menu_cb(GtkWidget *widget, gpointer data)
+{
+       set_thumbnails(GTK_CHECK_MENU_ITEM(widget)->active);
+}
+
+static void thumb_button_cb(GtkWidget *widget, gpointer data)
+{
+       set_thumbnails(GTK_TOGGLE_BUTTON(widget)->active);
+}
+
+static void refresh_cb(GtkWidget *widget, gpointer data)
+{
+       gchar *buf = g_strdup(current_path);
+       filelist_change_to(buf);
+       g_free(buf);
+}
+
+static void float_cb(GtkWidget *widget, gpointer data)
+{
+       toolwindow_float();
+}
+
+static void hide_cb(GtkWidget *widget, gpointer data)
+{
+       toolwindow_hide();
+}
+
+static void slideshow_cb(GtkWidget *widget, gpointer data)
+{
+       slideshow_toggle();
+}
+
+static void home_dir_cb(GtkWidget *widget, gpointer data)
+{
+       gchar *path = homedir();
+       if (path) filelist_change_to(path);
+}
+
+static void config_cb(GtkWidget *widget, gpointer data)
+{
+       show_config_window();
+}
+
+static void remove_thumb_cb(GtkWidget *widget, gpointer data)
+{
+       maintain_thumbnail_dir("/", TRUE);
+}
+
+static void full_screen_cb(GtkWidget *widget, gpointer data)
+{
+       full_screen_toggle();
+}
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * image menu callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void copy_image_cb(GtkWidget *widget, gpointer data)
+{
+       full_screen_stop();
+       file_util_copy(image_get_path(), NULL, current_path);
+}
+
+static void move_image_cb(GtkWidget *widget, gpointer data)
+{
+       full_screen_stop();
+       file_util_move(image_get_path(), NULL, current_path);
+}
+
+static void rename_image_cb(GtkWidget *widget, gpointer data)
+{
+       full_screen_stop();
+       file_util_rename(image_get_path(), NULL);
+}
+
+static void delete_image_cb(GtkWidget *widget, gpointer data)
+{
+       full_screen_stop();
+       file_util_delete(image_get_path(), NULL);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * file menu callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void copy_file_cb(GtkWidget *widget, gpointer data)
+{
+       file_util_copy(NULL, file_get_selected_list(), current_path);
+}
+
+static void move_file_cb(GtkWidget *widget, gpointer data)
+{
+       file_util_move(NULL, file_get_selected_list(), current_path);
+}
+
+static void rename_file_cb(GtkWidget *widget, gpointer data)
+{
+       file_util_rename(NULL, file_get_selected_list());
+}
+
+static void delete_file_cb(GtkWidget *widget, gpointer data)
+{
+       file_util_delete(NULL, file_get_selected_list());
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * filelist popup menu callbacks (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void popup_copy_file_cb(GtkWidget *widget, gpointer data)
+{
+       if (file_clicked_is_selected())
+               {
+               file_util_copy(NULL, file_get_selected_list(), current_path);
+               }
+       else
+               {
+               gchar *path = file_clicked_get_path();
+               file_util_copy(path, NULL, current_path);
+               g_free(path);
+               }
+}
+
+static void popup_move_file_cb(GtkWidget *widget, gpointer data)
+{
+       if (file_clicked_is_selected())
+               {
+               file_util_move(NULL, file_get_selected_list(), current_path);
+               }
+       else
+               {
+               gchar *path = file_clicked_get_path();
+               file_util_move(path, NULL, current_path);
+               g_free(path);
+               }
+}
+
+static void popup_rename_file_cb(GtkWidget *widget, gpointer data)
+{
+       if (file_clicked_is_selected())
+               {
+               file_util_rename(NULL, file_get_selected_list());
+               }
+       else
+               {
+               gchar *path = file_clicked_get_path();
+               file_util_rename(path, NULL);
+               g_free(path);
+               }
+}
+
+static void popup_delete_file_cb(GtkWidget *widget, gpointer data)
+{
+       if (file_clicked_is_selected())
+               {
+               file_util_delete(NULL, file_get_selected_list());
+               }
+       else
+               {
+               gchar *path = file_clicked_get_path();
+               file_util_delete(path, NULL);
+               g_free(path);
+               }
+}
+
+static void edit_image_cb(GtkWidget *widget, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+       start_editor_from_image(n);
+}
+
+static void edit_list_cb(GtkWidget *widget, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+       start_editor_from_list(n);
+}
+
+static void edit_full_cb(GtkWidget *widget, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+       full_screen_stop();
+       start_editor_from_image(n);
+}
+
+static void edit_view_cb(GtkWidget *widget, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+       view_window_active_edit(n);
+}
+
+static void popup_edit_list_cb(GtkWidget *widget, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+
+       if (file_clicked_is_selected())
+               {
+               start_editor_from_list(n);
+               }
+       else
+               {
+               gchar *path;
+               start_editor_from_file(n, path);
+               g_free(path);
+               }
+}
+
+static void new_window_file_cb(GtkWidget *widget, gpointer data)
+{
+       gchar *path = file_clicked_get_path();
+       view_window_new(path);
+       g_free(path);
+}
+
+static void new_window_image_cb(GtkWidget *widget, gpointer data)
+{
+       view_window_new(image_get_path());
+}
+
+static void menu_file_popup_hide_cb(GtkWidget *widget, gpointer data)
+{
+       file_clist_highlight_unset();
+}
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu addition utilities (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void add_menu_item(GtkWidget *menu, gchar *label, GtkAccelGroup *accel_group,
+                               guint accel_key, guint accel_mods, GtkSignalFunc func, gpointer data)
+{
+       GtkWidget *item;
+
+       item = gtk_menu_item_new_with_label(label);
+       gtk_widget_add_accelerator (item, "activate", accel_group, accel_key, accel_mods, GTK_ACCEL_VISIBLE);
+       gtk_signal_connect (GTK_OBJECT (item), "activate",(GtkSignalFunc) func, data);
+       gtk_menu_append(GTK_MENU(menu), item);
+       gtk_widget_show(item);
+}
+
+void add_menu_popup_item(GtkWidget *menu, gchar *label,
+                        GtkSignalFunc func, gpointer data)
+{
+       GtkWidget *item;
+
+       item = gtk_menu_item_new_with_label(label);
+       gtk_signal_connect (GTK_OBJECT (item), "activate",(GtkSignalFunc) func, data);
+       gtk_menu_append(GTK_MENU(menu), item);
+       gtk_widget_show(item);
+}
+
+void add_menu_divider(GtkWidget *menu)
+{
+       GtkWidget *item = gtk_menu_item_new();
+        gtk_menu_append(GTK_MENU(menu),item);
+        gtk_widget_show(item);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * edit menu routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void add_edit_items(GtkWidget *menu, GtkSignalFunc func, GtkAccelGroup *accel_grp)
+{
+       gint i;
+       for (i = 0; i < 8; i++)
+               {
+               if (editor_command[i] && strlen(editor_command[i]) > 0)
+                       {
+                       gchar *text;
+                       if (editor_name[i] && strlen(editor_name[i]) > 0)
+                               text = g_strdup_printf(_("in %s..."), editor_name[i]);
+                       else
+                               text = g_strdup(_("in (unknown)..."));
+                       if (accel_grp)
+                               add_menu_item(menu, text, accel_grp, i + 49, GDK_CONTROL_MASK, func, GINT_TO_POINTER(i));
+                       else
+                               add_menu_popup_item(menu, text, func, GINT_TO_POINTER(i));
+                       g_free(text);
+                       }
+               }
+}
+
+void update_edit_menus(GtkAccelGroup *accel_grp)
+{
+       GtkWidget *menu;
+
+       /* main edit menu */
+
+       menu = gtk_menu_new();
+       add_edit_items(menu, edit_list_cb, accel_grp);
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Options..."), accel_grp, 'O', GDK_CONTROL_MASK, config_cb, NULL);
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Remove old thumbnails"), accel_grp, 'T', GDK_CONTROL_MASK, remove_thumb_cb, NULL);
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_edit), menu);
+
+       /* file edit popup */
+       menu = gtk_menu_new();
+       add_edit_items(menu, popup_edit_list_cb, NULL);
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_filelist_edit), menu);
+
+       /* image edit popup */
+       menu = gtk_menu_new();
+       add_edit_items(menu, edit_image_cb, NULL);
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_image_edit), menu);
+
+       /* full screen edit popup */
+       menu = gtk_menu_new();
+       add_edit_items(menu, edit_full_cb, NULL);
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_window_full_edit), menu);
+
+       /* view edit popup */
+       menu = gtk_menu_new();
+       add_edit_items(menu, edit_view_cb, NULL);
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_window_view_edit), menu);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu bar setup routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+GtkWidget *create_menu_bar(GtkAccelGroup *accel_grp)
+{
+       GtkWidget *bar;
+       GtkWidget *menu;
+
+       bar = gtk_menu_bar_new();
+
+       /* file menu */
+       menu_file = gtk_menu_item_new_with_label(_("File"));
+       gtk_widget_show(menu_file);
+
+       menu = gtk_menu_new();
+       add_menu_item(menu, _("Create Dir..."), accel_grp, 'N', GDK_CONTROL_MASK, create_dir_cb, NULL);
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Copy..."), accel_grp, 'C', GDK_CONTROL_MASK, copy_file_cb, NULL);
+       add_menu_item(menu, _("Move..."), accel_grp, 'M', GDK_CONTROL_MASK, move_file_cb, NULL);
+       add_menu_item(menu, _("Rename..."), accel_grp, 'R', GDK_CONTROL_MASK, rename_file_cb, NULL);
+       add_menu_item(menu, _("Delete..."), accel_grp, 'D', GDK_CONTROL_MASK, delete_file_cb, NULL);
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Exit"), accel_grp, 'Q', GDK_CONTROL_MASK, exit_cb, NULL);
+
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_file),menu);
+       gtk_menu_bar_append(GTK_MENU_BAR(bar),menu_file);
+
+       /* edit menu */
+       menu_edit = gtk_menu_item_new_with_label(_("Edit"));
+       gtk_widget_show(menu_edit);
+
+       menu = gtk_menu_new();
+
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_edit), menu);
+       gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_edit);
+
+       /* view menu */
+       menu_view = gtk_menu_item_new_with_label(_("View"));
+       gtk_widget_show(menu_view);
+
+       menu = gtk_menu_new();
+       add_menu_item(menu, _("Zoom in"), accel_grp, '=', FALSE, zoom_in_cb, NULL);
+       add_menu_item(menu, _("Zoom out"), accel_grp, '-', FALSE, zoom_out_cb, NULL);
+       add_menu_item(menu, _("Zoom 1:1"), accel_grp, 'Z', FALSE, zoom_1_1_cb, NULL);
+       add_menu_item(menu, _("Fit image to window"), accel_grp, 'X', FALSE, zoom_fit_cb, NULL);
+       add_menu_divider(menu);
+
+       add_menu_item(menu, _("Full screen"), accel_grp, 'F', GDK_CONTROL_MASK, full_screen_cb, NULL);
+       thumb_menu_item = gtk_check_menu_item_new_with_label(_("Thumbnails"));
+       gtk_widget_add_accelerator (thumb_menu_item, "activate", accel_grp, 'T', FALSE, GTK_ACCEL_VISIBLE);
+       gtk_signal_connect (GTK_OBJECT (thumb_menu_item), "activate",(GtkSignalFunc) thumb_menu_cb, thumb_menu_item);
+       gtk_menu_append(GTK_MENU(menu), thumb_menu_item);
+       gtk_widget_show(thumb_menu_item);
+
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Refresh Lists"), accel_grp, 'R', FALSE, refresh_cb, NULL);
+       add_menu_item(menu, _("(Un)Float file list"), accel_grp, 'F', FALSE, float_cb, NULL);
+       add_menu_item(menu, _("(Un)Hide file list"), accel_grp, 'H', FALSE, hide_cb, NULL);
+
+       add_menu_divider(menu);
+       add_menu_item(menu, _("Toggle slideshow"), accel_grp, 'S', FALSE, slideshow_cb, NULL);
+
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_view), menu);
+       gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_view);
+
+       /* help menu */
+       menu_help = gtk_menu_item_new_with_label(_("Help"));
+       gtk_widget_show(menu_help);
+
+       menu = gtk_menu_new();
+       add_menu_item(menu, _("About"), accel_grp, 'A', GDK_CONTROL_MASK, about_cb, NULL);
+
+       gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_help), menu);
+       gtk_menu_bar_append(GTK_MENU_BAR(bar), menu_help);
+
+       return bar;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu file list routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void create_menu_file_list_popup()
+{
+       menu_file_popup = gtk_menu_new();
+       gtk_signal_connect(GTK_OBJECT(menu_file_popup), "hide", (GtkSignalFunc) menu_file_popup_hide_cb, NULL);
+
+       menu_filelist_edit = gtk_menu_item_new_with_label(_("Edit"));
+       gtk_menu_append(GTK_MENU(menu_file_popup), menu_filelist_edit);
+       gtk_widget_show(menu_filelist_edit);
+
+       add_menu_popup_item(menu_file_popup, _("View in new window"), new_window_file_cb, NULL);
+
+       add_menu_divider(menu_file_popup);
+       add_menu_popup_item(menu_file_popup, _("Copy..."), popup_copy_file_cb, NULL);
+       add_menu_popup_item(menu_file_popup, _("Move..."), popup_move_file_cb, NULL);
+       add_menu_popup_item(menu_file_popup, _("Rename..."), popup_rename_file_cb, NULL);
+       add_menu_popup_item(menu_file_popup, _("Delete..."), popup_delete_file_cb, NULL);
+       add_menu_divider(menu_file_popup);
+       add_menu_popup_item(menu_file_popup, _("Refresh"), refresh_cb, NULL);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu image routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void create_menu_image_popup()
+{
+       menu_image_popup = gtk_menu_new();
+
+       add_menu_popup_item(menu_image_popup, _("Zoom in"), zoom_in_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Zoom out"), zoom_out_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Zoom 1:1"), zoom_1_1_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Fit image to window"), zoom_fit_cb, NULL);
+       add_menu_divider(menu_image_popup);
+
+       menu_image_edit = gtk_menu_item_new_with_label(_("Edit"));
+       gtk_menu_append(GTK_MENU(menu_image_popup), menu_image_edit);
+       gtk_widget_show(menu_image_edit);
+
+       add_menu_popup_item(menu_image_popup, _("View in new window"), new_window_image_cb, NULL);
+
+       add_menu_divider(menu_image_popup);
+       add_menu_popup_item(menu_image_popup, _("Copy..."), copy_image_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Move..."), move_image_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Rename..."), rename_image_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Delete..."), delete_image_cb, NULL);
+       add_menu_divider(menu_image_popup);
+       add_menu_popup_item(menu_image_popup, _("(Un)Hide file list"), hide_cb, NULL);
+       add_menu_popup_item(menu_image_popup, _("Full screen"), full_screen_cb, NULL);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * menu full screen routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+/* this re-grabs the keyboard when the menu closes, needed for override redirect */
+static void menu_full_popup_hide_cb(GtkWidget *widget, gpointer data)
+{
+       if (full_screen_window)
+               {
+               gdk_keyboard_grab(full_screen_window->window, TRUE, GDK_CURRENT_TIME);
+               }
+}
+
+static void create_menu_full_screen_popup()
+{
+       menu_window_full = gtk_menu_new();
+       add_menu_popup_item(menu_window_full, _("Zoom in"), zoom_in_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Zoom out"), zoom_out_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Zoom 1:1"), zoom_1_1_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Fit image to window"), zoom_fit_cb, NULL);
+       add_menu_divider(menu_window_full);
+
+       menu_window_full_edit = gtk_menu_item_new_with_label(_("Edit"));
+       gtk_menu_append(GTK_MENU(menu_window_full), menu_window_full_edit);
+       gtk_widget_show(menu_window_full_edit);
+
+       add_menu_divider(menu_window_full);
+       add_menu_popup_item(menu_window_full, _("Copy..."), copy_image_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Move..."), move_image_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Rename..."), rename_image_cb, NULL);
+       add_menu_popup_item(menu_window_full, _("Delete..."), delete_image_cb, NULL);
+
+       add_menu_divider(menu_window_full);
+       add_menu_popup_item(menu_window_full, _("Exit full screen"), full_screen_cb, NULL);
+
+       gtk_signal_connect(GTK_OBJECT(menu_window_full), "hide", (GtkSignalFunc) menu_full_popup_hide_cb, NULL);
+}
+
+void create_menu_popups()
+{
+       create_menu_file_list_popup();
+       create_menu_image_popup();
+       create_menu_full_screen_popup();
+       create_menu_view_popup();
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * toolbar routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void add_button_to_bar(GtkWidget *hbox, gchar **pixmap_data,
+                             GtkTooltips *tooltips, gchar *tip_text,
+                             GtkSignalFunc func, gpointer data)
+{
+       GtkWidget *button;
+       GtkStyle *style;
+       GtkWidget *pixmapwid;
+       GdkPixmap *pixmap;
+       GdkBitmap *mask;
+
+       style = gtk_widget_get_style(mainwindow);
+
+       button = gtk_button_new ();
+       gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) func, thumb_button);
+       gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show (button);
+       gtk_tooltips_set_tip (tooltips, button, tip_text, NULL);
+
+       pixmap = gdk_pixmap_create_from_xpm_d(mainwindow->window,  &mask,
+                 &style->bg[GTK_STATE_NORMAL], (gchar **)pixmap_data);
+       pixmapwid = gtk_pixmap_new(pixmap, mask);
+       gtk_widget_show(pixmapwid);
+       gtk_container_add(GTK_CONTAINER(button), pixmapwid);
+}
+
+GtkWidget *create_button_bar(GtkTooltips *tooltips)
+{
+       GtkWidget *hbox;
+       GtkStyle *style;
+       GtkWidget *pixmapwid;
+       GdkPixmap *pixmap;
+       GdkBitmap *mask;
+
+       style = gtk_widget_get_style(mainwindow);
+       hbox = gtk_hbox_new(FALSE, 0);
+
+       thumb_button = gtk_toggle_button_new ();
+       gtk_signal_connect (GTK_OBJECT (thumb_button), "clicked",(GtkSignalFunc) thumb_button_cb, thumb_button);
+       gtk_box_pack_start (GTK_BOX (hbox), thumb_button, FALSE, FALSE, 0);
+       gtk_widget_show (thumb_button);
+       gtk_tooltips_set_tip (tooltips, thumb_button, _("Create thumbnails"), NULL);
+
+       pixmap = gdk_pixmap_create_from_xpm_d(mainwindow->window,  &mask,
+                 &style->bg[GTK_STATE_NORMAL], (gchar **)icon_thumb_xpm );
+       pixmapwid = gtk_pixmap_new(pixmap, mask);
+       gtk_widget_show(pixmapwid);
+       gtk_container_add(GTK_CONTAINER(thumb_button), pixmapwid);
+
+       add_button_to_bar(hbox, (gchar **)icon_home_xpm,
+                        tooltips, _("Change to home directory"), home_dir_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_reload_xpm,
+                        tooltips, _("Refresh file list"), refresh_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_zoom_in_xpm,
+                        tooltips, _("Zoom in"), zoom_in_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_zoom_out_xpm,
+                        tooltips, _("Zoom out"), zoom_out_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_zoom_fit_xpm,
+                        tooltips, _("Fit image to window"), zoom_fit_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_zoom_norm_xpm,
+                        tooltips, _("Set zoom 1:1"), zoom_1_1_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_config_xpm,
+                        tooltips, _("Configure options"), config_cb, NULL);
+       add_button_to_bar(hbox, (gchar **)icon_float_xpm,
+                        tooltips, _("Float Controls"), float_cb, NULL);
+
+       return hbox;
+}
+
diff --git a/src/pathsel.c b/src/pathsel.c
new file mode 100644 (file)
index 0000000..914d57b
--- /dev/null
@@ -0,0 +1,294 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+#define DEST_WIDTH 250
+#define DEST_HEIGHT 100
+
+typedef struct _Dest_Data Dest_Data;
+struct _Dest_Data
+{
+       GtkWidget *d_clist;
+       GtkWidget *f_clist;
+       GtkWidget *entry;
+       gchar *filter;
+       gchar *path;
+};
+
+static void dest_free_data(GtkWidget *widget, gpointer data);
+static gint dest_check_filter(gchar *filter, gchar *file);
+static gint dest_sort_cb(void *a, void *b);
+static void dest_populate(Dest_Data *dd, gchar *path);
+static void dest_select_cb(GtkWidget *clist, gint row, gint column,
+                         GdkEventButton *bevent, gpointer data);
+
+/*
+ *-----------------------------------------------------------------------------
+ * destination widget routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void dest_free_data(GtkWidget *widget, gpointer data)
+{
+       Dest_Data *dd = data;
+       g_free(dd->filter);
+       g_free(dd->path);
+       g_free(dd);
+}
+
+static gint dest_check_filter(gchar *filter, gchar *file)
+{
+       gchar *f_ptr = filter;
+       gchar *file_ptr;
+       gchar *strt_ptr;
+       gint i;
+
+       if (filter[0] == '*') return TRUE;
+       while (f_ptr < filter + strlen(filter))
+               {
+               strt_ptr = f_ptr;
+               i=0;
+               while (*f_ptr != ';' && *f_ptr != '\0')
+                       {
+                       f_ptr++;
+                       i++;
+                       }
+               f_ptr++;
+               file_ptr = file + strlen(file) - i;
+               if (!strncasecmp(file_ptr, strt_ptr, i)) return TRUE;
+               }
+       return FALSE;
+}
+
+static gint dest_sort_cb(void *a, void *b)
+{
+       return strcmp((gchar *)a, (gchar *)b);
+}
+
+static void dest_populate(Dest_Data *dd, gchar *path)
+{
+       DIR *dp;
+       struct dirent *dir;
+       struct stat ent_sbuf;
+       gchar *buf[2];
+       GList *path_list = NULL;
+       GList *file_list = NULL;
+       GList *list;
+
+       buf[1] = NULL;
+
+       if((dp = opendir(path))==NULL)
+               {
+               /* dir not found */
+               return;
+               }
+       while ((dir = readdir(dp)) != NULL)
+               {
+               /* skips removed files */
+               if (dir->d_ino > 0)
+                       {
+                       gchar *name = dir->d_name;
+                       gchar *filepath = g_strconcat(path, "/", name, NULL);
+                       if (stat(filepath,&ent_sbuf) >= 0 && S_ISDIR(ent_sbuf.st_mode))
+                               {
+                               path_list = g_list_prepend(path_list, g_strdup(name));
+                               }
+                       else if (dd->f_clist)
+                               {
+                               if (!dd->filter || (dd->filter && dest_check_filter(dd->filter, name)))
+                                       file_list = g_list_prepend(file_list, g_strdup(name));
+                               }
+                       g_free(filepath);
+                       }
+               }
+       closedir(dp);
+
+       path_list = g_list_sort(path_list, (GCompareFunc) dest_sort_cb);
+       file_list = g_list_sort(file_list, (GCompareFunc) dest_sort_cb);
+
+       gtk_clist_freeze(GTK_CLIST(dd->d_clist));
+       gtk_clist_clear(GTK_CLIST(dd->d_clist));
+
+       list = path_list;
+       while (list)
+               {
+               gint row;
+               gchar *filepath;
+               if (strcmp(list->data, ".") == 0)
+                       {
+                       filepath = g_strdup(path);
+                       }
+               else if (strcmp(list->data, "..") == 0)
+                       {
+                       gchar *p;
+                       filepath = g_strdup(path);
+                       p = filename_from_path(filepath);
+                       if (p - 1 != filepath) p--;
+                       p[0] = '\0';
+                       }
+               else if (strcmp(path, "/") == 0)
+                       {
+                       filepath = g_strconcat("/", list->data, NULL);
+                       }
+               else
+                       filepath = g_strconcat(path, "/", list->data, NULL);
+               
+               buf[0] = list->data;
+               row = gtk_clist_append(GTK_CLIST(dd->d_clist),buf);
+               gtk_clist_set_row_data_full(GTK_CLIST(dd->d_clist), row,
+                                           filepath, (GtkDestroyNotify) g_free);
+               g_free(list->data);
+               list = list->next;
+               }
+
+       g_list_free(path_list);
+
+       gtk_clist_thaw(GTK_CLIST(dd->d_clist));
+
+       if (dd->f_clist)
+               {
+               gtk_clist_freeze(GTK_CLIST(dd->f_clist));
+               gtk_clist_clear(GTK_CLIST(dd->f_clist));
+
+               list = file_list;
+               while (list)
+                       {
+                       gint row;
+                       gchar *filepath;
+                       filepath = g_strconcat(path, "/", list->data, NULL);
+               
+                       buf[0] = list->data;
+                       row = gtk_clist_append(GTK_CLIST(dd->f_clist),buf);
+                       gtk_clist_set_row_data_full(GTK_CLIST(dd->f_clist), row,
+                                           filepath, (GtkDestroyNotify) g_free);
+                       g_free(list->data);
+                       list = list->next;
+                       }
+
+               g_list_free(file_list);
+
+               gtk_clist_thaw(GTK_CLIST(dd->f_clist));
+               }
+
+       g_free(dd->path);
+       dd->path = g_strdup(path);
+}
+
+static void dest_select_cb(GtkWidget *clist, gint row, gint column,
+                         GdkEventButton *bevent, gpointer data)
+{
+       Dest_Data *dd = data;
+       gchar *path = g_strdup(gtk_clist_get_row_data(GTK_CLIST(clist), row));
+       gtk_entry_set_text(GTK_ENTRY(dd->entry),path);
+
+       if (clist == dd->d_clist) dest_populate(dd, path);
+       g_free(path);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * destination widget setup routines (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+GtkWidget *destination_widget_new_with_files(gchar *path, gchar *filter, GtkWidget *entry)
+{
+       GtkWidget *vbox;
+       Dest_Data *dd;
+       GtkWidget *scrolled;
+
+       dd = g_new0(Dest_Data, 1);
+
+       vbox = gtk_vbox_new(FALSE, 5);
+       gtk_widget_show(vbox);
+
+       dd->entry = entry;
+       gtk_object_set_data(GTK_OBJECT(dd->entry), "destination_data", dd);
+
+       scrolled = gtk_scrolled_window_new(NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                               GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+       gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
+       gtk_widget_show(scrolled);
+
+       dd->d_clist=gtk_clist_new (1);
+       gtk_clist_set_column_auto_resize(GTK_CLIST(dd->d_clist), 0, TRUE);
+        gtk_signal_connect (GTK_OBJECT (dd->d_clist), "select_row",(GtkSignalFunc) dest_select_cb, dd);
+       gtk_signal_connect(GTK_OBJECT(dd->d_clist), "destroy", (GtkSignalFunc) dest_free_data, dd);
+       gtk_widget_set_usize(dd->d_clist, DEST_WIDTH, DEST_HEIGHT);
+       gtk_container_add (GTK_CONTAINER (scrolled), dd->d_clist);
+        gtk_widget_show (dd->d_clist);
+
+       if (filter)
+               {
+               scrolled = gtk_scrolled_window_new(NULL, NULL);
+               gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                                       GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+               gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
+               gtk_widget_show(scrolled);
+
+               dd->f_clist=gtk_clist_new (1);
+               gtk_clist_set_column_auto_resize(GTK_CLIST(dd->f_clist), 0, TRUE);
+               gtk_widget_set_usize(dd->f_clist, DEST_WIDTH, DEST_HEIGHT);
+               gtk_signal_connect (GTK_OBJECT (dd->f_clist), "select_row",(GtkSignalFunc) dest_select_cb, dd);
+               gtk_container_add (GTK_CONTAINER (scrolled), dd->f_clist);
+               gtk_widget_show (dd->f_clist);
+
+               dd->filter = g_strdup(filter);
+               }
+
+       if (isdir(path))
+               {
+               dest_populate(dd, path);
+               }
+       else
+               {
+               gchar *buf = remove_level_from_path(path);
+               if (isdir(buf))
+                       {
+                       dest_populate(dd, buf);
+                       }
+               else
+                       {
+                       dest_populate(dd, homedir());
+                       }
+               g_free(buf);
+               }
+       return vbox;
+}
+
+GtkWidget *destination_widget_new(gchar *path, GtkWidget *entry)
+{
+       return destination_widget_new_with_files(path, NULL, entry);
+}
+
+void destination_widget_sync_to_entry(GtkWidget *entry)
+{
+       Dest_Data *dd = gtk_object_get_data(GTK_OBJECT(entry), "destination_data");
+       gchar *path;
+
+       if (!dd) return;
+
+       path = gtk_entry_get_text(GTK_ENTRY(entry));
+       
+       if (isdir(path) && strcmp(path, dd->path) != 0)
+               {
+               dest_populate(dd, path);
+               }
+       else
+               {
+               gchar *buf = remove_level_from_path(path);
+               if (isdir(buf) && strcmp(buf, dd->path) != 0)
+                       {
+                       dest_populate(dd, buf);
+                       }
+               g_free(buf);
+               }
+}
+
diff --git a/src/rcfile.c b/src/rcfile.c
new file mode 100644 (file)
index 0000000..91ff216
--- /dev/null
@@ -0,0 +1,434 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+static gchar *quoted_value(gchar *text);
+static void write_char_option(FILE *f, gchar *label, gchar *text);
+static gchar *read_char_option(FILE *f, gchar *option, gchar *label, gchar *value, gchar *text);
+static void write_int_option(FILE *f, gchar *label, gint n);
+static gint read_int_option(FILE *f, gchar *option, gchar *label, gchar *value, gint n);
+static void write_bool_option(FILE *f, gchar *label, gint n);
+static gint read_bool_option(FILE *f, gchar *option, gchar *label, gchar *value, gint n);
+
+/*
+ *-----------------------------------------------------------------------------
+ * line write/parse routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static gchar *quoted_value(gchar *text)
+{
+       gchar *ptr;
+       gint c = 0;
+       gint l = strlen(text);
+
+       if (l == 0) return NULL;
+
+       while (c < l && text[c] !='"') c++;
+       if (text[c] == '"')
+               {
+               c++;
+               ptr = text + c;
+               while (c < l && text[c] !='"') c++;
+               if (text[c] == '"')
+                       {
+                       text[c] = '\0';
+                       if (strlen(ptr) > 0)
+                               {
+                               return g_strdup(ptr);
+                               }
+                       }
+               }
+       else
+               /* for compatibility with older formats (<0.3.7)
+                * read a line without quotes too */
+               {
+               c = 0;
+               while (c < l && text[c] !=' ' && text[c] !=8 && text[c] != '\n') c++;
+               if (c != 0)
+                       {
+                       text[c] = '\0';
+                       return g_strdup(text);
+                       }
+               }
+
+       return NULL;
+}
+
+static void write_char_option(FILE *f, gchar *label, gchar *text)
+{
+       if (text)
+               fprintf(f,"%s: \"%s\"\n", label, text);
+       else
+               fprintf(f,"%s: \n", label);
+}
+
+static gchar *read_char_option(FILE *f, gchar *option, gchar *label, gchar *value, gchar *text)
+{
+       if (!strcasecmp(option, label))
+               {
+               g_free(text);
+               text = quoted_value(value);
+               }
+       return text;
+}
+
+static void write_int_option(FILE *f, gchar *label, gint n)
+{
+       fprintf(f,"%s: %d\n\n", label, n);
+}
+
+static gint read_int_option(FILE *f, gchar *option, gchar *label, gchar *value, gint n)
+{
+       if (!strcasecmp(option, label))
+               {
+               n = strtol(value,NULL,0);
+               }
+       return n;
+}
+
+static void write_bool_option(FILE *f, gchar *label, gint n)
+{
+       fprintf(f,"%s: ", label);
+       if (n) fprintf(f,"true\n"); else fprintf(f,"false\n");
+       fprintf(f,"\n");
+}
+
+static gint read_bool_option(FILE *f, gchar *option, gchar *label, gchar *value, gint n)
+{
+       if (!strcasecmp(option, label))
+               {
+               if (!strcasecmp(value, "true"))
+                       n = TRUE;
+               else
+                       n = FALSE;
+               }
+       return n;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * save configuration (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void save_options()
+{
+       FILE *f;
+       gchar *rc_path;
+       gint i;
+
+       rc_path = g_strconcat(homedir(), "/", RC_FILE_NAME, NULL);
+
+       f = fopen(rc_path,"w");
+       if (!f)
+               {
+               printf(_("error saving config file: %s\n"), rc_path);
+               g_free(rc_path);
+               return;
+               }
+
+       fprintf(f,"######################################################################\n");
+       fprintf(f,"#                         GQview config file         version %7s #\n", VERSION);
+       fprintf(f,"#                                                                    #\n");
+       fprintf(f,"#  Everything in this file can be changed in the option dialogs.     #\n");
+       fprintf(f,"#      (so there should be no need to edit this file by hand)        #\n");
+       fprintf(f,"#                                                                    #\n");
+       fprintf(f,"######################################################################\n");
+       fprintf(f,"\n");
+       fprintf(f,"##### General Options #####\n\n");
+
+       write_bool_option(f, "enable_startup_path", startup_path_enable);
+       write_char_option(f, "startup_path", startup_path);
+       fprintf(f,"\n");
+
+       fprintf(f,"zoom_mode: ");
+       if (zoom_mode == ZOOM_RESET_ORIGINAL) fprintf(f,"original\n");
+       if (zoom_mode == ZOOM_RESET_FIT_WINDOW) fprintf(f,"fit\n");
+       if (zoom_mode == ZOOM_RESET_NONE) fprintf(f,"dont_change\n");
+       fprintf(f,"\n");
+
+       write_bool_option(f, "fit_window_to_image", fit_window);
+       write_bool_option(f, "limit_window_size", limit_window_size);
+       write_int_option(f, "max_window_size", max_window_size);
+       fprintf(f,"\n");
+
+       write_bool_option(f, "progressive_keyboard_scrolling", progressive_key_scrolling);
+       fprintf(f,"\n");
+
+       write_int_option(f, "thumbnail_width", thumb_max_width);
+       write_int_option(f, "thumbnail_height", thumb_max_height);
+       write_bool_option(f, "cache_thumbnails", enable_thumb_caching);
+       write_bool_option(f, "use_xvpics_thumbnails", use_xvpics_thumbnails);
+       fprintf(f,"\n");
+
+       write_bool_option(f, "confirm_delete", confirm_delete);
+       fprintf(f,"\n");
+       write_bool_option(f, "tools_float", tools_float);
+       write_bool_option(f, "tools_hidden", tools_hidden);
+       write_bool_option(f, "restore_tool_state", restore_tool);
+
+       fprintf(f,"\n##### Slideshow Options #####\n\n");
+
+       write_int_option(f, "slideshow_delay", slideshow_delay);
+
+       write_bool_option(f, "slideshow_random", slideshow_random);
+       write_bool_option(f, "slideshow_repeat", slideshow_repeat);
+
+       fprintf(f,"\n##### Filtering Options #####\n\n");
+
+       write_bool_option(f, "show_dotfiles", show_dot_files);
+       write_bool_option(f, "disable_filtering", file_filter_disable);
+       fprintf(f,"\n");
+       write_bool_option(f, "filter_ppm", filter_include_ppm);
+       write_bool_option(f, "filter_png", filter_include_png);
+       write_bool_option(f, "filter_jpg", filter_include_jpg);
+       write_bool_option(f, "filter_tif", filter_include_tif);
+       write_bool_option(f, "filter_pgm", filter_include_pgm);
+       write_bool_option(f, "filter_xpm", filter_include_xpm);
+       write_bool_option(f, "filter_gif", filter_include_gif);
+       write_bool_option(f, "filter_pcx", filter_include_pcx);
+       write_bool_option(f, "filter_bmp", filter_include_bmp);
+       fprintf(f,"\n");
+       write_char_option(f, "custom_filter", custom_filter);
+
+       fprintf(f,"\n##### External Programs #####\n");
+       fprintf(f,"# Maximum of 8 programs (external_1 through external 8)\n");
+       fprintf(f,"# format: external_n: \"menu name\" \"command line\"\n\n");
+
+       for (i=0; i<8; i++)
+               {
+               fprintf(f,"external_%d: \"", i+1);
+               if (editor_name[i]) fprintf(f, editor_name[i]);
+               fprintf(f, "\" \"");
+               if (editor_command[i]) fprintf(f, editor_command[i]);
+               fprintf(f, "\"\n");
+               }
+
+       fprintf(f,"\n##### Window Positions #####\n\n");
+
+       write_bool_option(f, "restore_window_positions", save_window_positions);
+       fprintf(f,"\n");
+       write_int_option(f, "main_window_x", main_window_x);
+       write_int_option(f, "main_window_y", main_window_y);
+       write_int_option(f, "main_window_width", main_window_w);
+       write_int_option(f, "main_window_height", main_window_h);
+       write_int_option(f, "float_window_x", float_window_x);
+       write_int_option(f, "float_window_y", float_window_y);
+       write_int_option(f, "float_window_width", float_window_w);
+       write_int_option(f, "float_window_height", float_window_h);
+
+       fprintf(f,"######################################################################\n");
+       fprintf(f,"#                      end of GQview config file                     #\n");
+       fprintf(f,"######################################################################\n");
+
+       fclose(f);
+
+       g_free(rc_path);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * load configuration (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void load_options()
+{
+       FILE *f;
+       gchar *rc_path;
+       gchar s_buf[1024];
+       gchar *s_buf_ptr;
+       gchar option[1024];
+       gchar value[1024];
+       gchar value_all[1024];
+       gint c,l,i;
+       rc_path = g_strconcat(homedir(), "/", RC_FILE_NAME, NULL);
+
+       f = fopen(rc_path,"r");
+       if (!f)
+               {
+               g_free(rc_path);
+               return;
+               }
+
+       while (fgets(s_buf,1024,f))
+               {
+               if (s_buf[0]=='#') continue;
+               if (s_buf[0]=='\n') continue;
+               c = 0;
+               l = strlen(s_buf);
+               while (s_buf[c] != ':' && c < l) c++;
+               if (c >= l) continue;
+               s_buf[c] = '\0';
+               c++;
+               while (s_buf[c] == ' ' && c < l) c++;
+               while (s_buf[c] == 8 && c < l) c++;
+               while (s_buf[c] == ' ' && c < l) c++;
+               s_buf_ptr = s_buf + c;
+               strcpy(value_all,s_buf_ptr);
+               while (s_buf[c] != 8 && s_buf[c] != ' ' && s_buf[c] != '\n' && c < l) c++;
+               s_buf[c] = '\0';
+               strcpy(option,s_buf);
+               strcpy(value,s_buf_ptr);
+
+               /* general options */
+
+               startup_path_enable = read_bool_option(f, option,
+                       "enable_startup_path", value, startup_path_enable);
+               startup_path = read_char_option(f, option,
+                       "startup_path", value_all, startup_path);
+
+               if (!strcasecmp(option,"zoom_mode"))
+                        {
+                        if (!strcasecmp(value,"original")) zoom_mode = ZOOM_RESET_ORIGINAL;
+                        if (!strcasecmp(value,"fit")) zoom_mode = ZOOM_RESET_FIT_WINDOW;
+                        if (!strcasecmp(value,"dont_change")) zoom_mode = ZOOM_RESET_NONE;
+                        }
+
+               fit_window = read_bool_option(f, option,
+                       "fit_window_to_image", value, fit_window);
+               limit_window_size = read_bool_option(f, option,
+                       "limit_window_size", value, limit_window_size);
+               max_window_size = read_int_option(f, option,
+                       "max_window_size", value, max_window_size);
+               progressive_key_scrolling = read_bool_option(f, option,
+                       "progressive_keyboard_scrolling", value, progressive_key_scrolling);
+
+               thumb_max_width = read_int_option(f, option,
+                       "thumbnail_width", value, thumb_max_width);
+               thumb_max_height = read_int_option(f, option,
+                       "thumbnail_height", value, thumb_max_height);
+               enable_thumb_caching = read_bool_option(f, option,
+                       "cache_thumbnails", value, enable_thumb_caching);
+               use_xvpics_thumbnails = read_bool_option(f, option,
+                       "use_xvpics_thumbnails", value, use_xvpics_thumbnails);
+
+               confirm_delete = read_bool_option(f, option,
+                       "confirm_delete", value, confirm_delete);
+
+               tools_float = read_bool_option(f, option,
+                       "tools_float", value, tools_float);
+               tools_hidden = read_bool_option(f, option,
+                       "tools_hidden", value, tools_hidden);
+               restore_tool = read_bool_option(f, option,
+                       "restore_tool_state", value, restore_tool);
+
+               /* slideshow opitons */
+
+               slideshow_delay = read_int_option(f, option,
+                       "slideshow_delay", value, slideshow_delay);
+               slideshow_random = read_bool_option(f, option,
+                       "slideshow_random", value, slideshow_random);
+               slideshow_repeat = read_bool_option(f, option,
+                       "slideshow_repeat", value, slideshow_repeat);
+
+               /* filtering options */
+
+               show_dot_files = read_bool_option(f, option,
+                       "show_dotfiles", value, show_dot_files);
+               file_filter_disable = read_bool_option(f, option,
+                       "disable_filtering", value, file_filter_disable);
+
+               filter_include_ppm = read_bool_option(f, option,
+                       "filter_ppm", value, filter_include_ppm);
+               filter_include_png = read_bool_option(f, option,
+                       "filter_png", value, filter_include_png);
+               filter_include_jpg = read_bool_option(f, option,
+                       "filter_jpg", value, filter_include_jpg);
+               filter_include_tif = read_bool_option(f, option,
+                       "filter_tif", value, filter_include_tif);
+               filter_include_pgm = read_bool_option(f, option,
+                       "filter_pgm", value, filter_include_pgm);
+               filter_include_xpm = read_bool_option(f, option,
+                       "filter_xpm", value, filter_include_xpm);
+               filter_include_gif = read_bool_option(f, option,
+                       "filter_gif", value, filter_include_gif);
+               filter_include_pcx = read_bool_option(f, option,
+                       "filter_pcx", value, filter_include_pcx);
+               filter_include_bmp = read_bool_option(f, option,
+                       "filter_bmp", value, filter_include_bmp);
+
+               custom_filter = read_char_option(f, option,
+                       "custom_filter", value_all, custom_filter);
+
+               /* External Programs */
+
+               if (!strncasecmp(option,"external_",9))
+                       {
+                       i = strtol(option + 9, NULL, 0);
+                       if (i>0 && i<9)
+                               {
+                               gchar *ptr1, *ptr2;
+                               i--;
+                               c = 0;
+                               l = strlen(value_all);
+                               ptr1 = value_all;
+
+                               g_free(editor_name[i]);
+                               editor_name[i] = NULL;
+                               g_free(editor_command[i]);
+                               editor_command[i] = NULL;
+
+                               while (c<l && value_all[c] !='"') c++;
+                               if (ptr1[c] == '"')
+                                       {
+                                       c++;
+                                       ptr2 = ptr1 + c;
+                                       while (c<l && value_all[c] !='"') c++;
+                                       if (ptr1[c] == '"')
+                                               {
+                                               ptr1[c] = '\0';
+                                               if (ptr1 + c - 1 != ptr2)
+                                                       editor_name[i] = g_strdup(ptr2);
+                                               c++;
+                                               while (c<l && value_all[c] !='"') c++;
+                                               if (ptr1[c] == '"')
+                                                       {
+                                                       c++;
+                                                       ptr2 = ptr1 + c;
+                                                       while (c<l && value_all[c] !='"') c++;
+                                                       if (ptr1[c] == '"' && ptr1 + c - 1 != ptr2)
+                                                               {
+                                                               ptr1[c] = '\0';
+                                                               editor_command[i] = g_strdup(ptr2);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+
+               /* window positions */
+
+               save_window_positions = read_bool_option(f, option,
+                       "restore_window_positions", value, save_window_positions);
+
+               main_window_x = read_int_option(f, option,
+                       "main_window_x", value, main_window_x);
+               main_window_y = read_int_option(f, option,
+                       "main_window_y", value, main_window_y);
+               main_window_w = read_int_option(f, option,
+                       "main_window_width", value, main_window_w);
+               main_window_h = read_int_option(f, option,
+                       "main_window_height", value, main_window_h);
+               float_window_x = read_int_option(f, option,
+                       "float_window_x", value, float_window_x);
+               float_window_y = read_int_option(f, option,
+                       "float_window_y", value, float_window_y);
+               float_window_w = read_int_option(f, option,
+                       "float_window_width", value, float_window_w);
+               float_window_h = read_int_option(f, option,
+                       "float_window_height", value, float_window_h);
+               }
+
+       fclose(f);
+       g_free(rc_path);
+}
+
diff --git a/src/slideshow.c b/src/slideshow.c
new file mode 100644 (file)
index 0000000..fb9629b
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+static GList *slide_list = NULL;
+static gchar *slide_img = NULL;
+static gchar *slide_path = NULL;
+static gint slide_count = 0;
+static gint slide_active = FALSE;
+static gint slide_sel_list = FALSE;
+static gint slide_timeout_id = -1;
+
+static void slideshow_free_all()
+{
+       slide_active = FALSE;
+
+       g_list_free(slide_list);
+       slide_list = NULL;
+
+       g_free(slide_path);
+       slide_path = NULL;
+
+       g_free(slide_img);
+       slide_img = NULL;
+
+       slide_count = 0;
+       slide_sel_list = FALSE;
+}
+
+static GList *generate_list()
+{
+       GList *list = NULL;
+
+       if (file_selection_count() < 2)
+               {
+               gint i;
+               gint c = file_count();
+               for(i = 0; i < c; i++)
+                       {
+                       list = g_list_prepend(list, GINT_TO_POINTER(i));
+                       }
+               slide_sel_list = FALSE;
+               }
+       else
+               {
+               GList *work = GTK_CLIST(file_clist)->selection;
+               while(work)
+                       {
+                       list = g_list_prepend(list, work->data);
+                       work = work->next;
+                       }
+               slide_sel_list = TRUE;
+               }
+       list = g_list_reverse(list);
+
+       return list;
+}
+
+static GList *generate_random_list()
+{
+       GList *src_list = NULL;
+       GList *list = NULL;
+       GList *work;
+
+       src_list = generate_list();
+
+       while(src_list)
+               {
+               gint p = (float)rand() / RAND_MAX * g_list_length(src_list);
+               work = g_list_nth(src_list, p);
+               list = g_list_prepend(list, work->data);
+               src_list = g_list_remove(src_list, work->data);
+               }
+
+       return list;
+}
+
+static void slideshow_init_list()
+{
+       if (slide_list)
+               {
+               g_list_free(slide_list);
+               }
+
+       if (slideshow_random)
+               {
+               slide_list = generate_random_list();
+               }
+       else
+               {
+               slide_list = generate_list();
+               }
+}
+
+static gint slideshow_should_continue()
+{
+       if (!slide_active || !slide_list || !slide_path ||
+           slide_count != file_count() ||
+           (slide_img && image_get_path() && strcmp(image_get_path(), slide_img) != 0) ||
+           current_path == NULL ||
+           strcmp(current_path, slide_path) != 0)
+               {
+               return FALSE;
+               }
+
+       return TRUE;
+}
+
+static gint slideshow_loop_cb(gpointer data)
+{
+       gint row;
+       gchar *buf;
+
+       if (!slideshow_should_continue())
+               {
+               slideshow_free_all();
+               slide_timeout_id = -1;
+               return FALSE;
+               }
+
+       row = GPOINTER_TO_INT(slide_list->data);
+
+       g_free(slide_img);
+       slide_img = NULL;
+       buf = file_get_path(row);
+       slide_list = g_list_remove(slide_list, slide_list->data);
+
+       if (!slide_list && slideshow_repeat)
+               {
+               slideshow_init_list();
+               }
+
+       if (slide_sel_list)
+               {
+               image_change_to(buf);
+               update_status_label(NULL);
+               }
+       else
+               {
+               file_image_change_to(row);
+               }
+
+       slide_img = buf;
+
+       if (!slide_list)
+               {
+               slideshow_free_all();
+               slide_timeout_id = -1;
+               return FALSE;
+               }
+
+       return TRUE;
+}
+
+void slideshow_start()
+{
+       gint row;
+       gchar *buf;
+
+       if (slide_active) return;
+
+       if (file_count() < 2) return;
+
+       slideshow_init_list();
+       if (!slide_list) return;
+
+       row = GPOINTER_TO_INT(slide_list->data);
+
+       slide_active = TRUE;
+       slide_path = g_strdup(current_path);
+       slide_count = file_count();
+       g_free(slide_img);
+       slide_img = NULL;
+       buf = file_get_path(row);
+       slide_list = g_list_remove(slide_list, slide_list->data);
+
+       if (slide_sel_list)
+               {
+               image_change_to(buf);
+               update_status_label(NULL);
+               }
+       else
+               {
+               file_image_change_to(row);
+               }
+
+       slide_img = buf;
+
+       slide_timeout_id = gtk_timeout_add(slideshow_delay * 1000, slideshow_loop_cb, NULL);
+}
+
+void slideshow_stop()
+{
+       if (!slide_active) return;
+
+       slideshow_free_all();
+       if (slide_timeout_id != -1)
+               {
+               gtk_timeout_remove(slide_timeout_id);
+               slide_timeout_id = -1;
+               }
+       update_status_label(NULL);
+}
+
+void slideshow_toggle()
+{
+       if (!slide_active)
+               {
+               slideshow_start();
+               }
+       else
+               {
+               slideshow_stop();
+               }
+}
+
+gint slideshow_is_running()
+{
+       if (!slide_active) return FALSE;
+
+       if (!slideshow_should_continue())
+               {
+               slideshow_free_all();
+               if (slide_timeout_id != -1)
+                       {
+                       gtk_timeout_remove(slide_timeout_id);
+                       slide_timeout_id = -1;
+                       }
+               return FALSE;
+               }
+
+       return TRUE;
+}
+
diff --git a/src/tabcomp.c b/src/tabcomp.c
new file mode 100644 (file)
index 0000000..0d86133
--- /dev/null
@@ -0,0 +1,629 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include <gdk/gdkkeysyms.h> /* for key values */
+
+#include "tabcomp.xpm"
+
+/* ----------------------------------------------------------------
+   Tab completion routines, can be connected to any gtkentry widget
+   using the tab_completion_add_to_entry() function.
+   Use remove_trailing_slash() to strip the trailing '/'.
+   ----------------------------------------------------------------*/
+
+typedef struct _TabCompData TabCompData;
+struct _TabCompData
+{
+       GtkWidget *entry;
+       gchar *dir_path;
+       GList *file_list;
+       void (*enter_func)(gchar *, gpointer);
+       void (*tab_func)(gchar *, gpointer);
+       gpointer enter_data;
+       gpointer tab_data;
+
+       GtkWidget *combo;
+       gint has_history;
+       gchar *history_key;
+       gint history_levels;
+};
+
+typedef struct _HistoryData HistoryData;
+struct _HistoryData
+{
+       gchar *key;
+       GList *list;
+};
+
+static GList *history_list = NULL;
+
+static void tab_completion_free_list(TabCompData *td);
+static void tab_completion_read_dir(TabCompData *td, gchar *path);
+static void tab_completion_destroy(GtkWidget *widget, gpointer data);
+static void tab_completion_emit_enter_signal(TabCompData *td);
+static void tab_completion_emit_tab_signal(TabCompData *td);
+static gint tab_completion_do(TabCompData *td);
+static gint tab_completion_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+static void tab_completion_button_pressed(GtkWidget *widget, gpointer data);
+static GtkWidget *tab_completion_create_complete_button(GtkWidget *window, GtkWidget *entry);
+
+static void history_list_free(HistoryData *hd);
+static HistoryData *history_list_find_by_key(const gchar* key);
+static gchar *history_list_find_last_path_by_key(const gchar* key);
+static void history_list_free_key(const gchar *key);
+static void history_list_add_to_key(const gchar *key, const gchar *path, gint max);
+
+static void history_list_free(HistoryData *hd)
+{
+       GList *work;
+
+       if (!hd) return;
+
+       work = hd->list;
+       while(work)
+               {
+               g_free(work->data);
+               work = work->next;
+               }
+
+       g_free(hd->key);
+       g_free(hd);
+}
+
+static HistoryData *history_list_find_by_key(const gchar* key)
+{
+       GList *work = history_list;
+       while(work)
+               {
+               HistoryData *hd = work->data;
+               if (strcmp(hd->key, key) == 0) return hd;
+               work = work->next;
+               }
+       return NULL;
+}
+
+static gchar *history_list_find_last_path_by_key(const gchar* key)
+{
+       HistoryData *hd;
+       hd = history_list_find_by_key(key);
+       if (!hd || !hd->list) return NULL;
+
+       return hd->list->data;
+}
+
+static void history_list_free_key(const gchar *key)
+{
+       HistoryData *hd;
+       hd = history_list_find_by_key(key);
+       if (!hd) return;
+
+       history_list = g_list_remove(history_list, hd);
+       history_list_free(hd);
+}
+
+static void history_list_add_to_key(const gchar *key, const gchar *path, gint max)
+{
+       HistoryData *hd;
+       GList *work;
+
+       hd = history_list_find_by_key(key);
+       if (!hd)
+               {
+               hd = g_new(HistoryData, 1);
+               hd->key = g_strdup(key);
+               hd->list = NULL;
+               history_list = g_list_prepend(history_list, hd);
+               }
+
+       /* if already in the list, simply move it to the top */
+       work = hd->list;
+       while(work)
+               {
+               gchar *buf = work->data;
+               work = work->next;
+               if (strcmp(buf, path) == 0)
+                       {
+                       hd->list = g_list_remove(hd->list, buf);
+                       hd->list = g_list_prepend(hd->list, buf);
+                       return;
+                       }
+               }
+
+       hd->list = g_list_prepend(hd->list, g_strdup(path));
+
+       if (max > 0)
+               {
+               while(hd->list && g_list_length(hd->list) > max)
+                       {
+                       GList *work = g_list_last(hd->list);
+                       gchar *buf = work->data;
+                       hd->list = g_list_remove(hd->list, buf);
+                       g_free(buf);
+                       }
+               }
+}
+
+static void tab_completion_free_list(TabCompData *td)
+{
+       GList *list;
+
+       g_free(td->dir_path);
+       td->dir_path = NULL;
+
+       list = td->file_list;
+
+       while(list)
+               {
+               g_free(list->data);
+               list = list->next;
+               }
+
+       g_list_free(td->file_list);
+       td->file_list = NULL;
+}
+
+static void tab_completion_read_dir(TabCompData *td, gchar *path)
+{
+        DIR *dp;
+        struct dirent *dir;
+        GList *list = NULL;
+
+       tab_completion_free_list(td);
+
+        if((dp = opendir(path))==NULL)
+                {
+                /* dir not found */
+                return;
+                }
+        while ((dir = readdir(dp)) != NULL)
+                {
+                /* skips removed files */
+                if (dir->d_ino > 0)
+                        {
+                       gchar *name = dir->d_name;
+                       if (strcmp(name, ".") != 0 && strcmp(name, "..") != 0)
+                               {
+                               list = g_list_prepend(list, g_strdup(name));
+                               }
+                        }
+               }
+        closedir(dp);
+
+       td->dir_path = g_strdup(path);
+       td->file_list = list;
+}
+
+static void tab_completion_destroy(GtkWidget *widget, gpointer data)
+{
+       TabCompData *td = data;
+       tab_completion_free_list(td);
+       g_free(td->history_key);
+       g_free(td);
+}
+
+static void tab_completion_emit_enter_signal(TabCompData *td)
+{
+       gchar *text;
+       if (!td->enter_func) return;
+
+       text = g_strdup(gtk_entry_get_text(GTK_ENTRY(td->entry)));
+
+       if (text[0] == '~')
+               {
+               gchar *t = text;
+               text = g_strconcat(homedir(), t + 1, NULL);
+               g_free(t);
+               }
+
+       td->enter_func(text, td->enter_data);
+       g_free(text);
+}
+
+static void tab_completion_emit_tab_signal(TabCompData *td)
+{
+       gchar *text;
+       if (!td->tab_func) return;
+
+       text = g_strdup(gtk_entry_get_text(GTK_ENTRY(td->entry)));
+
+       if (text[0] == '~')
+               {
+               gchar *t = text;
+               text = g_strconcat(homedir(), t + 1, NULL);
+               g_free(t);
+               }
+
+       td->tab_func(text, td->tab_data);
+       g_free(text);
+}
+
+static gint tab_completion_do(TabCompData *td)
+{
+       gchar *entry_text = gtk_entry_get_text(GTK_ENTRY(td->entry));
+       gchar *entry_file;
+       gchar *entry_dir;
+       gchar *ptr;
+       gint home_exp = FALSE;
+
+       /* home dir expansion */
+       if (entry_text[0] == '~')
+               {
+               entry_dir = g_strconcat(homedir(), entry_text + 1, NULL);
+               home_exp = TRUE;
+               }
+       else
+               {
+               entry_dir = g_strdup(entry_text);
+               }
+
+       entry_file = filename_from_path(entry_text);
+
+       if (isfile(entry_dir))
+               {
+               if (home_exp)
+                       {
+                       gtk_entry_set_text(GTK_ENTRY(td->entry), entry_dir);
+                       gtk_entry_set_position(GTK_ENTRY(td->entry), strlen(entry_dir));
+                       }
+               g_free(entry_dir);
+               return home_exp;
+               }
+       if (isdir(entry_dir) && strcmp(entry_file, ".") != 0 && strcmp(entry_file, "..") != 0)
+               {
+               ptr = entry_dir + strlen(entry_dir) - 1;
+               if (ptr[0] == '/')
+                       {
+                       if (home_exp)
+                               {
+                               gtk_entry_set_text(GTK_ENTRY(td->entry), entry_dir);
+                               gtk_entry_set_position(GTK_ENTRY(td->entry), strlen(entry_dir));
+                               }
+                       g_free(entry_dir);
+                       return home_exp;
+                       }
+               else
+                       {
+                       gchar *buf = g_strconcat(entry_dir, "/", NULL);
+                       gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
+                       gtk_entry_set_position(GTK_ENTRY(td->entry), strlen(buf));
+                       g_free(buf);
+                       g_free(entry_dir);
+                       return TRUE;
+                       }
+               }
+
+       ptr = filename_from_path(entry_dir);
+       if (ptr > entry_dir) ptr--;
+       ptr[0] = '\0';
+
+       if (strlen(entry_dir) == 0)
+               {
+               g_free(entry_dir);
+               entry_dir = g_strdup("/");
+               }
+
+       if (isdir(entry_dir))
+               {
+               GList *list;
+               GList *poss = NULL;
+               gint l = strlen(entry_file);
+
+               if (!td->dir_path || !td->file_list || strcmp(td->dir_path, entry_dir) != 0)
+                       {
+                       tab_completion_read_dir(td, entry_dir);
+                       }
+
+               if (strcmp(entry_dir, "/") == 0) entry_dir[0] = '\0';
+
+               list = td->file_list;
+               while(list)
+                       {
+                       gchar *file = list->data;
+                       if (strncmp(entry_file, file, l) == 0)
+                               {
+                               poss = g_list_prepend(poss, file);
+                               }
+                       list = list->next;
+                       }
+
+               if (poss)
+                       {
+                       if (!poss->next)
+                               {
+                               gchar *file = poss->data;
+                               gchar *buf;
+
+                               buf = g_strconcat(entry_dir, "/", file, NULL);
+
+                               if (isdir(buf))
+                                       {
+                                       g_free(buf);
+                                       buf = g_strconcat(entry_dir, "/", file, "/", NULL);
+                                       }
+                               gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
+                               gtk_entry_set_position(GTK_ENTRY(td->entry), strlen(buf));
+                               g_free(buf);
+                               g_list_free(poss);
+                               g_free(entry_dir);
+                               return TRUE;
+                               }
+                       else
+                               {
+                               gint c = strlen(entry_file);
+                               gint done = FALSE;
+                               gchar *test_file = poss->data;
+
+                               while (!done)
+                                       {
+                                       list = poss;
+                                       if (!list) done = TRUE;
+                                       while(list && !done)
+                                               {
+                                               gchar *file = list->data;
+                                               if (strlen(file) < c || strncmp(test_file, file, c) != 0)
+                                                       {
+                                                       done = TRUE;
+                                                       }
+                                               list = list->next;
+                                               }
+                                       c++;
+                                       }
+                               c -= 2;
+                               if (c > 0)
+                                       {
+                                       gchar *file;
+                                       gchar *buf;
+                                       file = g_strdup(test_file);
+                                       file[c] = '\0';
+                                       buf = g_strconcat(entry_dir, "/", file, NULL);
+                                       gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
+                                       gtk_entry_set_position(GTK_ENTRY(td->entry), strlen(buf));
+                                       g_free(file);
+                                       g_free(buf);
+                                       g_list_free(poss);
+                                       g_free(entry_dir);
+                                       return TRUE;
+                                       }
+                               }
+                       g_list_free(poss);
+                       }
+               }
+
+       g_free(entry_dir);
+
+       return FALSE;
+}
+
+static gint tab_completion_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+       TabCompData *td = data;
+       gint stop_signal = FALSE;
+
+       switch (event->keyval)
+               {
+                case GDK_Tab:
+                       if (tab_completion_do(td))
+                               {
+                               tab_completion_emit_tab_signal(td);
+                               }
+                       stop_signal = TRUE;
+                       break;
+               case GDK_Return:
+                       tab_completion_emit_enter_signal(td);
+                       stop_signal = TRUE;
+                       break;
+               default:
+                       break;
+               }
+
+       if (stop_signal)
+               {
+               if (stop_signal) gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event");
+               return TRUE;
+               }
+
+       return FALSE;
+}
+
+static void tab_completion_button_pressed(GtkWidget *widget, gpointer data)
+{
+       TabCompData *td;
+       GtkWidget *entry = data;
+
+       td = gtk_object_get_data(GTK_OBJECT(entry), "tab_completion_data");
+
+       if (!td) return;
+
+       if (!GTK_WIDGET_HAS_FOCUS(entry))
+               {
+               gtk_widget_grab_focus(entry);
+               }
+
+       if (tab_completion_do(td))
+               {
+               tab_completion_emit_tab_signal(td);
+               }
+}
+
+static GtkWidget *tab_completion_create_complete_button(GtkWidget *window, GtkWidget *entry)
+{
+       GtkWidget *button;
+       GtkWidget *icon;
+       GdkPixmap *pixmap = NULL;
+       GdkBitmap *mask = NULL;
+       GtkStyle *style;
+
+       style = gtk_widget_get_style(window);
+       pixmap = gdk_pixmap_create_from_xpm_d(window->window, &mask,
+               &style->bg[GTK_STATE_NORMAL], (gchar **)tabcomp_xpm);
+
+       button = gtk_button_new();
+       GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
+       gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) tab_completion_button_pressed, entry);
+       
+       icon = gtk_pixmap_new(pixmap, mask);
+       gtk_container_add(GTK_CONTAINER(button), icon);
+       gtk_widget_show(icon);
+
+       return button;
+}
+
+/*
+ *----------------------------------------------------------------------------
+ * public interface
+ *----------------------------------------------------------------------------
+ */
+
+GtkWidget *tab_completion_new_with_history(GtkWidget **entry, GtkWidget *window, gchar *text,
+                                          const gchar *history_key, gint max_levels,
+                                          void (*enter_func)(gchar *, gpointer), gpointer data)
+{
+       GtkWidget *combo;
+       GtkWidget *button;
+       HistoryData *hd;
+       TabCompData *td;
+
+       combo = gtk_combo_new();
+       gtk_combo_set_use_arrows(GTK_COMBO(combo), FALSE);
+
+       button = tab_completion_create_complete_button(window, GTK_COMBO(combo)->entry);
+       gtk_box_pack_start(GTK_BOX(combo), button, FALSE, FALSE, 0);
+       gtk_box_reorder_child(GTK_BOX(combo), button, 1);
+       gtk_widget_show(button);
+       
+       tab_completion_add_to_entry(GTK_COMBO(combo)->entry, enter_func, data);
+
+       td = gtk_object_get_data(GTK_OBJECT(GTK_COMBO(combo)->entry), "tab_completion_data");
+       if (!td) return; /* this should never happen! */
+
+       td->combo = combo;
+       td->has_history = TRUE;
+       td->history_key = g_strdup(history_key);
+       td->history_levels = max_levels;
+
+       hd = history_list_find_by_key(td->history_key);
+       if (hd && hd->list)
+               {
+               gtk_combo_set_popdown_strings(GTK_COMBO(combo), hd->list);
+               }
+
+       if (text) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), text);
+
+       if (entry) *entry = GTK_COMBO(combo)->entry;
+       return combo;
+}
+
+gchar *tab_completion_set_to_last_history(GtkWidget *entry)
+{
+       TabCompData *td = gtk_object_get_data(GTK_OBJECT(entry), "tab_completion_data");
+       gchar *buf;
+
+       if (!td || !td->has_history) return NULL;
+
+       buf = history_list_find_last_path_by_key(td->history_key);
+       if (buf)
+               {
+               gtk_entry_set_text(GTK_ENTRY(td->entry), buf);
+               }
+
+       return buf;
+}
+
+void tab_completion_append_to_history(GtkWidget *entry, gchar *path)
+{
+       TabCompData *td = gtk_object_get_data(GTK_OBJECT(entry), "tab_completion_data");
+       HistoryData *hd;
+
+       if (!td || !td->has_history) return;
+
+       history_list_add_to_key(td->history_key, path, td->history_levels);
+       hd = history_list_find_by_key(td->history_key);
+       if (hd && hd->list)
+               {
+               gtk_combo_set_popdown_strings(GTK_COMBO(td->combo), hd->list);
+               }
+}
+
+GtkWidget *tab_completion_new(GtkWidget **entry, GtkWidget *window, gchar *text,
+                             void (*enter_func)(gchar *, gpointer), gpointer data)
+{
+       GtkWidget *hbox;
+       GtkWidget *button;
+       GtkWidget *newentry;
+
+       hbox = gtk_hbox_new(FALSE, 0);
+
+       newentry = gtk_entry_new();
+       if (text) gtk_entry_set_text(GTK_ENTRY(newentry), text);
+       gtk_box_pack_start(GTK_BOX(hbox), newentry, TRUE, TRUE, 0);
+       gtk_widget_show(newentry);
+
+       button = tab_completion_create_complete_button(window, newentry);
+       gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+
+       tab_completion_add_to_entry(newentry, enter_func, data);
+
+       if (entry) *entry = newentry;
+       return hbox;
+}
+
+void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(gchar *, gpointer), gpointer data)
+{
+       TabCompData *td;
+       if (!entry)
+               {
+               printf("Tab completion error: entry != NULL\n");
+               return;
+               }
+
+       td = g_new0(TabCompData, 1);
+       td->entry = entry;
+       td->dir_path = NULL;
+       td->file_list = NULL;
+       td->enter_func = enter_func;
+       td->enter_data = data;
+       td->tab_func = NULL;
+       td->tab_data = NULL;
+
+       td->has_history = FALSE;
+       td->history_key = NULL;
+       td->history_levels = 0;
+
+       gtk_object_set_data(GTK_OBJECT(td->entry), "tab_completion_data", td);
+
+       gtk_signal_connect(GTK_OBJECT(entry), "key_press_event",
+                       (GtkSignalFunc) tab_completion_key_pressed, td);
+       gtk_signal_connect(GTK_OBJECT(entry), "destroy",
+                       (GtkSignalFunc) tab_completion_destroy, td);
+}
+
+void tab_completion_add_tab_func(GtkWidget *entry, void (*tab_func)(gchar *, gpointer), gpointer data)
+{
+       TabCompData *td = gtk_object_get_data(GTK_OBJECT(entry), "tab_completion_data");
+
+       if (!td) return;
+
+       td->tab_func = tab_func;
+       td->tab_data = data;
+}
+
+gchar *remove_trailing_slash(gchar *path)
+{
+       gchar *ret;
+       gint l;
+       if (!path) return NULL;
+
+       ret = g_strdup(path);
+       l = strlen(ret);
+       if (l > 1 && ret[l - 1] == '/') ret[l - 1] = '\0';
+
+       return ret;
+}
+
diff --git a/src/tabcomp.xpm b/src/tabcomp.xpm
new file mode 100644 (file)
index 0000000..e73bf90
--- /dev/null
@@ -0,0 +1,15 @@
+/* XPM */
+static char * tabcomp_xpm[] = {
+"10 10 2 1",
+"      c None",
+".     c #000000",
+"         .",
+"    .    .",
+"    ..   .",
+"    ...  .",
+"........ .",
+"........ .",
+"    ...  .",
+"    ..   .",
+"    .    .",
+"         ."};
diff --git a/src/thumb.c b/src/thumb.c
new file mode 100644 (file)
index 0000000..13e1fb2
--- /dev/null
@@ -0,0 +1,371 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+#include "icons/img_unknown.xpm" /* fixme! duplicate, included in image.c too */
+
+#define THUMBNAIL_CACHE_DIR "/.gqview_thmb"
+
+static guchar *load_xv_thumbnail(gchar *filename, gint *widthp, gint *heightp);
+static void normalize_thumb(gint *width, gint *height);
+static gint get_xv_thumbnail(gchar *thumb_filename, GdkPixmap **thumb_pixmap, GdkBitmap **thumb_mask);
+
+/*
+ *-----------------------------------------------------------------------------
+ * thumbnail routines: creation, caching, and maintenance (public)
+ *-----------------------------------------------------------------------------
+ */
+
+gint create_thumbnail(gchar *path, GdkPixmap **thumb_pixmap, GdkBitmap **thumb_mask)
+{
+       gint width, height;
+       gint space;
+       GdkImlibImage *thumb = NULL;
+       GdkImlibImage *image = NULL;
+       gint cached = FALSE;
+
+       if (debug) printf("Gen thumbnail:%s\n",path);
+
+       /* if xvpics enabled, check for that first */
+       if (use_xvpics_thumbnails)
+               {
+               space = get_xv_thumbnail(path, thumb_pixmap, thumb_mask);
+               if (space != -1)
+                       {
+                       if (debug) printf("XV thumbnail found, loaded\n");
+                       return space;
+                       }
+               }
+
+       /* start load from cache */
+
+       if (enable_thumb_caching)
+               {
+               gchar *cache_path;
+               cache_path = g_strconcat(homedir(), THUMBNAIL_CACHE_DIR, path, ".png", NULL);
+
+               if (isfile(cache_path) && filetime(cache_path) >= filetime(path))
+                       {
+                       if (debug) printf("Found in cache:%s\n", path);
+                       image = gdk_imlib_load_image(cache_path);
+                       if (image && image->rgb_width != thumb_max_width && image->rgb_height != thumb_max_height)
+                               {
+                               if (debug) printf("Thumbnail size may have changed, reloading:%s\n", path);
+                               unlink(cache_path);
+                               gdk_imlib_destroy_image(image);
+                               image = gdk_imlib_load_image(path);
+                               }
+                       else
+                               {
+                               cached = TRUE;
+                               }
+                       }
+               else
+                       image = gdk_imlib_load_image(path);
+               
+               }
+       else
+               image = gdk_imlib_load_image(path);
+
+       if (!image)
+               {
+               image = gdk_imlib_create_image_from_xpm_data((gchar **)img_unknown_xpm);
+               cached = TRUE; /* no need to save a thumbnail of the unknown pixmap */
+               }
+
+       if (image)
+               {
+               if (image->rgb_width > thumb_max_width || image->rgb_height > thumb_max_height)
+                       {
+                       if (((float)thumb_max_width / image->rgb_width) < ((float)thumb_max_height / image->rgb_height))
+                               {
+                               width = thumb_max_width;
+                               height = (float)width / image->rgb_width * image->rgb_height;
+                               if (height < 1) height = 1;
+                               }
+                       else
+                               {
+                               height = thumb_max_height;
+                               width = (float)height / image->rgb_height * image->rgb_width;
+                               if (width < 1) width = 1;
+                               }
+                       }
+               else
+                       {
+                       width = image->rgb_width;
+                       height = image->rgb_height;
+                       cached = TRUE; /* don't cache images smaller than thumbnail size */
+                       }
+               if (*thumb_pixmap) gdk_imlib_free_pixmap(*thumb_pixmap);
+               *thumb_pixmap = NULL;
+               *thumb_mask = NULL;
+
+       /* start save cache */
+
+               if (enable_thumb_caching && !cached)
+                       {
+                       gchar *thumb_path;
+                       gchar *base_dir;
+                       gchar *thumb_dir;
+                       gchar *image_dir;
+
+                       /* attempt at speed-up? move this here */
+                       thumb = gdk_imlib_clone_scaled_image(image, width, height);
+                       gdk_imlib_destroy_image(image);
+                       image = NULL;
+
+                       base_dir = g_strconcat(homedir(), THUMBNAIL_CACHE_DIR, NULL);
+                       if (!isdir(base_dir))
+                               {
+                               if (debug) printf("creating thumbnail dir:%s\n", base_dir);
+                               if (mkdir(base_dir, 0755) < 0)
+                                       printf(_("create dir failed: %s\n"), base_dir);
+                               }
+
+                       image_dir = remove_level_from_path(path);
+                       thumb_dir = g_strconcat(base_dir, image_dir, NULL);
+                       g_free(image_dir);
+                       if (!isdir(thumb_dir))
+                               {
+                               gchar *p = thumb_dir;
+                               while (p[0] != '\0')
+                                       {
+                                       p++;
+                                       if (p[0] == '/' || p[0] == '\0')
+                                               {
+                                               gint end = TRUE;
+                                               if (p[0] != '\0')
+                                                       {
+                                                       p[0] = '\0';
+                                                       end = FALSE;
+                                                       }
+                                               if (!isdir(thumb_dir))
+                                                       {
+                                                       if (debug) printf("creating sub dir:%s\n",thumb_dir);
+                                                       if (mkdir(thumb_dir, 0755) < 0)
+                                                               printf(_("create dir failed: %s\n"), thumb_dir);
+                                                       }
+                                               if (!end) p[0] = '/';
+                                               }
+                                       }
+                               }
+                       g_free(thumb_dir);
+
+                       thumb_path = g_strconcat(base_dir, path, ".png", NULL);
+                       if (debug) printf("Saving thumb: %s\n",thumb_path);
+
+                       gdk_imlib_save_image(thumb, thumb_path, NULL);
+
+                       g_free(base_dir);
+                       g_free(thumb_path);
+                       }
+               else
+                       {
+                       thumb = image;
+                       }
+
+       /* end save cache */
+
+               gdk_imlib_render(thumb, width, height);
+               *thumb_pixmap = gdk_imlib_move_image(thumb);
+               *thumb_mask = gdk_imlib_move_mask(thumb);
+               if (*thumb_pixmap)
+                       space = thumb_max_width - width;
+               gdk_imlib_destroy_image(thumb);
+               thumb = NULL;
+               }
+       else
+               {
+               space = -1;
+               }
+       return space;
+}
+
+gint maintain_thumbnail_dir(gchar *dir, gint recursive)
+{
+       gchar *thumb_dir;
+       gint base_length;
+       gint still_have_a_file = FALSE;
+
+       if (debug) printf("maintainance check: %s\n", dir);
+
+       base_length = strlen(homedir()) + strlen(THUMBNAIL_CACHE_DIR);
+       thumb_dir = g_strconcat(homedir(), THUMBNAIL_CACHE_DIR, dir, NULL);
+
+       if (isdir(thumb_dir))
+               {
+               DIR             *dp;
+               struct dirent   *dirent;
+               struct stat ent_sbuf;
+
+               if((dp = opendir(thumb_dir))==NULL)
+                       {
+                               /* dir not found */
+                               g_free(thumb_dir);
+                               return FALSE;
+                       }
+
+               while ((dirent = readdir(dp)) != NULL)
+                       {
+                       /* skips removed files */
+                       if (dirent->d_ino > 0)
+                               {
+                               int l = 0;
+                               gchar *path_buf;
+                               if (strcmp(dirent->d_name, ".") == 0 || strcmp(dirent->d_name, "..") == 0)
+                                       continue;
+                               path_buf = g_strconcat(thumb_dir, "/", dirent->d_name, NULL);
+                               if (strlen(path_buf) > 4) l = strlen(path_buf) - 4;
+
+                               if (stat(path_buf,&ent_sbuf) >= 0 && S_ISDIR(ent_sbuf.st_mode))
+                                       {
+                                       /* recurse dir then delete it */
+                                       gchar *rdir = g_strconcat(dir, "/", dirent->d_name, NULL);
+                                       if (recursive && !maintain_thumbnail_dir(rdir, TRUE))
+                                               {
+                                               if (debug) printf("Deleting thumb dir: %s\n",path_buf);
+                                               if ( (rmdir (path_buf) < 0) )
+                                                       printf(_("Unable to delete dir: %s\n"), path_buf);
+                                               }
+                                       else
+                                               still_have_a_file = TRUE;
+                                       g_free(rdir);
+                                       }
+                               else
+                                       {
+                                       gchar *fp = path_buf + l;
+                                       fp[0] = '\0';
+                                       if (strlen(path_buf) > base_length &&
+                                                       !isfile(path_buf + base_length))
+                                               {
+                                               fp[0] = '.';
+                                               if (debug) printf("Deleting thumb: %s\n",path_buf);
+                                               if ( (unlink (path_buf) < 0) )
+                                                       printf(_("failed to delete:%s\n"),path_buf);
+                                               }
+                                       else
+                                                still_have_a_file = TRUE;
+                                       }
+                               g_free(path_buf);
+                               }
+                       }
+               closedir(dp);
+               }
+       g_free(thumb_dir);
+       return still_have_a_file;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * xvpics thumbnail support, read-only (private)
+ *-----------------------------------------------------------------------------
+ */
+
+/*
+ * xvpics code originally supplied by:
+ * "Diederen Damien" <D.Diederen@student.ulg.ac.be>
+ *
+ * Note: Code has been modified to fit the style of the other code, and to use
+ *       a few more glib-isms.
+ */
+
+#define XV_BUFFER 2048
+static guchar *load_xv_thumbnail(gchar *filename, gint *widthp, gint *heightp)
+{
+       FILE *file;
+       gchar buffer[XV_BUFFER];
+       guchar *data;
+       gint width, height, depth;
+
+       file = fopen(filename, "rt");
+       if(!file) return NULL;
+
+       fgets(buffer, XV_BUFFER, file);
+       if(strncmp(buffer, "P7 332", 6) != 0)
+               {
+               fclose(file);
+               return NULL;
+               }
+
+       while(fgets(buffer, XV_BUFFER, file) && buffer[0] == '#') /* do_nothing() */;
+
+       if(sscanf(buffer, "%d %d %d", &width, &height, &depth) != 3)
+               {
+               fclose(file);
+               return NULL;
+               }
+
+       data = g_new(guchar, width * height);
+       fread(data, 1, width * height, file);
+
+       fclose(file);
+       *widthp = width;
+       *heightp = height;
+       return data;
+}
+#undef XV_BUFFER
+
+static void normalize_thumb(gint *width, gint *height)
+{
+       if(*width > thumb_max_width || *height > thumb_max_height)
+               {
+               gfloat factor = MAX((gfloat) *width / thumb_max_width, (gfloat) *height / thumb_max_height);
+               *width = (gfloat) *width / factor;
+               *height = (gfloat) *height / factor;
+               }
+}
+
+static gint get_xv_thumbnail(gchar *thumb_filename, GdkPixmap **thumb_pixmap, GdkBitmap **thumb_mask)
+{
+       gint width, height;
+       gchar *thumb_name;
+       gchar *tmp_string;
+       gchar *last_slash;
+       guchar *packed_data;
+
+       tmp_string = g_strdup(thumb_filename);  
+       last_slash = strrchr(tmp_string, '/');
+       if(!last_slash) return -1;
+       *last_slash++ = '\0';
+
+       thumb_name = g_strconcat(tmp_string, "/.xvpics/", last_slash, NULL);
+       packed_data = load_xv_thumbnail(thumb_name, &width, &height);
+       g_free(tmp_string);
+       g_free(thumb_name);
+
+       if(packed_data)
+               {
+               guchar *rgb_data;
+               GdkImlibImage *image;
+               gint i;
+
+               rgb_data = g_new(guchar, width * height * 3);
+               for(i = 0; i < width * height; i++)
+                       {
+                       rgb_data[i * 3 + 0] = (packed_data[i] >> 5) * 36;
+                       rgb_data[i * 3 + 1] = ((packed_data[i] & 28) >> 2) * 36;
+                       rgb_data[i * 3 + 2] = (packed_data[i] & 3) * 85;
+                       }
+
+               g_free(packed_data);
+               image = gdk_imlib_create_image_from_data(rgb_data, NULL, width, height);
+               g_free(rgb_data);
+               normalize_thumb(&width, &height);
+               gdk_imlib_render(image, width, height);
+       
+               if(*thumb_pixmap) gdk_imlib_free_pixmap(*thumb_pixmap);
+
+               *thumb_pixmap = gdk_imlib_move_image(image);
+               *thumb_mask = gdk_imlib_move_mask(image);
+               gdk_imlib_destroy_image(image);
+               return thumb_max_width - width;
+               }
+
+       return -1;
+}
+
diff --git a/src/utildlg.c b/src/utildlg.c
new file mode 100644 (file)
index 0000000..29035d2
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+static void warning_dialog_close(GtkWidget *w, gpointer data);
+static void warning_dialog_destroy(GtkWidget *w, GdkEvent *event, gpointer data);
+
+static void confirm_dialog_click_cb(GtkWidget *w, gpointer data);
+static void confirm_dialog_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data);
+
+static void generic_dialog_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data);
+
+
+/*
+ *-----------------------------------------------------------------------------
+ * warning dialog routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void warning_dialog_close(GtkWidget *w, gpointer data)
+{
+       GtkWidget *warning_window = data;
+       gtk_widget_destroy(warning_window);
+}
+
+static void warning_dialog_destroy(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+       warning_dialog_close(NULL, data);
+}
+
+void warning_dialog(gchar *title, gchar *message)
+{
+       GtkWidget *warning_window;
+       GtkWidget *hbox;
+       GtkWidget *vbox;
+       GtkWidget *label;
+       GtkWidget *button;
+
+       warning_window = gtk_window_new(GTK_WINDOW_DIALOG);
+       gtk_signal_connect (GTK_OBJECT (warning_window), "delete_event",(GtkSignalFunc) warning_dialog_destroy, warning_window);
+       gtk_window_set_policy (GTK_WINDOW(warning_window), FALSE, FALSE, TRUE);
+       gtk_window_set_title (GTK_WINDOW (warning_window), title);
+       gtk_container_border_width (GTK_CONTAINER (warning_window), 10);
+
+       vbox = gtk_vbox_new(FALSE, 5);
+       gtk_container_add(GTK_CONTAINER(warning_window),vbox);
+       gtk_widget_show(vbox);
+
+       label = gtk_label_new(message);
+       gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+       gtk_widget_show(label);
+
+       label = gtk_hseparator_new();
+       gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+       gtk_widget_show(label);
+
+       hbox = gtk_hbox_new(TRUE, 5);
+       gtk_container_add(GTK_CONTAINER(vbox),hbox);
+       gtk_widget_show(hbox);
+
+       button = gtk_button_new_with_label(_("     Ok     "));
+       gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) warning_dialog_close, warning_window);
+       gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0);
+       gtk_widget_show(button);
+       
+       gtk_widget_show(warning_window);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * confirmation dialog
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void confirm_dialog_click_cb(GtkWidget *w, gpointer data)
+{
+       ConfirmDialog *cd = data;
+       gtk_widget_destroy(cd->dialog);
+       g_free(cd);
+}
+
+static void confirm_dialog_delete_cb(GtkWidget *w, GdkEvent *event, gpointer data)
+{
+       ConfirmDialog *cd = data;
+       cd->cancel_cb(NULL, cd->data);
+       confirm_dialog_click_cb(w, data);
+}
+
+void confirm_dialog_add(ConfirmDialog *cd, gchar *text, void (*func_cb)(GtkWidget *, gpointer))
+{
+       GtkWidget *button;
+       button = gtk_button_new_with_label(text);
+       gtk_signal_connect(GTK_OBJECT(button), "clicked", func_cb, cd->data);
+       gtk_signal_connect(GTK_OBJECT(button), "clicked", confirm_dialog_click_cb, cd);
+       gtk_box_pack_end(GTK_BOX(cd->hbox), button, TRUE, TRUE, 0);
+       gtk_widget_grab_focus(button);
+       gtk_widget_show(button);
+}
+
+ConfirmDialog *confirm_dialog_new(gchar *title, gchar *message, void (*cancel_cb)(GtkWidget *, gpointer), gpointer data)
+{
+       ConfirmDialog *cd;
+       GtkWidget *vbox;
+       GtkWidget *label;
+
+       cd = g_new0(ConfirmDialog, 1);
+       cd->data = data;
+       cd->cancel_cb = cancel_cb;
+
+       cd->dialog = gtk_window_new(GTK_WINDOW_DIALOG);
+       gtk_signal_connect (GTK_OBJECT (cd->dialog), "delete_event", confirm_dialog_delete_cb, cd);
+       gtk_window_set_policy (GTK_WINDOW(cd->dialog), FALSE, FALSE, TRUE);
+       gtk_window_set_title (GTK_WINDOW (cd->dialog), title);
+       gtk_container_border_width (GTK_CONTAINER (cd->dialog), 10);
+
+       vbox = gtk_vbox_new(FALSE, 15);
+       gtk_container_add(GTK_CONTAINER(cd->dialog),vbox);
+       gtk_widget_show(vbox);
+
+       label = gtk_label_new(message);
+       gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+       gtk_widget_show(label);
+
+       label = gtk_hseparator_new();
+       gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,0);
+       gtk_widget_show(label);
+
+       cd->hbox = gtk_hbox_new(TRUE, 15);
+       gtk_container_add(GTK_CONTAINER(vbox),cd->hbox);
+       gtk_widget_show(cd->hbox);
+
+       gtk_widget_show(cd->dialog);
+
+       confirm_dialog_add(cd, _("Cancel"), cd->cancel_cb);
+       
+       return cd;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * generic file ops dialog routines
+ *-----------------------------------------------------------------------------
+ */ 
+
+void generic_dialog_close(GtkWidget *widget, gpointer data)
+{
+       FileDialog *fd = data;
+       if(fd->dialog) gtk_widget_destroy(fd->dialog);
+       g_free(fd->source_path);
+       g_free(fd->dest_path);
+       if (fd->source_list) free_selected_list(fd->source_list);
+       g_free(fd);
+}
+
+static void generic_dialog_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+       generic_dialog_close(NULL, data);
+}
+
+FileDialog *generic_dialog_new(gchar *title, gchar *text, gchar *btn1, gchar *btn2,
+               void (*btn1_cb)(GtkWidget *, gpointer),
+               void (*btn2_cb)(GtkWidget *, gpointer))
+{
+       FileDialog *fd = NULL;
+       GtkWidget *button;
+       GtkWidget *hbox;
+       GtkWidget *label;
+
+       fd = g_new0(FileDialog, 1);
+
+       fd->dialog = gtk_window_new(GTK_WINDOW_DIALOG);
+       gtk_signal_connect (GTK_OBJECT (fd->dialog), "delete_event", (GtkSignalFunc)generic_dialog_delete_cb, fd);
+       gtk_window_set_policy (GTK_WINDOW(fd->dialog), FALSE, TRUE, FALSE);
+       gtk_window_set_title (GTK_WINDOW (fd->dialog), title);
+       gtk_container_border_width (GTK_CONTAINER (fd->dialog), 10);
+
+       fd->vbox = gtk_vbox_new(FALSE,5);
+       gtk_container_add (GTK_CONTAINER(fd->dialog), fd->vbox);
+       gtk_widget_show(fd->vbox);
+
+       if (text)
+               {
+               label = gtk_label_new(text);
+               gtk_box_pack_start(GTK_BOX(fd->vbox), label, FALSE, FALSE, 0);
+               gtk_widget_show(label);
+               }
+       
+       if (btn1_cb || btn2_cb)
+               {
+               GtkWidget *sep;
+               hbox = gtk_hbox_new(TRUE, 15);
+               gtk_box_pack_end(GTK_BOX(fd->vbox), hbox, FALSE, FALSE, 5);
+               gtk_widget_show(hbox);
+
+               sep = gtk_hseparator_new();
+               gtk_box_pack_end(GTK_BOX(fd->vbox), sep, FALSE, FALSE, 0);
+               gtk_widget_show(sep);
+               }
+
+       if (btn1_cb)
+               {
+               button = gtk_button_new_with_label(btn1);
+               gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) btn1_cb, fd);
+               gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
+               gtk_widget_grab_focus(button);
+               gtk_widget_show(button);
+               }
+
+       if (btn2_cb)
+               {
+               button = gtk_button_new_with_label(btn2);
+               gtk_signal_connect (GTK_OBJECT (button), "clicked",(GtkSignalFunc) btn2_cb, fd);
+               gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
+               gtk_widget_show(button);
+               }
+
+       gtk_widget_show(fd->dialog);
+       return fd;
+}
+
diff --git a/src/utildlg.h b/src/utildlg.h
new file mode 100644 (file)
index 0000000..bd8ab5b
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+typedef struct _FileDialog FileDialog;
+struct _FileDialog
+{
+       gint type;
+       gint multiple_files;
+
+       GtkWidget *dialog;
+       GtkWidget *vbox;
+       GtkWidget *entry;
+
+       gchar *source_path;
+       GList *source_list;
+
+       gchar *dest_path;
+};
+
+typedef struct _ConfirmDialog ConfirmDialog;
+struct _ConfirmDialog
+{
+       GtkWidget *dialog;
+       GtkWidget *hbox;
+       void (*cancel_cb)(GtkWidget *, gpointer);
+       gpointer data;
+};
+
+
+void warning_dialog(gchar *title, gchar *message);
+
+ConfirmDialog *confirm_dialog_new(gchar *title, gchar *message, void (*cancel_cb)(GtkWidget *, gpointer), gpointer data);
+void confirm_dialog_add(ConfirmDialog *cd, gchar *text, void (*func_cb)(GtkWidget *, gpointer));
+
+FileDialog *generic_dialog_new(gchar *title, gchar *text, gchar *btn1, gchar *btn2,
+               void (*btn1_cb)(GtkWidget *, gpointer),
+               void (*btn2_cb)(GtkWidget *, gpointer));
+void generic_dialog_close(GtkWidget *widget, gpointer data);
+
diff --git a/src/utilops.c b/src/utilops.c
new file mode 100644 (file)
index 0000000..29d0c99
--- /dev/null
@@ -0,0 +1,961 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+enum {
+       DIALOG_NEW_DIR,
+       DIALOG_COPY,
+       DIALOG_MOVE,
+       DIALOG_DELETE,
+       DIALOG_RENAME
+};
+
+typedef struct _FileDataMult FileDataMult;
+struct _FileDataMult
+{
+       gint confirm_all;
+       gint confirmed;
+       gint skip;
+       GList *source_list;
+       GList *source_next;
+       gchar *dest_base;
+       gchar *source;
+       gchar *dest;
+       gint copy;
+};
+
+typedef struct _FileDataSingle FileDataSingle;
+struct _FileDataSingle
+{
+       gint confirmed;
+       gchar *source;
+       gchar *dest;
+       gint copy;
+};
+
+static FileDataMult *file_data_multiple_new(GList *source_list, gchar *dest, gint copy);
+static void file_data_multiple_free(FileDataMult *fdm);
+static void file_util_move_multiple(FileDataMult *fdm);
+static void file_util_move_multiple_ok_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_multiple_all_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_multiple_skip_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_multiple_cancel_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_multiple(FileDataMult *fdm);
+
+static FileDataSingle *file_data_single_new(gchar *source, gchar *dest, gint copy);
+static void file_data_single_free(FileDataSingle *fds);
+static void file_util_move_single_ok_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_single(FileDataSingle *fds);
+static void file_util_move_single_cancel_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_do(FileDialog *fd);
+static void file_util_move_check(FileDialog *fd);
+static void file_util_move_cb(GtkWidget *widget, gpointer data);
+static void file_util_move_enter_cb(gchar *path, gpointer data);
+static void file_util_move_completion_sync_cb(gchar *path, gpointer data);
+static void real_file_util_move(gchar *source_path, GList *source_list, gchar *dest_path, gint copy);
+
+static void file_util_delete_multiple_ok_cb(GtkWidget *w, gpointer data);
+static void file_util_delete_multiple_cancel_cb(GtkWidget *w, gpointer data);
+static void file_util_delete_multiple(GList *source_list);
+static void file_util_delete_ok_cb(GtkWidget *w, gpointer data);
+static void file_util_delete_cancel_cb(GtkWidget *w, gpointer data);
+static void file_util_delete_single(gchar *path);
+
+static void file_util_rename_multiple_ok_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_multiple_cancel_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_multiple(FileDialog *fd);
+static void file_util_rename_multiple_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_multiple_select_cb(GtkWidget *clist,
+               gint row, gint column, GdkEventButton *bevent, gpointer data);
+static void file_util_rename_multiple_do(GList *source_list);
+
+static void file_util_rename_single_ok_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_single_cancel_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_single(FileDataSingle *fds);
+static void file_util_rename_single_cb(GtkWidget *w, gpointer data);
+static void file_util_rename_single_do(gchar *source_path);
+
+static void file_util_create_dir_do(gchar *source, gchar *path);
+static void file_util_create_dir_cb(GtkWidget *w, gpointer data);
+
+/*
+ *--------------------------------------------------------------------------
+ * Move and Copy routines
+ *--------------------------------------------------------------------------
+ */
+
+/*
+ * Multi file move
+ */
+
+static FileDataMult *file_data_multiple_new(GList *source_list, gchar *dest, gint copy)
+{
+       FileDataMult *fdm = g_new0(FileDataMult, 1);
+       fdm->confirm_all = FALSE;
+       fdm->confirmed = FALSE;
+       fdm->skip = FALSE;
+       fdm->source_list = source_list;
+       fdm->source_next = fdm->source_list;
+       fdm->dest_base = g_strdup(dest);
+       fdm->source = NULL;
+       fdm->dest = NULL;
+       fdm->copy = copy;
+       return fdm;
+}
+
+static void file_data_multiple_free(FileDataMult *fdm)
+{
+       free_selected_list(fdm->source_list);
+       g_free(fdm->dest_base);
+       g_free(fdm->dest);
+       g_free(fdm);
+}
+
+static void file_util_move_multiple_ok_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataMult *fdm = data;
+       fdm->confirmed = TRUE;
+       file_util_move_multiple(fdm);
+}
+
+static void file_util_move_multiple_all_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataMult *fdm = data;
+       fdm->confirm_all = TRUE;
+       file_util_move_multiple(fdm);
+}
+
+static void file_util_move_multiple_skip_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataMult *fdm = data;
+       fdm->skip = TRUE;
+       file_util_move_multiple(fdm);
+}
+
+static void file_util_move_multiple_cancel_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataMult *fdm = data;
+       file_data_multiple_free(fdm);
+}
+
+static void file_util_move_multiple(FileDataMult *fdm)
+{
+       while (fdm->dest || fdm->source_next)
+               {
+               if (!fdm->dest)
+                       {
+                       GList *work = fdm->source_next;
+                       fdm->source = work->data;
+                       fdm->dest = g_strconcat(fdm->dest_base, "/", filename_from_path(fdm->source), NULL);
+                       fdm->source_next = work->next;
+                       }
+
+               if (isfile(fdm->dest) && !fdm->confirmed && !fdm->confirm_all && !fdm->skip)
+                       {
+                       ConfirmDialog *cd;
+                       gchar *text = g_strdup_printf(_("Overwrite file:\n %s\n with:\b %s"), fdm->dest, fdm->source);
+                       cd = confirm_dialog_new(_("Overwrite file"), text, file_util_move_multiple_cancel_cb, fdm);
+                       confirm_dialog_add(cd, _("Skip"), file_util_move_multiple_skip_cb);
+                       confirm_dialog_add(cd, _("Yes to all"), file_util_move_multiple_all_cb);
+                       confirm_dialog_add(cd, _("Yes"), file_util_move_multiple_ok_cb);
+                       g_free(text);
+                       return;
+                       }
+               else
+                       {
+                       gint success = FALSE;
+                       if (fdm->skip)
+                               {
+                               success = TRUE;
+                               fdm->skip = FALSE;
+                               }
+                       else
+                               {
+                               if (fdm->copy)
+                                       {
+                                       success = copy_file(fdm->source, fdm->dest);
+                                       }
+                               else
+                                       {
+                                       if (move_file(fdm->source, fdm->dest))
+                                               {
+                                               success = TRUE;
+                                               file_is_gone(fdm->source, fdm->source_list);
+                                               }
+                                       }
+                               }
+                       if (!success)
+                               {
+                               ConfirmDialog *cd;
+                               gchar *title;
+                               gchar *text;
+                               if (fdm->copy)
+                                       {
+                                       title = _("Error copying file");
+                                       text = g_strdup_printf(_("Unable to copy file:\n%sto:\n%s\n during multiple file copy."), fdm->source, fdm->dest);
+                                       }
+                               else
+                                       {
+                                       title = _("Error moving file");
+                                       text = g_strdup_printf(_("Unable to move file:\n%sto:\n%s\n during multiple file move."), fdm->source, fdm->dest);
+                                       }
+                               cd = confirm_dialog_new(title, text, file_util_move_multiple_cancel_cb, fdm);
+                               confirm_dialog_add(cd, _("Continue"), file_util_move_multiple_skip_cb);
+                               g_free(text);
+                               return;
+                               }
+                       fdm->confirmed = FALSE;
+                       g_free(fdm->dest);
+                       fdm->dest = NULL;
+                       }
+               }
+
+       file_data_multiple_free(fdm);
+}
+
+/*
+ * Single file move
+ */
+
+static FileDataSingle *file_data_single_new(gchar *source, gchar *dest, gint copy)
+{
+       FileDataSingle *fds = g_new0(FileDataSingle, 1);
+       fds->confirmed = FALSE;
+       fds->source = g_strdup(source);
+       fds->dest = g_strdup(dest);
+       fds->copy = copy;
+       return fds;
+}
+
+static void file_data_single_free(FileDataSingle *fds)
+{
+       g_free(fds->source);
+       g_free(fds->dest);
+       g_free(fds);
+}
+
+static void file_util_move_single_ok_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataSingle *fds = data;
+       fds->confirmed = TRUE;
+       file_util_move_single(fds);
+}
+
+static void file_util_move_single_cancel_cb(GtkWidget *widget, gpointer data)
+{
+       FileDataSingle *fds = data;
+       file_data_single_free(fds);
+}
+
+static void file_util_move_single(FileDataSingle *fds)
+{
+       if (isfile(fds->dest) && !fds->confirmed)
+               {
+               ConfirmDialog *cd;
+               gchar *text = g_strdup_printf(_("Overwrite file:\n%s\n with:\n%s"), fds->dest, fds->source);
+               cd = confirm_dialog_new(_("Overwrite file"), text, file_util_move_single_cancel_cb, fds);
+               confirm_dialog_add(cd, _("Overwrite"), file_util_move_single_ok_cb);
+               g_free(text);
+               return;
+               }
+       else
+               {
+               gint success = FALSE;
+               if (fds->copy)
+                       {
+                       success = copy_file(fds->source, fds->dest);
+                       }
+               else
+                       {
+                       if (move_file(fds->source, fds->dest))
+                               {
+                               success = TRUE;
+                               file_is_gone(fds->source, NULL);
+                               }
+                       }
+               if (!success)
+                       {
+                       gchar *title;
+                       gchar *text;
+                       if (fds->copy)
+                               {
+                               title = _("Error copying file");
+                               text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s"), fds->source, fds->dest);
+                               }
+                       else
+                               {
+                               title = _("Error moving file");
+                               text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s"), fds->source, fds->dest);
+                               }
+                       warning_dialog(title, text);
+                       g_free(text);
+                       }
+               file_data_single_free(fds);
+               }
+}
+
+/*
+ * file move dialog
+ */
+
+static void file_util_move_do(FileDialog *fd)
+{
+       tab_completion_append_to_history(fd->entry, fd->dest_path);
+       if (fd->multiple_files)
+               {
+               file_util_move_multiple(file_data_multiple_new(fd->source_list, fd->dest_path, fd->type));
+               fd->source_list = NULL;
+               }
+       else
+               {
+               if (isdir(fd->dest_path))
+                       {
+                       gchar *buf = g_strconcat(fd->dest_path, "/", filename_from_path(fd->source_path), NULL);
+                       g_free(fd->dest_path);
+                       fd->dest_path = buf;
+                       }
+               file_util_move_single(file_data_single_new(fd->source_path, fd->dest_path, fd->type));
+               }
+
+       generic_dialog_close(NULL, fd);
+}
+
+static void file_util_move_check(FileDialog *fd)
+{
+       g_free(fd->dest_path);
+       fd->dest_path = remove_trailing_slash(gtk_entry_get_text(GTK_ENTRY(fd->entry)));
+
+       if (fd->multiple_files && !isdir(fd->dest_path))
+               {
+               if (isfile(fd->dest_path))
+                       warning_dialog(_("Invalid destination"), _("When operating with multiple files, please select\n a directory, not file."));
+               else
+                       warning_dialog(_("Invalid directory"), _("Please select an existing directory"));
+               return;
+               }
+
+       file_util_move_do(fd);
+}
+
+static void file_util_move_cb(GtkWidget *widget, gpointer data)
+{
+       FileDialog *fd = data;
+       file_util_move_check(fd);
+}
+
+static void file_util_move_enter_cb(gchar *path, gpointer data)
+{
+       FileDialog *fd = data;
+       file_util_move_check(fd);
+}
+
+static void file_util_move_completion_sync_cb(gchar *path, gpointer data)
+{
+       FileDialog *fd = data;
+       destination_widget_sync_to_entry(fd->entry);
+}
+
+static void real_file_util_move(gchar *source_path, GList *source_list, gchar *dest_path, gint copy)
+{
+       FileDialog *fd;
+       gchar *path = NULL;
+       gint multiple;
+       gchar *text;
+       gchar *title;
+       gchar *op_text;
+       GtkWidget *tabcomp;
+       GtkWidget *dest;
+       gchar *last_path;
+
+       if (!source_path && !source_list) return;
+
+       if (source_path)
+               {
+               path = g_strdup(source_path);
+               multiple = FALSE;
+               }
+       else if (source_list->next)
+               {
+               multiple = TRUE;
+               }
+       else
+               {
+               path = g_strdup(source_list->data);
+               free_selected_list(source_list);
+               source_list = NULL;
+               multiple = FALSE;
+               }
+
+       if (copy)
+               {
+               title = _("GQview - copy");
+               op_text = _("Copy");
+               if (path)
+                       text = g_strdup_printf(_("Copy file:\n%s\nto:"), path);
+               else
+                       text = g_strdup_printf(_("Copy multiple files from:\n%s\nto:"), dest_path);
+               }
+       else
+               {
+               title = _("GQview - move");
+               op_text = _("Move");
+               if (path)
+                       text = g_strdup_printf(_("Move file:\n%s\nto:"), path);
+               else
+                       text = g_strdup_printf(_("Move multiple files from:\n%s\nto:"), dest_path);
+               }
+
+       fd = generic_dialog_new(title, text, op_text, _("Cancel"),
+               file_util_move_cb, generic_dialog_close);
+
+       g_free(text);
+
+       fd->type = copy;
+       fd->source_path = path;
+       fd->source_list = source_list;
+       fd->multiple_files = multiple;
+
+       tabcomp = tab_completion_new_with_history(&fd->entry, fd->dialog, dest_path,
+                                          "move_copy", 32, file_util_move_enter_cb, fd);
+       last_path = tab_completion_set_to_last_history(fd->entry);
+       if (last_path)
+               {
+               fd->dest_path = g_strdup(last_path);
+               }
+       else
+               {
+               fd->dest_path = g_strdup(dest_path);
+               }
+                                          
+/*     tabcomp = tab_completion_new(&fd->entry, fd->dialog, fd->dest_path, file_util_move_enter_cb, fd);
+*/
+       gtk_box_pack_start(GTK_BOX(fd->vbox), tabcomp, FALSE, FALSE, 0);
+       gtk_widget_show(tabcomp);
+
+       gtk_widget_grab_focus(fd->entry);
+
+       dest = destination_widget_new(fd->dest_path, fd->entry);
+
+       tab_completion_add_tab_func(fd->entry, file_util_move_completion_sync_cb, fd);
+
+       gtk_box_pack_start(GTK_BOX(fd->vbox), dest, TRUE, TRUE, 0);
+}
+
+void file_util_move(gchar *source_path, GList *source_list, gchar *dest_path)
+{
+       real_file_util_move(source_path, source_list, dest_path, FALSE);
+}
+
+void file_util_copy(gchar *source_path, GList *source_list, gchar *dest_path)
+{
+       real_file_util_move(source_path, source_list, dest_path, TRUE);
+}
+
+/*
+ *--------------------------------------------------------------------------
+ * Delete routines
+ *--------------------------------------------------------------------------
+ */
+
+/*
+ * delete multiple files
+ */
+
+static void file_util_delete_multiple_ok_cb(GtkWidget *w, gpointer data)
+{
+       GList *source_list = data;
+
+       while(source_list)
+               {
+               gchar *path = source_list->data;
+               source_list = g_list_remove(source_list, path);
+               if (unlink (path) < 0)
+                       {
+                       ConfirmDialog *cd;
+                       gchar *text;
+                       if (source_list)
+                               {
+                               text = g_strdup_printf(_("Unable to delete file:\n %s\n Continue multiple delete operation?"), path);
+                               cd = confirm_dialog_new(_("Delete failed"), text, file_util_delete_multiple_cancel_cb, source_list);
+                               confirm_dialog_add(cd, _("Continue"), file_util_delete_multiple_ok_cb);
+                               }
+                       else
+                               {
+                               text = g_strdup_printf(_("Unable to delete file:\n%s"), path);
+                               warning_dialog(_("Delete failed"), text);
+                               }
+                       g_free(text);
+                       g_free(path);
+                       return;
+                       }
+               else
+                       {
+                       file_is_gone(path, source_list);
+                       }
+               g_free(path);
+               }
+}
+
+static void file_util_delete_multiple_cancel_cb(GtkWidget *w, gpointer data)
+{
+       GList *source_list = data;
+       free_selected_list(source_list);
+}
+
+static void file_util_delete_multiple(GList *source_list)
+{
+       if (!confirm_delete)
+               {
+               file_util_delete_multiple_ok_cb(NULL, source_list);
+               }
+       else
+               {
+               ConfirmDialog *cd;
+               cd = confirm_dialog_new(_("Delete files"), _("About to delete multiple files..."), file_util_delete_multiple_cancel_cb, source_list);
+               confirm_dialog_add(cd, _("Delete"), file_util_delete_multiple_ok_cb);
+               }
+}
+
+/*
+ * delete single file
+ */
+
+static void file_util_delete_ok_cb(GtkWidget *w, gpointer data)
+{
+       gchar *path = data;
+
+       if (unlink (path) < 0)
+               {
+               gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), path);
+               warning_dialog(_("File deletion failed"), text);
+               g_free(text);
+               }
+       else
+               {
+               file_is_gone(path, NULL);
+               }
+
+       g_free(path);
+}
+
+static void file_util_delete_cancel_cb(GtkWidget *w, gpointer data)
+{
+       gchar *path = data;
+       g_free(path);
+}
+
+static void file_util_delete_single(gchar *path)
+{
+       gchar *buf = g_strdup(path);
+
+       if (!confirm_delete)
+               {
+               file_util_delete_ok_cb(NULL, buf);
+               }
+       else
+               {
+               ConfirmDialog *cd;
+               gchar *text = g_strdup_printf(_("About to delete the file:\n %s"), buf);
+               cd = confirm_dialog_new(_("Delete file"), text, file_util_delete_cancel_cb, buf);
+               confirm_dialog_add(cd, _("Delete"), file_util_delete_ok_cb);
+               g_free(text);
+               }
+}
+
+void file_util_delete(gchar *source_path, GList *source_list)
+{
+       if (!source_path && !source_list) return;
+
+       if (source_path)
+               {
+               file_util_delete_single(source_path);
+               }
+       else if (!source_list->next)
+               {
+               file_util_delete_single(source_list->data);
+               free_selected_list(source_list);
+               }
+       else
+               {
+               file_util_delete_multiple(source_list);
+               }
+}
+
+/*
+ *--------------------------------------------------------------------------
+ * Rename routines
+ *--------------------------------------------------------------------------
+ */
+
+/*
+ * rename multiple files
+ */
+
+static void file_util_rename_multiple_ok_cb(GtkWidget *w, gpointer data)
+{
+       FileDialog *fd = data;
+       if (!GTK_WIDGET_VISIBLE(fd->dialog)) gtk_widget_show(fd->dialog);
+       fd->type = TRUE;
+       file_util_rename_multiple(fd);
+}
+
+static void file_util_rename_multiple_cancel_cb(GtkWidget *w, gpointer data)
+{
+       FileDialog *fd = data;
+       if (!GTK_WIDGET_VISIBLE(fd->dialog)) gtk_widget_show(fd->dialog);
+       return;
+}
+
+static void file_util_rename_multiple(FileDialog *fd)
+{
+       if (isfile(fd->dest_path) && !fd->type)
+               {
+               ConfirmDialog *cd;
+               gchar *text = g_strdup_printf(_("Overwrite file:\n%s\nby renaming:\n%s"), fd->dest_path, fd->source_path);
+               cd = confirm_dialog_new(_("Overwrite file"), text, file_util_rename_multiple_cancel_cb, fd);
+               confirm_dialog_add(cd, _("Overwrite"), file_util_rename_multiple_ok_cb);
+               g_free(text);
+               gtk_widget_hide(fd->dialog);
+               return;
+               }
+       else
+               {
+               if (rename (fd->source_path, fd->dest_path) < 0)
+                       {
+                       gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"), filename_from_path(fd->source_path), filename_from_path(fd->dest_path));
+                       warning_dialog(_("Error renaming file"), text);
+                       g_free(text);
+                       }
+               else
+                       {
+                       gint row;
+                       gint n;
+                       GtkWidget *clist;
+                       gchar *path;
+
+                       file_is_renamed(fd->source_path, fd->dest_path);
+
+                       clist = gtk_object_get_user_data(GTK_OBJECT(fd->entry));
+                       path = gtk_object_get_user_data(GTK_OBJECT(clist));
+                       row = gtk_clist_find_row_from_data(GTK_CLIST(clist), path);
+
+                       n = g_list_length(GTK_CLIST(clist)->row_list);
+                       if (debug) printf("r=%d n=%d\n", row, n);
+                       if (n - 1 > row)
+                               n = row;
+                       else if (n > 1)
+                               n = row - 1;
+                       else
+                               n = -1;
+
+                       if (n >= 0)
+                               {
+                               gtk_object_set_user_data(GTK_OBJECT(clist), NULL);
+                               gtk_clist_remove(GTK_CLIST(clist), row);
+                               gtk_clist_select_row(GTK_CLIST(clist), n, -1);
+                               }
+                       else
+                               {
+                               if (debug) printf("closed by #%d\n", n);
+                               generic_dialog_close(NULL, fd);
+                               }
+                       }
+               }
+}
+
+static void file_util_rename_multiple_cb(GtkWidget *w, gpointer data)
+{
+       FileDialog *fd = data;
+       gchar *base;
+       gchar *name;
+
+       name = gtk_entry_get_text(GTK_ENTRY(fd->entry));
+       base = remove_level_from_path(fd->source_path);
+       g_free(fd->dest_path);
+       fd->dest_path = g_strconcat(base, "/", name, NULL);
+       g_free(base);
+
+       if (strlen(name) == 0 || strcmp(fd->source_path, fd->dest_path) == 0)
+               {
+               return;
+               }
+
+       fd->type = FALSE;
+       file_util_rename_multiple(fd);
+}
+
+static void file_util_rename_multiple_select_cb(GtkWidget *clist,
+               gint row, gint column, GdkEventButton *bevent, gpointer data)
+{
+       FileDialog *fd = data;
+       GtkWidget *label;
+       gchar *name;
+       gchar *path;
+
+       label = gtk_object_get_user_data(GTK_OBJECT(fd->dialog));
+       path = gtk_clist_get_row_data(GTK_CLIST(clist), row);
+       g_free(fd->source_path);
+       fd->source_path = g_strdup(path);
+       gtk_object_set_user_data(GTK_OBJECT(clist), path);
+       name = filename_from_path(fd->source_path);
+
+       gtk_label_set(GTK_LABEL(label), name);
+       gtk_entry_set_text(GTK_ENTRY(fd->entry), name);
+
+       gtk_widget_grab_focus(fd->entry);
+}
+
+static void file_util_rename_multiple_do(GList *source_list)
+{
+       FileDialog *fd;
+       GtkWidget *scrolled;
+       GtkWidget *clist;
+       GtkWidget *label;
+       GList *work;
+
+       fd = generic_dialog_new(_("GQview - rename"), _("Rename multiple files:"), _("Rename"), _("Cancel"),
+               file_util_rename_multiple_cb, generic_dialog_close);
+
+       fd->source_path = g_strdup(source_list->data);
+       fd->dest_path = NULL;
+
+       scrolled = gtk_scrolled_window_new(NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                               GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+       gtk_box_pack_start(GTK_BOX(fd->vbox), scrolled, TRUE, TRUE, 0);
+       gtk_widget_show(scrolled);
+
+       clist=gtk_clist_new (1);
+       gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
+       gtk_signal_connect (GTK_OBJECT (clist), "select_row",(GtkSignalFunc) file_util_rename_multiple_select_cb, fd);
+       gtk_widget_set_usize(clist, 250, 150);
+       gtk_container_add (GTK_CONTAINER (scrolled), clist);
+       gtk_widget_show (clist);
+
+       gtk_object_set_user_data(GTK_OBJECT(clist), source_list->data);
+
+       work = source_list;
+       while(work)
+               {
+               gint row;
+               gchar *buf[2];
+               buf[0] = filename_from_path(work->data);
+               buf[1] = NULL;
+               row = gtk_clist_append(GTK_CLIST(clist), buf);
+               gtk_clist_set_row_data_full(GTK_CLIST(clist), row,
+                               work->data, (GtkDestroyNotify) g_free);
+               work = work->next;
+               }
+
+       g_list_free(source_list);
+
+       label = gtk_label_new(_("Rename:"));
+       gtk_box_pack_start(GTK_BOX(fd->vbox), label, FALSE, FALSE, 0);
+       gtk_widget_show(label);
+
+       label = gtk_label_new(filename_from_path(fd->source_path));
+       gtk_box_pack_start(GTK_BOX(fd->vbox), label, FALSE, FALSE, 0);
+       gtk_widget_show(label);
+       gtk_object_set_user_data(GTK_OBJECT(fd->dialog), label);
+
+       label = gtk_label_new(_("to:"));
+       gtk_box_pack_start(GTK_BOX(fd->vbox), label, FALSE, FALSE, 0);
+       gtk_widget_show(label);
+
+       fd->entry = gtk_entry_new();
+       gtk_entry_set_text(GTK_ENTRY(fd->entry), filename_from_path(fd->source_path));
+       gtk_box_pack_start(GTK_BOX(fd->vbox), fd->entry, FALSE, FALSE, 0);
+       gtk_widget_grab_focus(fd->entry);
+       gtk_widget_show(fd->entry);
+
+       gtk_object_set_user_data(GTK_OBJECT(fd->entry), clist);
+}
+
+/*
+ * rename single file
+ */
+
+static void file_util_rename_single_ok_cb(GtkWidget *w, gpointer data)
+{
+       FileDataSingle *fds = data;
+       fds->confirmed = TRUE;
+       file_util_rename_single(fds);
+}
+
+static void file_util_rename_single_cancel_cb(GtkWidget *w, gpointer data)
+{
+       FileDataSingle *fds = data;
+       file_data_single_free(fds);
+}
+
+static void file_util_rename_single(FileDataSingle *fds)
+{
+       if (isfile(fds->dest) && !fds->confirmed)
+               {
+               ConfirmDialog *cd;
+               gchar *text = g_strdup_printf(_("Overwrite file:\n%s\nwith:\n%s"), fds->dest,fds->source);
+               cd = confirm_dialog_new(_("Overwrite file"), text, file_util_rename_single_cancel_cb, fds);
+               confirm_dialog_add(cd, _("Overwrite"), file_util_rename_single_ok_cb);
+               g_free(text);
+               return;
+               }
+       else
+               {
+               if (rename (fds->source, fds->dest) < 0)
+                       {
+                       gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), filename_from_path(fds->source), filename_from_path(fds->dest));
+                       warning_dialog(_("Error renaming file"), text);
+                       g_free(text);
+                       }
+               else
+                       {
+                       file_is_renamed(fds->source, fds->dest);
+                       }
+               }
+       file_data_single_free(fds);
+}
+
+static void file_util_rename_single_cb(GtkWidget *w, gpointer data)
+{
+       FileDialog *fd = data;
+       gchar *name = gtk_entry_get_text(GTK_ENTRY(fd->entry));
+       gchar *buf = g_strconcat(fd->dest_path, "/", name, NULL);
+
+       if (strlen(name) == 0 || strcmp(fd->source_path, buf) == 0)
+               {
+               g_free(buf);
+               return;
+               }
+
+       g_free(fd->dest_path);
+       fd->dest_path = buf;
+
+       file_util_rename_single(file_data_single_new(fd->source_path, fd->dest_path, fd->type));
+
+       generic_dialog_close(NULL, fd);
+}
+
+static void file_util_rename_single_do(gchar *source_path)
+{
+       FileDialog *fd;
+       gchar *text;
+       gchar *name = filename_from_path(source_path);
+
+       text = g_strdup_printf(_("Rename file:\n%s\nto:"), name);
+       fd = generic_dialog_new(_("GQview - rename"), text, _("Rename"), _("Cancel"),
+               file_util_rename_single_cb, generic_dialog_close);
+       g_free(text);
+
+       fd->source_path = g_strdup(source_path);
+       fd->dest_path = remove_level_from_path(source_path);
+
+       fd->entry = gtk_entry_new();
+       gtk_entry_set_text(GTK_ENTRY(fd->entry), name);
+       gtk_box_pack_start(GTK_BOX(fd->vbox), fd->entry, FALSE, FALSE, 0);
+       gtk_widget_grab_focus(fd->entry);
+       gtk_widget_show(fd->entry);
+}
+
+void file_util_rename(gchar *source_path, GList *source_list)
+{
+       if (!source_path && !source_list) return;
+
+       if (source_path)
+               {
+               file_util_rename_single_do(source_path);
+               }
+       else if (!source_list->next)
+               {
+               file_util_rename_single_do(source_list->data);
+               free_selected_list(source_list);
+               }
+       else
+               {
+               file_util_rename_multiple_do(source_list);
+               }
+}
+
+/*
+ *--------------------------------------------------------------------------
+ * Create directory routines
+ *--------------------------------------------------------------------------
+ */
+
+static void file_util_create_dir_do(gchar *source, gchar *path)
+{
+       if (isfile(path))
+               {
+               gchar *text = g_strdup_printf(_("The path:\n%s\nalready exists as a file."), filename_from_path(path));
+               warning_dialog(_("Could not create directory"), text);
+               g_free(text);
+               }
+       else if (isdir(path))
+               {
+               gchar *text = g_strdup_printf(_("The directory:\n%s\nalready exists."), filename_from_path(path));
+               warning_dialog(_("Directory exists"), text);
+               g_free(text);
+               }
+       else
+               {
+               if (mkdir (path, 0755) < 0)
+                       {
+                       gchar *text = g_strdup_printf(_("Unable to create directory:\n%s"), filename_from_path(path));
+                       warning_dialog(_("Error creating directory"), text);
+                       g_free(text);
+                       }
+               else
+                       {
+                       if (strcmp(source, current_path) == 0)
+                               {
+                               gchar *buf = g_strdup(current_path);
+                               filelist_change_to(buf);
+                               g_free(buf);
+                               }
+                       }
+               }
+}
+
+static void file_util_create_dir_cb(GtkWidget *w, gpointer data)
+{
+       FileDialog *fd = data;
+       gchar *name = gtk_entry_get_text(GTK_ENTRY(fd->entry));
+
+       if (strlen(name) == 0) return;
+
+       g_free(fd->dest_path);
+       fd->dest_path = g_strconcat(fd->source_path, "/", name, NULL);
+
+       file_util_create_dir_do(fd->source_path, fd->dest_path);
+
+       generic_dialog_close(NULL, fd);
+}
+
+void file_util_create_dir(gchar *path)
+{
+       FileDialog *fd;
+       gchar *text;
+       gchar *name;
+
+       if (!isdir(path)) return;
+       name = filename_from_path(path);
+
+       text = g_strdup_printf(_("Create directory in:\n%s\nnamed:"), path);
+       fd = generic_dialog_new(_("GQview - new directory"), text, _("Create"), _("Cancel"),
+               file_util_create_dir_cb, generic_dialog_close);
+       g_free(text);
+
+       fd->source_path = g_strdup(path);
+       fd->dest_path = NULL;
+
+       fd->entry = gtk_entry_new();
+       gtk_box_pack_start(GTK_BOX(fd->vbox), fd->entry, FALSE, FALSE, 0);
+       gtk_widget_grab_focus(fd->entry);
+       gtk_widget_show(fd->entry);
+}
+
diff --git a/src/window.c b/src/window.c
new file mode 100644 (file)
index 0000000..85b2281
--- /dev/null
@@ -0,0 +1,501 @@
+/*
+ * GQview image viewer
+ * (C)1999 John Ellis
+ *
+ * Author: John Ellis
+ *
+ */
+
+#include "gqview.h"
+
+#define MAINWINDOW_DEF_WIDTH 500
+#define MAINWINDOW_DEF_HEIGHT 400
+#define TOOLWINDOW_DEF_WIDTH 224
+#define TOOLWINDOW_DEF_HEIGHT 450
+#define LIST_DEFAULT_WIDTH -1
+#define LIST_DEFAULT_HEIGHT 100
+
+static GtkWidget *add_label(gchar *text, GtkWidget *box, gint start, gint size, gint expand);
+static void info_area_create(GtkWidget *vbox);
+
+static void toolwindow_create();
+static void toolwindow_destroy();
+static void toolwindow_show();
+
+static void image_focus_paint(GtkWidget *widget);
+static gint image_focus_expose (GtkWidget *widget, GdkEventExpose *event, gpointer data);
+static gint image_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data);
+static gint image_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data);
+
+static void create_tools(GtkAccelGroup *accel_grp, GtkTooltips *tooltips);
+static void mainwindow_destroy_cb(GtkWidget *widget, gpointer data);
+
+/*
+ *-----------------------------------------------------------------------------
+ * information widget creation routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static GtkWidget *add_label(gchar *text, GtkWidget *box, gint start, gint size, gint expand)
+{
+       GtkWidget *label;
+       GtkWidget *frame;
+
+       frame = gtk_frame_new (NULL);
+       if (size)
+               gtk_widget_set_usize (frame, size, -1);
+       gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_IN);
+       if (start)
+               gtk_box_pack_start(GTK_BOX(box), frame, expand, expand, 0);
+       else
+               gtk_box_pack_end(GTK_BOX(box), frame, expand, expand, 0);
+       gtk_widget_show(frame);
+
+       label = gtk_label_new(text);
+       gtk_container_add (GTK_CONTAINER (frame), label);
+       gtk_widget_show(label);
+
+       return label;
+}
+
+static void info_area_create(GtkWidget *vbox)
+{
+       gchar *status_text;
+       gchar *details_text;
+       gchar *zoom_text;
+       gchar *buf;
+
+       if (info_status)
+               {
+               gtk_label_get(GTK_LABEL(info_status), &buf);
+               status_text = g_strdup(buf);
+
+               gtk_label_get(GTK_LABEL(info_details), &buf);
+               details_text = g_strdup(buf);
+
+               gtk_label_get(GTK_LABEL(info_zoom), &buf);
+               zoom_text = g_strdup(buf);
+               }
+       else
+               {
+               status_text = g_strdup("");
+               details_text = g_strdup("GQview");
+               zoom_text = g_strdup(":");
+               }
+
+       if (info_box)
+               {
+               gtk_widget_destroy(info_box);
+               info_box = NULL;
+               }
+
+       if (vbox)
+               {
+               GtkWidget *hbox;
+               hbox = gtk_hbox_new(FALSE, 0);
+               gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+               gtk_widget_show(hbox);
+                       
+               info_progress_bar = gtk_progress_bar_new();
+               gtk_widget_set_usize(info_progress_bar,150,-1);
+               gtk_box_pack_start (GTK_BOX (hbox), info_progress_bar, FALSE, FALSE, 0);
+               gtk_widget_show(info_progress_bar);
+
+               info_zoom = add_label(zoom_text, hbox, FALSE, 48, FALSE);
+
+               info_status = add_label(status_text, vbox, TRUE, 0, FALSE);
+               info_details = add_label(details_text, vbox, TRUE, 0, FALSE);
+               }
+       else
+               {
+               info_box = gtk_hbox_new(FALSE, 0);
+
+               info_progress_bar = gtk_progress_bar_new();
+               gtk_widget_set_usize(info_progress_bar,150,-1);
+               gtk_box_pack_start (GTK_BOX (info_box), info_progress_bar, FALSE, FALSE, 0);
+               gtk_widget_show(info_progress_bar);
+
+               info_status = add_label(status_text, info_box, TRUE, 0, TRUE);
+               info_details = add_label(details_text, info_box, TRUE, 0, TRUE);
+               info_zoom = add_label(zoom_text, info_box, FALSE, 48, FALSE);
+
+               gtk_widget_show(info_box);
+               }
+
+       image_set_labels(info_details, info_zoom);
+
+       g_free(status_text);
+       g_free(details_text);
+       g_free(zoom_text);
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * tool window create/show/hide routines (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void toolwindow_destroy_cb(GtkWidget *widget, gpointer data)
+{
+       toolwindow_float();
+}
+
+static void toolwindow_create()
+{
+       GtkWidget *vbox;
+       GtkAllocation req_size;
+
+       toolwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+       gtk_signal_connect (GTK_OBJECT (toolwindow), "delete_event",(GtkSignalFunc) toolwindow_destroy_cb, NULL);
+       gtk_window_set_policy(GTK_WINDOW(toolwindow), TRUE, TRUE, FALSE);
+       gtk_window_set_title (GTK_WINDOW (toolwindow), _("GQview Tools"));
+       gtk_window_set_wmclass(GTK_WINDOW (toolwindow), "tools", "GQview");
+       gtk_container_border_width (GTK_CONTAINER (toolwindow), 0);
+       gtk_window_add_accel_group(GTK_WINDOW(toolwindow),mainwindow_accel_grp);
+
+       gtk_signal_connect(GTK_OBJECT(toolwindow), "key_press_event", GTK_SIGNAL_FUNC(key_press_cb), NULL);
+
+       if (save_window_positions)
+               {
+               gtk_window_set_default_size (GTK_WINDOW(toolwindow), float_window_w, float_window_h);
+               gtk_widget_set_uposition(toolwindow, float_window_x, float_window_y);
+               req_size.x = req_size.y = 0;
+               req_size.width = float_window_w;
+               req_size.height = float_window_h;
+               }
+       else
+               {
+               gtk_window_set_default_size (GTK_WINDOW(toolwindow), TOOLWINDOW_DEF_WIDTH, TOOLWINDOW_DEF_HEIGHT);
+               req_size.x = req_size.y = 0;
+               req_size.width = TOOLWINDOW_DEF_WIDTH;
+               req_size.height = TOOLWINDOW_DEF_HEIGHT;
+               }
+       gtk_widget_size_allocate(toolwindow, &req_size);
+
+       vbox = gtk_vbox_new(FALSE, 0);
+       gtk_container_add(GTK_CONTAINER(toolwindow), vbox);
+
+       gtk_widget_realize(toolwindow);
+       gtk_widget_realize(vbox);
+
+       if (tool_vbox->parent)
+               {
+               gtk_widget_ref(tool_vbox);
+               gtk_container_remove(GTK_CONTAINER(tool_vbox->parent), tool_vbox);
+               gtk_box_pack_start(GTK_BOX(vbox), tool_vbox, TRUE, TRUE, 0);
+               gtk_widget_unref(tool_vbox);
+               }
+       else
+               {
+               gtk_box_pack_start(GTK_BOX(vbox), tool_vbox, TRUE, TRUE, 0);
+               }
+
+       info_area_create(vbox);
+
+       gtk_widget_show_all(vbox);
+}
+
+static void toolwindow_destroy()
+{
+       if (toolwindow && GTK_WIDGET_VISIBLE(toolwindow))
+               {
+               gdk_window_get_position (toolwindow->window, &float_window_x, &float_window_y);
+               gdk_window_get_size(toolwindow->window, &float_window_w, &float_window_h);
+               }
+
+       info_area_create(NULL);
+
+       gtk_widget_ref(tool_vbox);
+       gtk_container_remove(GTK_CONTAINER(tool_vbox->parent), tool_vbox);
+       gtk_box_pack_start(GTK_BOX(mainwindow_hbox), tool_vbox, FALSE, FALSE, 0);
+       gtk_widget_unref(tool_vbox);
+
+       gtk_box_pack_start(GTK_BOX(mainwindow_vbox), info_box, FALSE, FALSE, 0);
+       gtk_widget_destroy(toolwindow);
+       toolwindow = NULL;
+}
+
+static void toolwindow_show()
+{
+       gtk_widget_show(toolwindow);
+       if (save_window_positions)
+               gdk_window_move(toolwindow->window, float_window_x, float_window_y);
+
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * tool window hide/float routines (public)
+ *-----------------------------------------------------------------------------
+ */ 
+
+void toolwindow_float()
+{
+       if (toolwindow)
+               {
+               if (GTK_WIDGET_VISIBLE(toolwindow))
+                       {
+                       toolwindow_destroy();
+                       tools_float = FALSE;
+                       tools_hidden = FALSE;
+                       }
+               else
+                       {
+                       toolwindow_show();
+                       tools_float = TRUE;
+                       tools_hidden = FALSE;
+                       }
+               }
+       else
+               {
+               toolwindow_create();
+               toolwindow_show();
+               tools_float = TRUE;
+               tools_hidden = FALSE;
+               }
+}
+
+void toolwindow_hide()
+{
+       if (toolwindow)
+               {
+               if (GTK_WIDGET_VISIBLE(toolwindow))
+                       {
+                       gtk_widget_hide(toolwindow);
+                       gdk_window_get_position (toolwindow->window, &float_window_x, &float_window_y);
+                       gdk_window_get_size(toolwindow->window, &float_window_w, &float_window_h);
+                       tools_hidden = TRUE;
+                       }
+               else
+                       {
+                       if (tools_float)
+                               toolwindow_show();
+                       else
+                               toolwindow_destroy();
+                       tools_hidden = FALSE;
+                       }
+               }
+       else
+               {
+               toolwindow_create();
+               tools_hidden = TRUE;
+               }
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * image viewport focus display (private)
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void image_focus_paint(GtkWidget *widget)
+{
+       gint width, height;
+       gdk_window_get_size (widget->window, &width, &height);
+       gdk_draw_rectangle (widget->window,
+                           widget->style->black_gc,
+                           FALSE,
+                           0, 0, width - 1, height - 1);
+}
+
+static gint image_focus_expose (GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+       image_focus_paint (widget);
+       return TRUE;
+}
+
+static gint image_focus_in_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+       gtk_signal_connect_after (GTK_OBJECT (widget), "draw",
+                       GTK_SIGNAL_FUNC (image_focus_expose), NULL);
+       gtk_signal_connect (GTK_OBJECT (widget), "expose_event",
+                       GTK_SIGNAL_FUNC (image_focus_paint), NULL);
+       GTK_WIDGET_SET_FLAGS(widget, GTK_HAS_FOCUS);
+
+       gtk_widget_queue_draw (widget);
+       return FALSE;
+}
+
+static gint image_focus_out_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data)
+{
+       gtk_signal_disconnect_by_func (GTK_OBJECT (widget),
+                       GTK_SIGNAL_FUNC (image_focus_paint), NULL);
+       gtk_signal_disconnect_by_func (GTK_OBJECT (widget),
+                       GTK_SIGNAL_FUNC (image_focus_expose), NULL);
+       GTK_WIDGET_UNSET_FLAGS(widget, GTK_HAS_FOCUS);
+       gtk_widget_queue_clear (widget);
+       gtk_viewport_set_shadow_type (GTK_VIEWPORT(widget), GTK_SHADOW_IN);
+       return FALSE;
+}
+
+/*
+ *-----------------------------------------------------------------------------
+ * main window setup
+ *-----------------------------------------------------------------------------
+ */ 
+
+static void create_tools(GtkAccelGroup *accel_grp, GtkTooltips *tooltips)
+{
+       GtkWidget *menu_bar;
+       GtkWidget *button_bar;
+       GtkWidget *vpaned;
+       GtkWidget *scrolled;
+       GtkWidget *tabcomp;
+
+       tool_vbox = gtk_vbox_new(FALSE, 0);
+
+       menu_bar = create_menu_bar(accel_grp);
+       gtk_box_pack_start (GTK_BOX(tool_vbox), menu_bar,FALSE,FALSE,0);
+       gtk_widget_show(menu_bar);
+
+       button_bar = create_button_bar(tooltips);
+       gtk_box_pack_start (GTK_BOX(tool_vbox), button_bar,FALSE,FALSE,0);
+       gtk_widget_show(button_bar);
+
+       /* path entry */
+       tabcomp = tab_completion_new(&path_entry, mainwindow, NULL, path_entry_cb, NULL);
+       gtk_box_pack_start (GTK_BOX (tool_vbox), tabcomp, FALSE, FALSE, 0);
+       gtk_widget_show (tabcomp);
+
+        /* history button */
+       history_menu = gtk_option_menu_new ();
+       gtk_box_pack_start (GTK_BOX (tool_vbox), history_menu, FALSE, FALSE, 0);
+       gtk_widget_show (history_menu);
+
+       vpaned = gtk_vpaned_new ();
+       gtk_paned_handle_size (GTK_PANED(vpaned), 10);
+       gtk_paned_gutter_size (GTK_PANED(vpaned), 10);
+       gtk_box_pack_start (GTK_BOX (tool_vbox), vpaned, TRUE, TRUE, 0);
+       gtk_widget_show (vpaned);
+
+       /* dir list */
+       scrolled = gtk_scrolled_window_new(NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                               GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+       gtk_paned_add1 (GTK_PANED(vpaned), scrolled);
+       gtk_widget_show(scrolled);
+
+       dir_clist=gtk_clist_new(1);
+       gtk_signal_connect (GTK_OBJECT (dir_clist), "button_press_event",(GtkSignalFunc) dir_press_cb, NULL);
+       gtk_signal_connect (GTK_OBJECT (dir_clist), "select_row",(GtkSignalFunc) dir_select_cb, NULL);
+       gtk_clist_column_titles_passive (GTK_CLIST (dir_clist)); 
+       gtk_widget_set_usize(dir_clist, LIST_DEFAULT_WIDTH, LIST_DEFAULT_HEIGHT);
+       gtk_container_add (GTK_CONTAINER (scrolled), dir_clist);
+       gtk_widget_show(dir_clist);
+
+       /* file list */
+       scrolled = gtk_scrolled_window_new(NULL, NULL);
+       gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                               GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+       gtk_paned_add2 (GTK_PANED(vpaned), scrolled);
+       gtk_widget_show(scrolled);
+
+       file_clist=gtk_clist_new(1);
+       gtk_clist_set_selection_mode(GTK_CLIST(file_clist), GTK_SELECTION_EXTENDED);
+       gtk_signal_connect (GTK_OBJECT (file_clist), "button_press_event",(GtkSignalFunc) file_press_cb, NULL);
+       gtk_signal_connect (GTK_OBJECT (file_clist), "select_row",(GtkSignalFunc) file_select_cb, NULL);
+       gtk_signal_connect_after (GTK_OBJECT (file_clist), "unselect_row",(GtkSignalFunc) file_unselect_cb, NULL);
+       gtk_clist_column_titles_passive (GTK_CLIST (file_clist)); 
+       gtk_widget_set_usize(file_clist, LIST_DEFAULT_WIDTH, LIST_DEFAULT_HEIGHT);
+       gtk_container_add (GTK_CONTAINER (scrolled), file_clist);
+       gtk_widget_show(file_clist);
+
+       gtk_widget_show(tool_vbox);
+}
+
+static void mainwindow_destroy_cb(GtkWidget *widget, gpointer data)
+{
+       exit_gqview();
+}
+
+void create_main_window()
+{
+       GtkWidget *image_window;
+       GtkAllocation req_size;
+       GtkTooltips *tooltips;
+       GdkColormap *colormap;
+       static GdkColor tooltip_color = { 0, 0xffff, 0xf9f9, 0xcbcb }; /*255 249 203*/
+
+       mainwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+       gtk_window_set_policy(GTK_WINDOW(mainwindow), TRUE, TRUE, FALSE);
+
+       gtk_signal_connect (GTK_OBJECT (mainwindow), "delete_event",(GtkSignalFunc) mainwindow_destroy_cb, NULL);
+
+       gtk_window_set_title(GTK_WINDOW (mainwindow), "GQview");
+       gtk_window_set_wmclass(GTK_WINDOW (mainwindow), "gqview", "GQview");
+       gtk_container_border_width (GTK_CONTAINER (mainwindow), 0);
+
+       gtk_signal_connect(GTK_OBJECT(mainwindow), "key_press_event", GTK_SIGNAL_FUNC(key_press_cb), NULL);
+
+       if (save_window_positions)
+               {
+               req_size.x = main_window_x;
+               req_size.y = main_window_y;
+               req_size.width = main_window_w;
+               req_size.height = main_window_h;
+               gtk_window_set_default_size (GTK_WINDOW(mainwindow), main_window_w, main_window_h);
+               gtk_widget_set_uposition(mainwindow, main_window_x, main_window_y);
+
+               }
+       else
+               {
+               req_size.x = 0;
+               req_size.y = 0;
+               req_size.width = MAINWINDOW_DEF_WIDTH;
+               req_size.height = MAINWINDOW_DEF_HEIGHT;
+               gtk_window_set_default_size (GTK_WINDOW(mainwindow), MAINWINDOW_DEF_WIDTH, MAINWINDOW_DEF_HEIGHT);
+               }
+
+       gtk_widget_size_allocate(mainwindow, &req_size);
+
+       gtk_widget_realize(mainwindow);
+
+       mainwindow_accel_grp = gtk_accel_group_new ();
+       gtk_window_add_accel_group(GTK_WINDOW(mainwindow),mainwindow_accel_grp);
+
+       tooltips = gtk_tooltips_new();
+       colormap = gdk_window_get_colormap (mainwindow->window);
+       gdk_color_alloc (colormap, &tooltip_color);
+       gtk_tooltips_set_colors(tooltips, &tooltip_color, &mainwindow->style->fg[GTK_STATE_NORMAL]);
+
+       create_menu_popups();
+       create_tools(mainwindow_accel_grp, tooltips);
+
+       image_window = image_create();
+
+       mainwindow_vbox = gtk_vbox_new(FALSE, 0);
+       gtk_container_add (GTK_CONTAINER (mainwindow), mainwindow_vbox);
+       gtk_widget_show(mainwindow_vbox);
+
+       mainwindow_hbox = gtk_hbox_new(FALSE, 0);
+       gtk_box_pack_start(GTK_BOX(mainwindow_vbox), mainwindow_hbox, TRUE, TRUE, 0);
+       gtk_widget_show(mainwindow_hbox);
+
+       if (tools_float || tools_hidden)
+               {
+               toolwindow_create();
+               if (!tools_hidden)
+                       {
+                       toolwindow_show();
+                       }
+               }
+       else
+               {
+               info_area_create(NULL);
+               gtk_box_pack_start(GTK_BOX(mainwindow_hbox), tool_vbox, FALSE, FALSE, 0);
+               gtk_box_pack_start(GTK_BOX(mainwindow_vbox), info_box, FALSE, FALSE, 0);
+               }
+
+       gtk_box_pack_end(GTK_BOX(mainwindow_hbox), image_window, TRUE, TRUE, 0);
+       gtk_widget_show_all(image_window);
+       
+       GTK_WIDGET_SET_FLAGS(main_image->viewport, GTK_CAN_FOCUS);
+       gtk_signal_connect(GTK_OBJECT(main_image->viewport), "focus_in_event", GTK_SIGNAL_FUNC(image_focus_in_cb), NULL);
+       gtk_signal_connect(GTK_OBJECT(main_image->viewport), "focus_out_event", GTK_SIGNAL_FUNC(image_focus_out_cb), NULL);
+
+       gtk_widget_show(mainwindow);
+
+       if (save_window_positions)
+               gdk_window_move(mainwindow->window, main_window_x, main_window_y);
+}
+